so-04 escalonamento de processos
DESCRIPTION
Escalonamento de Processos. Conceitos básicos. Algoritmos de Escalonamento (Sistemas Operacionais)TRANSCRIPT
Processos Escalonamento da CPU
2 Escalonamento de CPU Eduardo Nicola F. Zagari
Conceitos Básicos Escalonamento de Processador Critérios de Escalonamento Escalonamento Não Preemptivo Escalonamento Preemptivo Mecanismos de Interrupção em Intervalos de Tempo Prioridades Algoritmos de Escalonamento Escalonamento para Vários Processadores Escalonamento em Tempo Real Estudo de Casos: Escalonamento no Unix, Windows XP,
Linux e de Threads
3 Escalonamento de CPU Eduardo Nicola F. Zagari
Multiprogramação: corresponde a diversos programas distintos executando em um mesmo processador maximiza utilização da CPU
No entanto, somente um processo é executado a cada instante em um processador
Toda vez que um processo tiver que esperar (evento ou E/S) outro processo usa a CPU (“ciclo de vida” de um processo) A execução de um processo consiste de um ciclo de execução de
CPU e espera de I/O
pronto
bloqueado
execução
E/S ou evento
interrupção espera por E/S ou evento
escalonado
Escalonador
4 Escalonamento de CPU Eduardo Nicola F. Zagari
5 Escalonamento de CPU Eduardo Nicola F. Zagari
Conhecido como Escalonador de Processsos Determina/Escolhe, dentre os processos que estão em memória,
qual processo será associado a uma CPU, quando esta estiver disponível
Age sobre os processos prontos para executar (processos do estado de pronto)
Segue uma política de escolha Executado várias vezes por segundo Reside permanentemente na memória
6 Escalonamento de CPU Eduardo Nicola F. Zagari
Situação para escalonamento: processo passa do estado em execução para pronto processo passa de em execução para espera/bloqueado processo passa de espera/bloqueado para pronto processo termina
Preempção: é quando um processo em estado de pronto tem precedência sobre o que está usando a CPU.
Escalonamenteo Não-Preemptivo: não contempla as preempções, isto é, o escalonador não interrompe os processos que estão em execução.
Escalonamento Preemptivo: que contempla a preempção das tarefas, isto é, provoca uma interrupção forçada de um processo para que outro, com a preempção, possa usar a CPU.
7 Escalonamento de CPU Eduardo Nicola F. Zagari
Determina qual processo no estado pronto para executar será associado a uma CPU, quando esta estiver disponível
É executado várias vezes por segundo Reside permanentemente na memória
8 Escalonamento de CPU Eduardo Nicola F. Zagari
Determina quais os processos que poderão competir pela CPU Responsável pela suspensão e ativação de processos, o que
significa flutuações na carga do sistema visando um melhor balanceamento
Atua como um buffer entre a admissão de jobs e a associação da CPU aos processos que constituem os jobs admitidos
Job: é um conjunto de atividades necessárias para a realização do trabalho computacional requerido por um usuário (divide-se em diversos steps (passos) )
9 Escalonamento de CPU Eduardo Nicola F. Zagari
Determina quais jobs serão admitidos e poderão competir pelos recursos do sistema (admission scheduling)
Permite que não existam jobs em demasia no sistema, o que acarretaria uma eterna competição pelos recursos
Todo job, uma vez admitido, acarreta na criação de um ou mais processos
10 Escalonamento de CPU Eduardo Nicola F. Zagari
O módulo Dispatcher dá o controle da CPU para o processo selecionado pelo escalonador de curto prazo. Isto envolve: Troca de contexto Mudança do processador para o Modo Usuário Salto para a localização adequada no programa do usuário para o
seu reinício Latência de Despacho – tempo que leva para o dispatcher parar
um processo e reiniciar a execução de outro
11 Escalonamento de CPU Eduardo Nicola F. Zagari
Utilização da CPU: % do tempo que a CPU fica ocupada (0 - 100%)
Throughput: número de processos completados por unidade de tempo
Turnaround: intervalo de tempo entre a submissão de um processo e sua finalização (soma dos intervalos esperando para ser carregado na memória, fila de pronto, em execução e em espera)
Tempo de espera: tempo que cada processo fica na fila de pronto
Tempo de resposta: tempo que o processo demora para produzir alguma resposta à uma requisição (importante para processos interativos)
É desejável maximizar os 2 primeiros e minimizar os 3 últimos Para sistemas interativos, é importante minimizar a variância do
tempo de resposta (previsibilidade)
12 Escalonamento de CPU Eduardo Nicola F. Zagari
Objetivos das políticas de escalonamento: maximizar a utilização da CPU maximizar o throughput minimizar o turnaround minimizar o tempo de espera minimizar o tempo de resposta ser justa maximizar o número de usuários interativos ser previsível minimizar o uso de recursos balancear o uso de recursos balancear usuários interativos com os demais priorizar processo que segurem recursos chave não degradar o sistema etc
13 Escalonamento de CPU Eduardo Nicola F. Zagari
Não permite a retirada da CPU de um processo após este tê-la conseguido
Tempo de resposta é mais previsível
É mais justo?
Processos curtos precisam esperar pelos longos Permite monopolização da CPU
14 Escalonamento de CPU Eduardo Nicola F. Zagari
Permite que a CPU seja retirada de um processo para ser entregue a outro
Garante que os processos possam progredir uniformemente Não permite a monopolização da CPU Usado para:
atendimento rápido de processos mais importantes tratamento de interrupções em sistemas de tempo real atender os usuários em sistemas de tempo compartilhado
A mudança de contexto envolve sobrecarga
15 Escalonamento de CPU Eduardo Nicola F. Zagari
Para prevenir processos do usuário de monopolizar o sistema (CPU), por acidente ou de propósito, uma interrupção por tempo é usada
é o tempo limite para uso da CPU, após o qual ocorre a interrupção por tempo
Um processo do usuário, uma vez interrompido por término do seu quantum, volta à fila de pronto para executar e permite o escalonamento de outro processo
Um processo em execução mantém controle sobre a CPU até: voluntariamente liberá-la quantum time expirado outra interrupção exija atenção da CPU para que seja tratada erro de execução
quantum ou time-slice
16 Escalonamento de CPU Eduardo Nicola F. Zagari
Podem ser fixas (estáticas) durante a vida do processo ou modificáveis (dinâmicas)
Podem ser associadas externamente ou de maneira automática Podem ser calculadas e associadas de forma racional ou
arbitrária
17 Escalonamento de CPU Eduardo Nicola F. Zagari
FIFO (First-In First-Out) (também conhecido por FCFS (First-Come First-Served))
SJF (Shortest Job First) Round-Robin SRT (Shortest Remaining Time) Prioridade Múltiplas Filas Múltiplas Filas com Realimentação Escalonamento para Vários Processadores Escalonamento de Tempo Real
Earliest Deadline
18 Escalonamento de CPU Eduardo Nicola F. Zagari
Não preemptivo (Uma vez em execução, é executado até o término)
O processo que chegar primeiro (first-in) é o primeiro a ser selecionado para execução (first-out)
Implementado através de fila Inicialmente criado para sistemas batch Injusto com jobs curtos (veja exemplos!) Ineficiente para sistemas de tempo compartilhado Combinado com outros esquemas
19 Escalonamento de CPU Eduardo Nicola F. Zagari
Turnaround médio = ( 10 + 12 + 14 ) / 3 = 12 u.t. Tempo de espera médio = ( 0 + 10 + 12) / 3 = 7,33 u.t.
Suponha que os processos cheguem na ordem P1, P2 e P3
20 Escalonamento de CPU Eduardo Nicola F. Zagari
Turnaround médio: ( 14 + 2 + 4 ) / 3 = 6,67 u.t. Tempo de espera médio = ( 4 + 0 + 2) / 3 = 2 u.t.
Suponha que os processos cheguem na ordem P2, P3 e P1
21 Escalonamento de CPU Eduardo Nicola F. Zagari
Não preemptivo O processo com o menor tempo para ser completado é
escolhido quando a informação sobre o tempo de execução não se encontra
disponível deve ser estimado ou usa-se o da última vez desempate pode ser, por exemplo, por FIFO
Reduz tempo médio de espera mais do que isto: SJF é ótimo, pois dá o tempo de espera mínimo para um dado conjunto de processos
No entanto, apresenta uma grande variância no tempo de espera
22 Escalonamento de CPU Eduardo Nicola F. Zagari
Turnaround médio FIFO: (6+14+21+24)/4 = 16,25 u.t. Tempo de espera médio: (0 + 6 + 14 + 21)/4 = 10,25 u.t.
Turnaround médio SJF: (3 + 9 + 16 + 24) / 4 = 13 u.t. Tempo de espera médio: (3 + 16 + 9 + 0) / 4 = 7 u.t.
23 Escalonamento de CPU Eduardo Nicola F. Zagari
O processo em execução libera voluntariamente a CPU retornando para a fila de pronto sem a interrupção do sistema operacional (não preemptivo)
Um programa mal escrito pode monopolizar a CPU Fila de mensagem é verificada periodicamente (Win 3.11)
24 Escalonamento de CPU Eduardo Nicola F. Zagari
Define-se uma unidade de tempo denominada quantum ou time-slice (usualmente de 10 a 100ms) que corresponde ao tempo limite para uso da CPU por cada processo
Após este tempo ter sido passado, o processo sofre preempção e é colocado no final da fila de pronto
A fila de pronto é tratada como uma fila circular (FIFO) O escalonador “pega” o primeiro processo da fila de pronto para
ser executado e define um timer para o tempo de 1 quantum Se o tempo de execução for maior que 1 quantum, o timer gera
uma interrupção e o SO faz o chaveamento de contexto Projetado para sistemas de tempo compartilhado
Se houver n processos na fila de pronto e o tempo do quantum for q, então cada processo obtém 1/n do tempo da CPU e fatias de no máximo q unidades de tempo por vez. Nenhum processo espera por mais que (n-1)q unidades de tempo.
25 Escalonamento de CPU Eduardo Nicola F. Zagari
Claramente preemptivo O tempo médio de espera é alto O desempenho depende do tamanho do quantum
se for muito grande (infinito) FIFO se for muito pequeno, o overhead com ochaveamento de
contexto se torna alto demais...
tende a
26 Escalonamento de CPU Eduardo Nicola F. Zagari
Quantum = 1 u.t.
Turnaround médio RR: (16 + 8 + 9) /3 = 11 u.t. Tipicamente, o turnaround médio é maior que o do SJF, mas o
tempo de resposta é melhor
27 Escalonamento de CPU Eduardo Nicola F. Zagari
É a contra-partida preemptiva do SJF O processo com menor tempo para ser completado é escolhido Um processo em execução é interrompido se um novo processo,
com menor tempo para ser completado aparece na fila de pronto Apresenta sobrecarga maior que o SJF
Variações: Tempo para ser completado pequeno Tempo para ser completado do processo que chega é pouco
menor
28 Escalonamento de CPU Eduardo Nicola F. Zagari
Turnaround médio SRT: ((17-0)+(5-1)+(26-2)+(10-3))/4 = 13 u.t. E qual é o turnaround médio se fosse escalonado segundo SJF?
Resp.: 14,25 u.t.
29 Escalonamento de CPU Eduardo Nicola F. Zagari
Uma prioridade é associada a cada processo e a CPU é alocada ao processo de maior prioridade
SJF é um caso de escalonamento por prioridade em que a prioridade é maior para os processos de menor tempo de execução
A prioridade é geralmente representada por um número (entre 0-7 ou 0-255), mas não existe uma convenção de qual número (o maior ou o menor) é o de maior prioridade
Pode ser preemptivo ou não SJF é um Escalonamento por Prioridade onde a prioridade é
definida de acordo com o tempo de CPU estimado do processo
30 Escalonamento de CPU Eduardo Nicola F. Zagari
Turnaround médio: (16+1+6+18+19)/4 = 15 u.t.
31 Escalonamento de CPU Eduardo Nicola F. Zagari
Prioridade definida: internamente: usa alguma quantidade mensurável para computar a
prioridade. (dinâmica) Ex.: memória, arq. abertos, razão I/O por CPU usada
externamente: importância do processo, departamento de origem, fatores políticos, hierarquia. (estática)
Problema: starvation - processos de baixa prioridade podem ficar indefinidamente no estado de pronto (IBM 7094 no MIT processo rodando por 6 anos)
Solução: aumentar progressivamente a prioridade dos processos que estão aguardando
32 Escalonamento de CPU Eduardo Nicola F. Zagari
Os processos são previamente divididos em grupos em função do tipo de processamento realizado Interativo (foreground) Batch (background)
A cada grupo é aplicado um mecanismo de escalonamento adequado Interativo – RR Batch – FIFO
Fila de processos batch
Fila de processos interativos
Fila de processos do sistema
Alta prioridade
Baixa prioridade
Outra alternativa: time-slices entre filas (ex.: 80% para os interativos em RR e 20% para os batch em FIFO)
Possibilidade de starvation
33 Escalonamento de CPU Eduardo Nicola F. Zagari
Os processos não permanecem em uma mesma fila até o término do processamento
O SO faz um ajuste dinâmico (mecanismo adaptativo) para ajustar os processos em função do comportamento do sistema
Os processos não são previamente associados às filas, mas direcionados pelo sistema entre as diversas filas com base no seu comportamento
Parâmetros: número de filas, algoritmo de escalonamento para cada fila, método para mudar (promover ou rebaixar) o processo de fila, método para determinar em que fila um processo entra
Método mais complexo
34 Escalonamento de CPU Eduardo Nicola F. Zagari
Um exemplo (existem outras variações): Processos novos entram no fim da primeira fila Nas filas, os processos são escalonados segundo Round Robin O quantum varia de uma fila para outra (aumenta em direção às
últimas, quantum 1 para a primeira, 2 para a segunda, etc) Os processos das primeiras filas têm maior prioridade (um processo
não pode ser escolhido, a menos que, as filas anteriores estejam vazias)
Um processo em execução é interrompido, caso apareça um processo em uma das filas anteriores à sua
Sempre que um processo esgotar seu quantum , ele é suspenso na fila da próxima classe de prioridade
Se o processo liberar a CPU, sem preempção, sai da estrutura de filas Quando um processo volta à estrutura, é colocado em uma fila de
prioridade mais alta do que estava antes de sair
35 Escalonamento de CPU Eduardo Nicola F. Zagari
Fila 3
Fila 2
Fila 1 Alta
prioridade
Baixa prioridade
Fila N
...
Menor quantum
Maior quantum
36 Escalonamento de CPU Eduardo Nicola F. Zagari
Vantagens de uma política como esta: Processos CPU-bound vão caindo em filas de prioridade mais baixas,
sendo escolhidos para rodar com menos freqüência; no entanto, eles recebem quanta maiores, necessitando receber a CPU por um número menor de vezes, o que reduz a quantidade trocas de contexto
Processos interativos (I/O-bound), normalmente pequenos, são favorecidos, reduzindo-se o tempo de resposta médio do sistema
Processos interativos grandes, após interação com usuários, retornam em filas de prioridade mais alta
Problema: pressionar <ENTER> em terminais processando longos jobs não interativos (CPU-bound)
Moral da história: implementar uma boa política na prática é muitíssimo mais difícil do que idealizá-la
37 Escalonamento de CPU Eduardo Nicola F. Zagari
Escalonamento mais complexo Processadores idênticos (homogêneos)
Compartilhamento de carga (load sharing) Fila por processador: processador pode ficar ocioso Fila única: compartilhamento de dados (problemas!)
Abordagens: Processamento simétrico
Cada processador faz seu próprio escalonamento (exclusão mútua!)
Mestre-Escravo: processamento assimétrico um algoritmo, executado em um processador reservado para
esse fim, é o escalonador dos outros processadores (alivia a necessidade de compartilhamento de dados)
38 Escalonamento de CPU Eduardo Nicola F. Zagari
Sistemas de tempo real: requisitos temporais Tempo compartilhado puro não funciona Hard real-time: requisitos temporais rígidos requer que uma tarefa
crítica seja completada dentro de um tempo garantido Ex.: tráfego aéreo, armas, sistemas médicos, controle industrial,
etc Soft real-time: requisitos temporais flexíveis requer que um processo
crítico receba prioridade sobre outros menos importantes Ex.: multimídia, realidade virtual, etc
Sistemas de TR rígidos: processadores dedicados Sistemas de TR flexíveis:
Implementados com outros esquemas Processos críticos devem ter prioridade sobre outros Implica na degradação do serviço dos outros usuários
39 Escalonamento de CPU Eduardo Nicola F. Zagari
Escalonamento baseado em prioridades dinâmicas A idéia básica é atribuir sempre a maior prioridade ao processo que
apresentar o prazo mais próximo a expirar (earliest deadline) Sempre que um novo processo chega na fila de pronto, são
calculadas e atribuídas novas prioridades a todos O Earliest Deadline é um algoritmo ótimo, isto é, o fator de
utilização da CPU é 100% Se os processos não forem independentes:
Problema da Inversão de Prioridades Solução: Protocolo de Herança de Prioridade
– Conseqüência: queda no fator de utilização da CPU
40 Escalonamento de CPU Eduardo Nicola F. Zagari
41 Escalonamento de CPU Eduardo Nicola F. Zagari
Unix Sistema de Tempo Compartilhado Meta: bom tempo de resposta aos processos interativos
Escalonamento de 2 níveis Escalonador de baixo nível: Filas Múltiplas (prioridade) com
realimentação Processos executando em modo kernel: prioridade negativa (que são as
maiores) Processos executando em modo usuário: prioridade positiva Roda primeiro processo da fila prioritária não vazia interrupções de
tempo: incremento do contador de utilização da CPU (que aumentará o valor da prioridade do processo)
Round-Robin dentro de cada fila A cada segundo as prioridades são recalculadas:
Contadores de uso da CPU divididos por 2 Nova prioridade = base + nice + contador de uso da CPU
Processos interativos voltam do bloqueio com prioridade negativa.
42 Escalonamento de CPU Eduardo Nicola F. Zagari
43 Escalonamento de CPU Eduardo Nicola F. Zagari
Dois algoritmos: time-sharing e real-time Time-sharing
Prioridades baseadas em créditos – processo com mais créditos é o próximo a ser escalonado
Crédito subtraído quando ocorre uma interrupção por tempo Quando crédito = 0, outro processo é escolhido Quando todos os processos têm crédito = 0, ocorre
“recarregamento” de créditos Baseado em alguns fatores como prioridade e histórico
Real-time Soft real-time (TR Flexível) Aderente ao Posix.1b – duas classes
FIFO e RR Processos de maior prioridade sempre executam primeiro
44 Escalonamento de CPU Eduardo Nicola F. Zagari
Escalonamento Local – Como a biblioteca de threads decide qual thread do usuário executar quando há um LWP disponível
Escalonamento Global – Como o kernel decide qual kernel thread deve ser a próxima a ser executada
45 Escalonamento de CPU Eduardo Nicola F. Zagari
#include <pthread.h>#include <stdio.h>#define NUM THREADS 5int main(int argc, char *argv[]){ int i; pthread t tid[NUM THREADS]; pthread attr t attr; /* get the default attributes */ pthread attr init(&attr); /* set the scheduling algorithm to PROCESS or
SYSTEM */ pthread attr setscope(&attr, PTHREAD SCOPE SYSTEM); /* set the scheduling policy - FIFO, RT, or OTHER */ pthread attr setschedpolicy(&attr, SCHED OTHER); /* create the threads */ for (i = 0; i < NUM THREADS; i++) pthread create(&tid[i],&attr,runner,NULL);
46 Escalonamento de CPU Eduardo Nicola F. Zagari
/* now join on each thread */ for (i = 0; i < NUM THREADS; i++) pthread join(tid[i], NULL);} /* Each thread will begin control in
this function */void *runner(void *param){ printf("I am a thread\n"); pthread exit(0);}
47 Escalonamento de CPU Eduardo Nicola F. Zagari
JVM usa um algoritmo de escalonamento baseado em prioridades e preemptivo
Uma fila FIFO é usada se houver múltiplas threads com a mesma prioridade
JVM escalona uma thread para executar quando: 1. A thread “em execução” sai do estado de “executável” 2. Uma thread de maior prioridade entra no estado “executável”
* Nota – a JVM não especifica se threads são “Time-Sliced” ou não
48 Escalonamento de CPU Eduardo Nicola F. Zagari
Uma vez que a JVM não assegura Time-Slicing, o método yield() pode ser usado:
while (true) { // perform CPU-intensive task . . . Thread.yield(); }
Isto passa o controle a uma outra thread de igual prioridade
49 Escalonamento de CPU Eduardo Nicola F. Zagari
Prioridade Comentário Thread.MIN_PRIORITY Prioridade Mínima de Thread Thread.MAX_PRIORITY Prioridade Máxima de Thread Thread.NORM_PRIORITY Prioridade Default de Thread
As prioridades podem ser ajustadas usando-se o método setPriority():
setPriority(Thread.NORM_PRIORITY + 2);