Processos. Programas e Processos. Aula 1 - Chamadas ao sistema. José Pedro Oliveira fork exit getpid, getppid wait, waitpid

Documentos relacionados
Manipulação de processos

E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro. Programação Concorrente em Linux

Processos em Unix. Conteúdo: Definição de Processos em Unix Estrutura, tipo e escalonamento de processos em Unix Processos, Pai, Filho e Zumbi.


6. Comunicação entre processos - Pipes

SVCs para Controle de Processos no Unix. Sistemas Operacionais

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Sistema de Entrada/Saída

Processos. Estados principais de um Processo: Contexto de um Processo. Nível de um Processo.

Conteúdo programático

Controlo de processos e sinais

Arquivo de retorno Boleto Bancário Formato XML

Programação 2009/2010 MEEC - MEAer Laboratório 5 Semana de 26 de outubro de 2009

Um processo sob UNIX ocupa uma área de memória formada basicamente por 3 partes:

Sistemas Operacionais

MÓDULO 02 PROCESSOS E THREADS PROCESSOS e THREADS

PROCESSOS. Prof. Maicon A. Sartin

Conceitos de Sistemas Operacionais: Chamadas de Sistema. Prof Rafael J. Sandim

Comunicação entre Processos Canal de comunicação Arquitetura da comunicação Modelos de comunicação

Sistemas Operacionais INF Prof. José Gonçalves

UNIVERSIDADE DO TOCANTINS TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PRÁTICA EM PROGRAMAÇÃO DE SISTEMAS

Utilização de threads em Java

Driver Next Versão 1.0 de Português

LEIC/LERC 2012/13 2º Teste de Sistemas Operativos 15/Janeiro/2013

UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - CENTRO 06. Funções, variáveis, parâmetros formais

Analise o código abaixo:

Elementos de programação em C

SIG-ISS Manual de integração do WebService para NFS-e

Modelo Lógico: Tabelas, Chaves Primárias e Estrangeiras

Fundamentos de Bancos de Dados 3 a Prova Caderno de Questões

Comunicação entre Processos por Troca de Mensagens. Prof. Celso maciel da Costa

Inteligência Artificial

Tópicos Avançados em Banco de Dados Dependências sobre regime e controle de objetos em Banco de Dados. Prof. Hugo Souza

Sistema Integrado de Gerenciamento do ISS SIG-ISS. Manual de integração do WebService para NFS-e

Ciclo de Vida de um Processo

MC514 Sistemas Operacionais: Teoria e Prática 1s2010. Processos e sinais

Programação com Posix Threads

Departamento de Informática - PUC-Rio INF 1005 Programação I P1 22/09/2010 Nota

2 Segmentação de imagens e Componentes conexas

Introdução à orientação a objetos

atualização gratuita *para clientes Solutio com contrato de manutenção ativo.

Programação de Computadores I. Linguagem C Função

Tubos ou Pipes de Comunicação

Aula 10: Escalonamento da CPU

Infra-Estrutura de Software. Introdução. (cont.)

Sistema de Controlo com Acesso Remoto

Os passos a seguir servirão de guia para utilização da funcionalidade Acordo Financeiro do TOTVS Gestão Financeira.

Sistemas Operacionais

Algoritmos e Programação Estruturada

TOP 20 ROTINAS QUE VOCÊ PODE AUTOMATIZAR HOJE!

Tópicos em Sistemas Operacionais. Chamadas de Sistema. Islene Calciolari Garcia. Segundo Semestre de Instituto de Computação - Unicamp

PROCESSOS COMPONENTES DE UM PROCESSO. A execução de um processo possui vários componentes. PID e PPID

Comunicação entre pai e filho

Aula 11: Desvios e Laços

Java na Prática. Célio Silva Aula 3

Engenharia de Software II

Xenomai Short Intro. Paulo Pedreiras DETI/University of Aveiro. Sistemas Tempo-Real Out/2013 (Rev. 1 - Out/2015)

Roteiro... Sistemas Distribuídos Aula 4. Troca de mensagens. Comunicação entre processos. Conceitos de SD, vantagens e desvantagens

Simulado de Linguagem de Programação Java

INF1007: Programação 2 9 Tipos Abstratos de Dados. (c) Dept. Informática - PUC-Rio 1

Programação Concorrente Processos e Threads

Programando em C++ Histórico da Linguagem C

Gerenciamento de Almoxarifado Versão OneWorld Xe. Manual Setembro de 2000

Programação Estruturada I

3 Introdução às chamadas ao sistema

sockets interprocess communication Taisy Weber

O Sistema Operativo Unix

Classificação de Ativo Orçamento e Provisão de Despesa

Introdução. O que vimos. Infraestrutura de Software. (cont.) História dos Sistemas Operacionais. O que vimos 12/03/2012. Primeira geração:

Informática I. Aula Aula 19-20/06/06 1

Dicas de Segurança sobre Virus

Organização e Arquitetura de Computadores. Ivan Saraiva Silva

Sistemas Operacionais

EA872 Laboratório de Programação de Software Básico. Atividade 10 - Gerenciamento de Processos em Sistemas Multiprogramados.

Conceitos Básicos sobre Programação Prática

MDS II Aula 04. Concepção Requisitos Diagrama de Casos de Uso (Use Cases)

Conceitos e Chamadas de Sistema

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

Comércio e Manutenção de Produtos Eletrônicos. Mapeamento de memória e conexões do Controlador CP-WS13/8DI8DO2AI2AO/USB/OEM. Versão 1.

Programação Sistemas

Num programa em JAVA é possível definir diferentes sequências de execução independente: Threads.

ARQUITETURA DE COMPUTADORES. Professor: Clayton Rodrigues da Siva

Processos. Paulo Sérgio Almeida 2005/2006. Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho

Orientação a Objetos - Programação em C++

Transcrição:

Conteúdo Programas e Aula 1-1 Programas e (jpo@di.uminho.pt) Grupo de Sistemas Distribuídos Departamento de Informática Escola de Engenharia Universidade do Minho Sistemas Operativos I 006-007 3 Referências Programas e Programas e Conteúdo Programa Um programa é um ficheiro executável que reside num directório de um disco. Um programa é carregado para memória e executado pelo kernel como resultado de uma das seis funções exec. Processo Uma instância em execução de um programa é designada por processo. Cada processo tem um identificador numérico único designado por process ID. Este identificador é um número inteiro não negativo. 1 Programas e 3 Referências

Chamada ao sistema: (system calls) - create a child process - terminate the current process getpid - get current process identification getppid - get parent process identification wait - wait for process termination waitpid - wait for process termination Sumário Criar um processo filho Synopsis #include <sys/types.h> #include <unistd.h> pid t (void); Valor de retorno Esta chamada ao sistema retorna duas vezes: uma no contexto do processo original (pai) e outra no contexto do novo processo (fillho). Em caso de erro só retorna uma vez (valor -1 no contexto do processo pai). Fork: uma invocação, dois retornos Chamada ao sistema: - exemplo 1 Exemplo 1 processo pai 1 3 3 processo filho #include <unistd. h> 3 4 int main ( void ) 5 { 6 p r i n t f ( Antes\n ) ; 7 8 f o r k ( ) ; 9 10 p r i n t f ( Depois\n ) ; 11 1 return 0;

Chamada ao sistema: - exemplo Chamada ao sistema: - valor de retorno Exemplo #include <sys / types. h> / p i d t / 4 5 int main ( void ) 6 { 7 p i d t p ; 8 9 p = f o r k ( ) ; 10 11 p r i n t f ( p = %d\n, p ) ; 1 13 return 0; 14 } Valor de retorno -1 - Insucesso: o valor -1 é retornado no contexto do processo pai e nenhum processo filho é criado. 0 - Sucesso: o valor 0 é retornado no contexto do processo filho (novo processo). > 0 - Sucesso: o PID do processo filho é retornado no contexto do processo pai (processo original). Chamada ao sistema: - exemplo 3 Chamada ao sistema: - exemplo 4 Exemplo 3 (extracto) 1 p = f o r k ( ) ; 3 i f ( p == 1) { 4 5 / Erro / 6 7 } else i f ( p == 0) { 8 9 / F i l h o / 10 11 } else i f ( p > 0) { 1 13 / Pai / 14 15 } Exemplo 4 (extracto) 1 p = f o r k ( ) ; 3 switch ( p ) { 4 case 1 : 5 / Erro / 6 break ; 7 case 0: 8 / Codigo a executar no processo f i l h o / 9 break ; 10 default : 11 / Codigo a executar no processo pai / 1 break ;

