Requisitos fundamentais Implementar um modelo de processo. Implementar facilidades para criação e destruição de processos por usuários Alocar recursos a processos Intercalar a execução de um número de processos para maximizar a utilização do processador, mantendo um tempo de resposta razoável
Processo:programa em execução Formado por: Instruções Recursos (ex: memória, arquivos abertos) Informação de controle interna ao sistema operacional O arquivo de programa contém informações necessárias para sua execução
Processo não é o mesmo que programa! Programa é como uma receita, com instruções para se resolver um problema Processo é como alguém seguindo a receita Processo precisa de recursos computacionais para trabalhar: memória, arquivos, tempo de processador,... Programa não trabalha: fica passivamente guardado em um arquivo
Exemplo de execução a partir de um arquivo de programa
SO pode ser monoprogramado: apenas um processo executa por vez (começo ao fim):
... ou multiprogramado (mais de um processo pode executar ao mesmo tempo):
Por que existe multiprogramação? Processos alternam entre uso do processador ou espera por E/S:
Por que existe multiprogramação? Processos podem ser classificados quanto ao uso do processador: Processos I/O bound Passam mais tempo em estado de espera que usando de fato o processador Processos CPU bound Passam a maior parte do tempo usando de fato o processador
Por que existe multiprogramação? Um histograma dos tempos de execução
Por que existe multiprogramação? Um processo típico passa mais tempo em espera que processando Pode-se aproveitar os tempos de espera para executar outros processos Assim se aproveita melhor o tempo de processador disponível!
Multiprogramação Capacidade do sistema operacional de manter vários processos ativos ao mesmo tempo Timesharing: ilusão de que os processos executam ao mesmo tempo
Multiprogramação no Linux Listagem dos processos que mais usam processador
Processos usam recursos do computador
Como o SO controla os processos existentes? SO precisa decidir que processo deve usar o processador Somente processos aptos a executar podem usar o processador Processo apto: que não está esperando por E/S
Modelo de cinco estados Dispatch Termina Entra Novo Apto Rodando Terminado Time-out Evento Ocorre Espera por evento Esperando
Diagrama de fila Admissão Despacha Processor Libera Fila de aptos Tempo excedido (timeout) Fila de espera Espera um evento Evento ocorre
Escalonamento Determinação da ordem em que processos alocam o processador SO usa algum critério para escolher um processo apto para rodar SO pode também tirar o processador de um processo que estiver rodando
Escalonamento Escalonamento não-preemptivo Processo só perde o processador se terminar ou entrar em estado de espera Escalonamento preemptivo Sistema operacional pode retomar o processador mesmo contra a vontade do processo
Critérios para um bom escalonamento Eficiência: ocupação do processador Justiça: todos os processos têm chance de executar em um ciclo de escalonamento Tempo de resposta: tempo entre a ocorrência de um evento e a reativação do processo que o aguarda (IMPORTANTE!) Throughput: número de processos concluídos por unidade de tempo
Escalonamentos não-preemptivos FIFO (First In First Out) ou FCFS (First Come First Served) Primeiro que entra é o primeiro que sai da fila Ex: Processos P1, P2 e P3 têm tempo de CPU de 24, 3 e 3 unidades de tempo respectivamente, e chegam nesta ordem.
Escalonamentos não-preemptivos FIFO (cont.) Tempo de execução médio: N T = 1 N N i 1 T i i=1 Minimização desse tempo: T i < T i+1 FIFO é muito simples, mas não atende os requisitos de bom escalonamento (por que?)
Escalonamentos preemptivos RR (Round Robin) Cada processo usa a CPU por até 1 quantum de tempo por ciclo Fila de aptos segue FIFO
Escalonamentos preemptivos RR (cont.) quantum deve ser maior ou igual ao tempo de interação médio (tempo de CPU médio)
Escalonamentos preemptivos RR (cont.) Se quantum for muito curto, aumenta-se o tempo de execução total:
Escalonamentos preemptivos RR (cont.) Casos limites: q -> 0 : Cada um dos N processos enxerga um processador com 1/N de sua capacidade Na verdade, overhead do chaveamento de contexto domina o processamento q -> oo : Escalonamento degenera para FIFO
Escalonamentos preemptivos Com prioridades Cada processo possui uma prioridade (um número inteiro) A fila de aptos é ordenada de acordo com as prioridades
Escalonamentos preemptivos Com prioridades (cont.) Considerado o mais genérico Qualquer outro algoritmo pode ser implementado usando prioridades RR e FIFO : todos processos com igual prioridade Prioridades podemvariar com o tempo Podem se adaptar ao comportamento dos processos
Escalonamentos preemptivos Com prioridades (cont.) Prioridades dinâmicas: o que aconteceria se o histórico de uso do processador fosse usado como prioridade? Ex: prioridade = tempo de uso / tempo total Que tipo de processo seria priorizado com prioridades assim? Que critérios de bom escalonamento seriam respeitados com isto? E quais não seriam?
Escalonamentos preemptivos Com prioridades (cont.) Muitos SO usam prioridades dinâmicas, dando maior prioridade para processos I/O bound Ex: Linux, Windows Xp/Vista, Sun Solaris, MacOS X,... Com isto, priorizam processos interativos Porém, o que dizer de processos que processam streams multimedia? Ex: MP3 player, Video player,...
Operações sobre processos (Linux) Descrição de processos Processos possuem um ID único (PID) Possuem um usuário dono (UID) e um usuário efetivo (EUID), assim como grupo dono (GID) e grupo efetivo (EGID) Prioridade base (nice) pode ser alterada Toda a memória e objetos de sua posse estão protegidos de outros processos
Operações sobre processos (Linux) Proceso Linux na memória
Operações sobre processos (Linux) Listagem de processos com comando ps
Operações sobre processos (Linux) Criação de processos: Um novo processo é idêntico ao processo que o criou Processo filho compartilha código executável com o processo pai Filho possui mesmos atributos que processo pai (ex: UID, GID, prioridade,...) Toda a memória do pai é copiada para o filho Processo filho começa a executar do ponto exato dentro da chamada fork em que houve a duplicação
Operações sobre processos (Linux) Processos no Linux foram uma hierarquia: