160 likes | 325 Vues
Sistemas Operacionais. Escalonamento preemptivo. Escalonamento Preemptivo. Lembrando… O Sis. Op. escalona os processos na CPU de forma a otimizar seu uso. Várias métricas possíveis. O despachante efetua a troca de contexto entre os processos.
E N D
Sistemas Operacionais Escalonamento preemptivo
Escalonamento Preemptivo Lembrando… • O Sis. Op. escalona os processos na CPU de forma a otimizar seu uso. Várias métricas possíveis. • O despachante efetua a troca de contexto entre os processos. Copia os registradores, ponteiros para o espaço de endereçamento, descritores de arquivos… • O escalonador pode ser preemptivo ou não. Exemplos de não-preemptivos: FIFO, SJF, Prioridades. Os diagramas de Gantt são usados para visualizar um escalonamento.
Escalonamento Preemptivo Algoritmos de escalonamento pre-emptivos • Round-Robin; • Por prioridades; • Múltiplas filas. • Estudos de caso de escalonadores: Windows Linux Minix
Escalonamento Preemptivo O escalonamento Round Robin • O escalonador define um quantum (fatia de tempo) para cada processo. • Após se encerrar a fatia, o processo escalonado deve ceder o lugar na CPU a um outro. Também se perde a CPU se terminar antes do fim do quantum, ou faz um pedido de E/S. • Mantém-se uma lista circular de processos prontos. • Deve-se usar um mecanismo de interrupção regular, ocorrendo a cada fatia de tempo. • Usa o clock.
Escalonamento Preemptivo Diagrama de Gant – Escalonamento Round Robin Ex. Quantum de duas unidades de tempo.
Escalonamento Preemptivo Round-Robin: observações • Deve-se ter um algoritmo de desempate entre os processos prontos quando há uma interrupção… FIFO, SJF, prioridades… • Se o quantum aumenta muito, se obtém novamente um FIFO. • Espera média: A: 7 B: 6 C: 5 (7+6+5)/3 = 6.
Escalonamento Preemptivo Round-Robin: limitações e problemas • O grande interesse do R.R. é sua “equidade” • Todos os processos acabam tendo uma chance regular de executar. • Como definir o quantum? Muito grande: = FIFO! Muito pequeno: só se faz troca de contexto… • Processos I/O bound são prejudicados! Esperam tanto como os outros, mas não chegam a usar seu quantum todo! Solução: juntar Round Robin e prioridades com preempção
Escalonamento Preemptivo Prioridades com preempção • Define-se prioridades para os processos. • Logo que surgir um processo com maior prioridade que o que está executando, ele preempta o mesmo que volta para a fila dos “prontos”. • Caso haja mais de um processo com uma dada prioridade, se aplica um segundo algoritmo de desempate. Tipicamente Round-Robin; Também pode ser um FIFO ou SJF. • Neste caso, obtém-se uma lista por nível de prioridades. Quando uma fila está vazia, considera-se a lista de prioridade inferior. Múltiplas filas, com realimentação. Pode ter um algoritmo distinto de desempate em cada fila.
Escalonamento Preemptivo R.R. com prioridades e Prioridades com R.R. O Round-Robin com prioridades usa-as para desempatar processos prontos no início de uma fatia de tempo.
Escalonamento Preemptivo R.R. com prioridades e Prioridades com R.R. O algoritmo de prioridades com Round-Robin usa-o para desempatar os processos que têm uma prioridade idêntica.
Escalonamento Preemptivo Definição de prioridades • Estática: a prioridade é dada na criação do processo Pelo Sis. Op., pelo usuário… Problema: há risco de postergação indefinida (starvation) para um processo com baixa prioridade. • Dinâmica: a prioridade evolui durante o ciclo de vida do processo. Começa com um valor estático . Evolui depois: Aumenta a medida que o processo usa a CPU; Aumenta proporcionalmente à fração do quantum que não usou. Assim, os processos I/O bound voltam na fila de espera com alta prioridade!
Escalonamento Preemptivo Estudo de caso: windows 2000 Escalonador preemptivo com prioridades, com R.R. O quantum varia conforme a prioridade. Default (XP): 2 “clock intervalos” (10 ms em x86). Duas classes com 16 prioridades: Maior o valor, maior a prioridade. Prioridades estáticas (para tempo real) Níveis 16-31 Prioridades dinâmicas Níveis 0-15 (0 é reservado) Categorias: high (13) above normal (10) normal (8) below normal (6) idle (4) Cada nível tem uma fila usando um Round_Robin para desempatar.
Escalonamento Preemptivo Detalhes: Variação das prioridades e do quantum no Windows • O processo recebe uma prioridade de base (herdada do processo pai. ) • Pode ser alterada com o explorador de processos. • O quantum varia conforme o ciclo de vida • A prioridade varia conforme o ciclo de vida: • Se há preempção, o processo preemptado entra no início da fila. • Se termina uma E/S o processo sofre aumento de prioridade O aumento depende do driver de E/S. O aumento baixa com o tempo. Nunca desce em baixo da base (0 ou 16), nem aumenta acima do teto (15 ou 32).
Escalonamento Preemptivo Estudo de caso: LINUX 2.4 • Duas classes de processos: Regulares: interativos & batches Tempo real. • Quanto maior o valor, maior a prioridade. Regulares: de 0 até 999 Tempo real: de 1000 a 1099. • A prioridade se chama “goodness” • No caso tempo real, usa-se um mecanismo de prioridades estáticas Fixadas pelo usuário entre 1 e 99 (+ 1000). Com RR para desempatar (SCHED_RR); Com FIFO para desempatar (SCHED_FIFO);
Escalonamento Preemptivo Estudo de caso: LINUX 2.4 • Define-se “epochs” (duração fixa de tempo). • No início de uma “época”, os processos recebem um quantum de base Qi. • Quando todos zeram seu quantum, começa uma nova época. • Ao ser criado, um processo i recebe uma prioridade inicial (p) • O usuário pode diminuir o default através da chamada de sistema nice()/setpriority()
Escalonamento Preemptivo Estudo de caso: LINUX 2.4 Sua prioridade definitiva = p + tempo de sobra em seu quantum. Enquanto o processo executa, seu quantum é decrementado. Quando zera, o processo é bloqueado. Se é preemptado antes do fim de seu quantum, prioridade = p + sobra Ou seja, obtém uma prioridade maior do que um recém-criado “normal”. Quando não tem mais nenhum processo pronto, começa um novo epoch. Prioridade(i) = p + (quantum restante)/2 Todos processos ganham novos créditos, mas quem ainda tinha tem mais!