Chamada ao sistema: Finalização de um processo Sumário Finalizar processo corrente Synopsis #include <unistd.h> void (int status); Valor de retorno Esta chamada ao sistema termina imediatamente o processo invocador (não retorna). O valor status (0..55) é retornado ao processo pai, que o pode recolher através da chamada ao sistema wait. Finalização de um processo Finalização normal Retorno a partir de main Invocar Invocar ou Exit Retorno da última thread Invocar pthread a partir da última thread Finalização anormal Invocar abort Recepção de um sinal Resposta da última thread a um pedido de cancelamento Finalização de um processo Exemplos de métodos de terminação Notas Quando a chamada ao sistema é invocada, o processo corrente é terminado imediatamente: todos os descritores de ficheiros abertos são fechados todos os processos filhos passam a ter como pai o processo init (pid = 1) o sinal SIGCHLD é enviado ao processo pai Chamada ao sistema vs função Sempre que possível utilizar a função da biblioteca de C em detrimento da chamada ao sistema. Informação adicional nas páginas man: man e man 3. Exemplo #include <stdio 1. h> #include <s t d l i b. h> 4 5 void f1 ( void ) { 6... 7 ( 1 ) ; / Normal / 8 } 9 10 void f ( void ) { 11... 1 abort ( ) ; / Anormal / 14 15 i n t main ( void ) { 16 f1 ( ) ; 17 f ( ) ; 18 return 0; / Normal / 19 }

: : getpid/getppid - exemplo 1 Sumário A chamada ao sistema getpid permite obter o identificador de processo (PID) do processo corrente. A chamada so sistema getppid permite obter o PID do pai do processo corrente. Synopsis #include <sys/types.h> #include <unistd.h> pid t getpid(void); pid t getppid(void); Exemplo 1 #include <sys / types. h> / p i d t / 4 5 int main ( void ) 6 { 7 p i d t p = f o r k ( ) ; 8 9 p r i n t f ( p = %5d pid = %5d ppid = %5d\n, 10 p, getpid ( ), getppid ( ) ) ; 11 1 return 0; : getpid/getppid - exemplo 1 Resultado 1 p = 0 pid = 484 ppid = 483 p = 484 pid = 483 ppid = 849 Resultado - processo pai termina antes da invocação de getppid() no processo filho p = 4307 pid = 4306 ppid = 849 p = 0 pid = 4307 ppid = 1 Adopção de processos Quando um processo fica orfão é imediatamente adoptado pelo processo init (processo com o PID 1). : getpid/getppid - exemplo Exemplo #include <s t d l i b. h> 4 #include <sys / types. h> / p i d t / 5 6 i n t main ( void ) 7 { 8 p i d t p = f o r k ( ) ; 9 10 i f ( p == 1) { / Erro / 11 1 p e r r o r ( f o r k ) ; EXIT FAILURE ) ; e x i t ( 13 14 } else i f ( p == 0) { / F i l h o / 15 16 p r i n t f ( Filho : p pid = %5d = %5d ppid = %5d\n, 17 p, getpid ( ), getppid ( ) ) ; 18 19 } else { / Pai ( p > 0 ) / 0 1 p r i n t f ( Pai : p = %5d pid = %5d ppid = %5d\n, p, getpid ( ), getppid ( ) ) ; 3 4 } 5 6 return 0; 7 }

: wait e waitpid : wait e waitpid Sumário Estas chamadas ao sistema permitem esperar pela mudança de estado de um processo filho e obter informação sobre essa mudança. Synopsis #include <sys/types.h> #include <sys/wait.h> pid t wait(int *status); pid t waitpid(pid t pid, int *status, int options); wait A chamada ao sistema wait suspende o processo corrente até que um dos seus processos filhos termine. waitpid A chamada ao sistema waitpid suspende o processo corrente até que o filho especificado mude de estado. Por omissão só espera que o filho em questão termine mas este comportamento pode ser alterado através do argumento options. Mudanças de estado: o processo filho terminou o processo filho foi congelado (stopped) o processo filho foi descongelado (resumed) Fork, Wait e Exit Chamada ao sistema: wait - exemplo 1 Exemplo 1 (extracto) pai wait filho 1 p = f o r k ( ) ; 3 i f ( p == 1) { 4 p e r r o r ( f o r k ) ; e x i t ( EXIT FAILURE ) ; 5 6 } else i f ( p == 0) { 7 p r i n t f ( F i l h o \n ) ; sleep ( 3 ) ; 8 9 } else i f ( p > 0) { 10 p r i n t f ( Pai \n ) ; 11 wait (NULL ) ; / Esperar que o f i l h o termine / 1 p r i n t f ( Fim\n ) ; 13 14 }

Chamada ao sistema: wait - exemplo 1 : - macros (1/) Exemplo 1 #include <s t d l i b. h> 4 #include <sys / types. h> 5 #include <sys / wait. h> 6 7 i n t main ( void ) 8 { 9 p i d t p = f o r k ( ) ; 10 11 i f ( p == 1) { 1 p e r r o r ( f o r k ) ; 13 e x i t ( EXIT FAILURE ) ; 14 } else i f ( p == 0) { / F i l h o / 15 p r i n t f ( F i l h o\n ) ; 16 sleep ( 3 ) ; 17 } else i f ( p > 0) { 18 p r i n t f ( Pai\n ) ; 19 wait (NULL ) ; / Esperar que o f i l h o termine / 0 p r i n t f ( Fim\n ) ; 1 } 3 return 0; 4 } Relação entre wait() e waitpid() wait(&status) == waitpid(-1, &status, 0) Macros WIFEXITED(status) - permite determinar se o processo filho terminou normalmente. WEXITSTATUS(status) - permite obter o código de saída do processo filho (argumento da função ). Esta macro só deve ser invocada se WIFEXITED returnar um valor verdadeiro. : - macros (/) Chamada ao sistema: wait - exemplo Macros WIFSIGNALED(status) - permite determinar se o processo filho terminou devido a um sinal não interceptado. WTERMSIG(status) - permite obter o número do sinal que provocou a finalização do processo filho. Esta macro só deve ser invocada se WIFSIGNALED returnar um valor verdadeiro. WCOREDUMP(status) - permite saber se foi gerado um ficheiro core. WIFSTOPPED(status) - permite determinar se o processo filho que provocou o retorno se encontra congelado (stopped). WSTOPSIG(status) - permite obter o número do sinal que provocou o congelamento do processo filho. Esta macro só deve ser invocada se WIFSTOPPED returnar um valor verdadeiro. WIFCONTINUED(status) - permite determinar se o processo filho foi descongelado (resumed). Só aplicável para em kernels.6.10 ou mais recentes. Extracto de código (processo pai) 1 q = wait (& status ) ; 3 i f ( q == 1) { 4 / Erro / 5 } else i f ( q > 0) { 6 / q > pid do processo que terminou / 7 8 i f (WIFEXITED ( status ) ) { 9 / Processo q terminou normalmente / 10 / Codigo de saida = WEXITSTATUS( status ) / 11 } else { 1 / Processo q terminou anormalmente / 14 }

Referências Conteúdo Referências Referências 1 Programas e 3 Referências Bibliografia Advanced Programming in the UNIX Environment, nd ed. W. Richard Steven, Stephen A. Rago http://www.apuebook.com/ Capítulo 1 - UNIX System Overview Capítulo 7 - Process Environment Capítulo 8 - Process Control Advanced Programming in the UNIX Environment W. Richard Steven http://www.kohala.com/start/apue.html Linux Programming by Example: The Fundamentals Arnold Robbins http://authors.phptr.com/robbins/