1
Gerência de Processador
Ambientes Operacionais
Prof. Simão Sirineo Toscani stoscani@inf.pucrs.br www.inf.pucrs.br/~stoscani
2
Multiprogramação
Torna mais eficiente o aproveitamento dos recursos computacionais
Mais de um programa sendo executado ao mesmo
tempo
Diversos programas são mantidos na memória (um
executando e vários esperando para executar)
O próprio SO é composto de vários programas Gerenciamento de recursos para estes processos:
Tempo de processador Espaço de memória Espaço em disco Periféricos 3
Programa e Processo
Programa: é o código a ser executado
(estático, passivo)
Processo: é o código em execução
(dinâmico, ativo)
Altera seu estado no decorrer de sua execução Além do código, também possui os dados da
execução
4
Processo
Um programa pode ter várias instâncias em
execução (isto é, vários processos podem estar executando o mesmo programa ao mesmo tempo)
Ex. mais de um browser aberto ao mesmo tempo Cada um tem seus dados, por exemplo: página que
está sendo visitada.
Ciclo de vida de um Processo
Em geral:
Criação Execução Término
Tem SOs que trabalham com um número fixo de
processos, todos eles “criados” na inicialização do sistema
Criação de processos
A criação pode ser feita através de chamadas de sistemas
e.g. fork, spawn, etc.
Podem ser associados a terminais
Podem ser associados a uma sessão de trabalho
e.g. login de usuários: login + senha → shell
Em geral, pode se formar uma hierarquia de processos
7
Ciclo de CPU e ciclo de E/S
A vida de um processo se alterna entre: Ciclo de processador (ou ciclo de CPU) Tempo que ocupa a CPU
Ciclo de E/S
Tempo que espera conclusão de uma operação de E/S
Troca de ciclos:
CPU → E/S: chamada de sistema E/S → CPU: ocorrência de interrupção
8
Tipos de comportamentos
Os processos podem ser:
CPU bound (ciclos de UCP grandes) I/O bound (ciclos de E/S freqüentes)
Exemplos:
CPU bound: processo que inverte uma matriz I/O bound: processo que copia um arquivo
É conveniente ter uma mistura dos dois tipos de processos na memória, pois isto dá flexibilidade para o escalonamento (escolha de processos a serem executados)
9
Término de um processo
Final normal
Final por erro
e.g. divisão por zero, problema de E/S, limite de
tempo, falta de memória, proteção
Intervenção de outros processos (kill)
Log off de usuários
10
Relacionamento entre processos
Processos independentes
Grupos de processos
Algum relacionamento
e.g. shell e os processos disparados dentro dele Podem compartilhar recursos
Definem algum tipo de hierarquia
Hierarquia de processos
Processo criador é o pai Processo criado é o filho
Em geral, vai haver uma árvore de processos, que é
alterada de forma dinâmica
Questão associada: o que fazer quando um processo com
descendentes é destruído?
Terminar todos processos de descendência
Postergar termino do pai até que todos descendentes acabem Descendência ser herdada pelo processo “vô”
Descendência ser herdada por um processo do SO
Fila de processos aptos
Após ser criado o processo entra em ciclo de
processador
Vários processos podem estar esperando pelo
processador (prontos para receber a CPU)
Os processos à espera da CPU ficam em uma
13
Transição de estado
Cada processo muda de estado, durante a sua vida, de
acordo com o seguinte diagrama de transição:
Criação Apto Executando Destruição
Bloqueado Ocorrência de evento (interrupçao) Seleção Término Chamada de sistema 14
Transição de estado
O sistema operacional escolhe (entre os processos
aptos) qual será o próximo a entrar em execução
O módulo responsável por esta escolha é o
escalonador (scheduler)
Os processos são bloqueados apenas quando realizam
chamadas do sistema
Na maioria dos casos, o SO não permite que um
processo monopolize a CPU ( ver diagrama de transição a seguir)
Só no caso de haver multiprocessamento (i.é, mais de
uma UCP) pode-se ter mais de um processo no estado executando
15
Transição de estado (mais detalhes)
Criação Apto Executando Destruição
Bloqueado Ocorrência de evento (interrupçao) Seleção Término Tempo Chamada de sistema Retorno imediato Erro 16
Registro descritor de processo
(Process Control Block)
O SO mantém para cada processo um registro descritor:
Número único do processo;
Prioridade do processo no sistema (usada para definir a
ordem na qual os processos recebem o processador);
Localização e tamanho da área de memória ocupada pelo
processo;
Identificação dos arquivos abertos no momento;
Informações para contabilidade (tempo de processador gasto,
espaço de memória ocupado, etc.);
Estado do processo: apto, executando, bloqueado; Contexto de execução (isto é, conteúdos dos registradores da
UCP correspondentes a esse processo);
Apontadores para encadeamento do descritor nas filas do SO.
Processos e filas
O registro descritor (RD) de um processo
sempre está encadeado a alguma fila:
Fila de RDs livres. Pode ser Fila de tamanho fixo ou RDs alocados dinâmicamente Fila de aptos
Fila de bloqueados
Eventos ocasionam transferências entre
filas
Escalonamento
O escalonador é o componente do SO
responsável por selecionar um processo apto
para executar no processador
O objetivo é dividir o tempo do processador
de forma justa entre todos processos aptos
Outros objetivos:
Maximizar a utilização do processador Maximizar a produção do sistema (throughput) Minimizar o tempo de espera
19
Chaveamento de Contexto
É a troca do processo em execução (O contexto do processo que estava em execução deve ser guardado e o contexto do próximo a executar deve ser restaurado)
Salvar contexto do processo é a primeira ação do SO ao
receber a CPU em uma interrupção
Restaurar contexto do processo é a última ação do SO antes
de passar CPU ao processo escolhido pelo escalonador
Dispatcher é o nome do componente do SO que restaura o contexto do processo escolhido
20
Chaveamento de Contexto
21
Tipos de escalonadores
Três tipos:
Curto prazo (existe em qualquer SO) Médio prazo (só existe em certos SOs) Longo prazo (também é raro)
22
Escalonador de longo prazo
Decide quando um processo vai ser criado
Normalmente não é utilizado para processos
criados através de terminais (estes começam
imediatamente)
Controla o grau de multiprogramação
Escalonador de médio prazo
Utilizado quando o sistema fica
sobrecarregado
Decide qual processo vai ser retirado ou
restaurado na memória
Operação de swap:
Swap out: processo retirado da memória e enviado ao
disco
Swap in: processo volta do disco para a memória
Escalonador de curto prazo
Seleciona um entre os processos prontos
para execução
Acionado sempre que a CPU fica livre
(processo foi bloqueado, terminou ou ocorreu
uma interrupção)
25
Algoritmo de escalonamento FIFO
Processos que se tornam aptos entram no
fim da fila
Processo que está no inicio da fila é o
próximo a ser executado
Processo executa até que:
Libere explicitamente o processador
Realize uma chamada de sistema
Termine sua execução
26
FIFO (First-In First-Out)
também chamado FCFS (First-Come First-Served
)
Processos A, B, C e D Duração do próximo ciclo (A:12, B:8, C:15,D:5)
Tempo médio: (0+12+20+35)/4=16.75 A 0 12 20 35 40 B C D 27
FIFO
Prejudica processos I/O bound
Nem sempre propicia bom tempo de
resposta
28
SJF (Shortest Job First )
Processos com menor tempo (futuro) de
utilização de CPU entra no inicio da fila,
empurra os outros para trás
Processos I/O bound são favorecidos (isto
“maximiza” a utilização dos periféricos)
SJF
Menor tempo médio de espera
Duração do próximo ciclo (A:12, B:8, C:15,D:5)
Tempo médio: (0+5+13+25)/4 =10.75 A 0 40 B C D 5 13 25
SJF
Como prever o tempo de execução?
Serve como limite teórico
31
Escalonadores Preemptivos e
Não-preemptivos
Esquema não-preemptivo. Uma vez selecionado, o
processo utiliza o processador até:
o término da execução do processo uma chamada de sistema ser realizada Esquema preemptivo. Uma vez selecionado, o
processo utiliza o processador até:
término da execução do processo chamada de sistema é realizada
processo de mais alta prioridade fica pronto para executar
32
Round robin (fatia de tempo)
cada processo recebe uma fatia de tempo do processador (quantum ou time-slice) Processos entram no fim da fila O primeiro da fila é executado por uma
pequena fatia de tempo (ordem de 20 mS)
Sempre que a fatia de tempo acaba, a CPU é
transferida para o próximo da fila
O processo que acaba sua fatia de tempo vai para o fim da fila
33
Round-robin
Duração do próximo ciclo (A:12, B:8, C:15,D:5) Para fatia de 3 unidades de tempo
Tempo médio: (0+5+13+25)/4 =10.75 A 0 40 B C D 3 6 9 12 15 18 23 28 34 34
Round-robin
Problema
Como definir a fatia de tempo
O chaveamento entre processos não é
instantâneo!
Exemplo, supor que: instrução executa em 1µs
200 instruções para chaveamento → 200 µs Se fatia de tempo é 1ms então o chaveamento é 20%
do tempo para realizar trabalho útil (overhead de 20%)
Round-robin
Processos I/O bound são prejudicados
Pois eles não executam durante toda sua fatia de
tempo
Solução: Uso de prioridades
Processos I/O bound tem maior prioridade
Prioridade
Processos com maior prioridade executam
primeiro
No caso de mesma prioridade, é preciso escolher
uma alternativa para resolver qual executa primeiro: FIFO, SJF, Round-Robin
37
Prioridade
Processo Prioridade Duração do próximo ciclo de processados A 3 12 B 4 8 C 2 15 D 1 5 A 0 40 B C D 5 20 32 38
Prioridade
Como definir prioridades?
Processos com menor prioridade podem ficar
esperando indefinidamente
Solução: aging (processos tem sua prioridade
aumentanda lentamente)
39
Múltiplas filas
Processos em foreground e em background
Como dividir tempo?
Pode-se ter fila separada para I/O bound, com
maior prioridade para os processos desta fila (isto melhora a utilização dos periféricos)
Tem-se realimentação quando os processos
podem mudar de uma fila para outra
40