Sistemas Operacionais 2. Processos Texto base: capítulos 3 e 4 Operating Systems: Internals and Design Principles W. Stallings IC - UFF O conceito de processos No capítulo 1, fizemos as seguintes afirmativas quanto aos processos: IC - UFF Mais geral que programa Consiste em um código executável e seus dados associados, além de um contexto de execução Enfim, ... Um processo é uma abstração de um programa em execução Exemplo: fazer um bolo ... ... primeiros socorros! IC - UFF O que esperar do SO? Alternar a execução de processos de forma a maximizar a utilização da UCP e fornecer tempo de resposta razoável Alocar recursos a processos Suportar criação de processos pelo usuário Suportar comunicação entre processos IC - UFF Modelo simples de processo despacho entra sai nãoexecutando executando pausa (a) diagrama de transição de estado entra fila sai despacho UCP pausa IC - UFF (b) possível implementação Criando de processos O que faz o SO para criar processos? constrói estruturas de dados aloca espaço de endereçamento Quando cria? IC - UFF quando usuário abre sessão; quando gerado por outro processo (e.g., servidor de FTP); ... Terminando processos Quando terminar? execução da instrução Halt; condições de erro; ... Algumas razões para o término: IC - UFF tempo excedido; falta de memória; uso de instrução privilegiada; término do processo pai; ... Problema com o modelo simples Um processo que não está executando estará sempre pronto a executar? Não: pode estar bloqueado esperando E/S! despachante não pode simplesmente ppegar um processo que esteja na fila IC - UFF Um modelo mais elaborado despacho admissão novo liberação pronto evento ocorre bloqueado IC - UFF executando pausa espera evento saída Implementando o modelo (1) fila dos prontos liberação despacho admissão UCP pausa fila dos bloqueados evento ocorre IC - UFF espera evento Implementando o modelo (2) fila dos prontos liberação despacho admissão UCP pausa fila evento 1 espera evento 1 evento 1 ocorre fila evento 2 evento 2 ocorre IC - UFF espera evento 2 Implementando o modelo (3) prioridade 2 prioridade 1 liberação despacho admissão UCP pausa fila evento 1 espera evento 1 evento 1 ocorre fila evento 2 evento 2 ocorre IC - UFF espera evento 2 O estado Suspenso O processador é muito mais rápido que E/S: todos os processos podem estar bloqueados Swapping Necessidade de novo estado: representação de processo suspenso IC - UFF Diagrama com estado Suspenso despacho admissão novo pronto ativação evento ocorre suspenso bloqueado suspensão IC - UFF liberação executando pausa espera evento saída Pensando melhor ... novo admissão prontosuspenso suspende admissão despacho liberação ativa pronto executando suspende pausa evento espera ocorre evento ativa suspensobloqueado bloqueado evento ocorre suspende IC - UFF saída O que o SO deve fazer? Em um sistema multi-tarefas, o SO deverá: escalonar e despachar processos para execução alocar recursos aos processos responder a pedidos de recursos feitos pelos programas dos usuários Como fazer? IC - UFF Tabelas! Tabelas de memória Tabelas de E/S IC - UFF e.g., estado de dispositivo de E/S Tabelas de arquivos e.g., alocação de MP aos processos localização de arquivos em MS Tabelas de processos e.g., lista de processos existentes Controlando processos Para gerenciar processos o SO precisa conhecer: onde o processo está localizado os atributos do processo Como é representado um processo? IC - UFF imagem do processo: programa + dados + pilha(s) + atributos Atributos do processo O conjunto dos atributos de um processo é conhecido como bloco de controle do processo (PCB, em inglês) PCB pode ser dividido em três partes: IC - UFF identificação do processo informação de estado do processador informação de controle do processo Identificação do processo Feita por identificadores numéricos que incluem: IC - UFF identificador do processo identificador do processo que o criou identificador do usuário Informação do processador Contida nos registradores do processador: IC - UFF registradores visíveis ao usuário (aqueles referenciados por programa) registradores de controle e estado (e.g., PC, códigos de condição) apontadores de pilha Informação de controle (1) Estado e escalonamento, que inclue: IC - UFF estado do processo (e.g., pronto) nível corrente de prioridade suporte ao escalonamento (e.g., há quanto tempo o processo está esperando) evento (e.g., identificação do evento que o processo está esperando) Informação de controle (2) Estruturação de dados (e.g., relação paifilho) Comunicação entre processos (e.g., sinais) Privilégios (e.g., tipos de instruções que podem ser executadas) Gerenciamento de memória (e.g., ponteiro para tabela de páginas) IC - UFF Propriedade e uso de recursos (e.g., arquivos abertos) Funções típicas do núcleo do SO Preliminares: Funções do núcleo: IC - UFF O que é modo dual de operação? O que é o núcleo do SO? gerenciamento de processos gerenciamento de memória gerenciamento de E/S funções de suporte Funções típicas do núcleo do SO Preliminares: Funções do núcleo: IC - UFF O que é modo dual de operação? O que é o núcleo do SO? gerenciamento de processos gerenciamento de memória gerenciamento de E/S funções de suporte Gerenciamento de processos (1) Funções típicas: IC - UFF criação e término de processos escalonamento e despacho chaveamento sincronização e suporte a IPC gerenciamento de PCBs Gerenciamento de processos (2) Criação de processos IC - UFF atribuição de identificador único e adicionar nova linha à tabela primária de processos alocação de espaço para a imagem iniciação do PCB adicionar apontador nas listas apropriadas (e.g., lista de prontos para escalonamento) outras estruturas: e.g., arquivo de contabilização Gerenciamento de processos (3) Quando chavear? interrupções IC - UFF relógio ( mudança de estado, escalonamento) E/S falta de memória (página ou segmento) traps: condições anormais chamada ao sistema (e.g., operação de E/S) Unix: Fork #include <stdio.h> int main (int argc, char *argv[ ]) { int pid; /* criação de outro processo por fork */ pid = fork(); IC - UFF if (pid < 0) {/* ocorreu erro */ fprintf(stderr, "Fork falhou"); exit(-1); } else if (pid == 0) { /* processo filho */ execlp ("/bin/ls", "ls", NULL); } else { /* processo pai */ /* processo pai vai esperar o filho terminar */ wait(NULL); printf("Filho terminou\n"); exit(0); } } Gerenciamento de memória Funções típicas: IC - UFF alocação de espaço de endereçamento aos processos swapping gerenciamento de páginas e segmentos Gerenciamento de E/S Funções típicas: IC - UFF gerenciamento de buffers alocação de canais e dispositivos de E/S Funções de suporte Funções típicas: IC - UFF tratamento de interrupção monitoramento contabilidade Leitura suplementar Operating Systems Concepts, A. Silberschatz e P.B. Galvin, AddisonWesley Modern Operating Systems, A.S. Tanenbaum, Prentice Hall IC - UFF