Escalonadores preemptivos p Inst tituto de Info ormátic ca - UF FRGS Sistemas Operacionais i Gerência do processador Escalonamento preemptivo Aula 07 O escalonador retira o processador de um processo* para entregá-lo a outro (preempção). Preempção pode ser por: Tempo: um processo esgotou um tempo máximo de ciclo de processador Prioridade: um processo de mais alta prioridade ficou pronto para executar O ue cutuca o escalonador são: Interrupções de exceção Interrupções de software, isso é, as chamadas de sistema (e.g : exit(), yield(); read(); write(); send(); recv(); lock(), unlock(), wait()...) Interrupções de hardware: relógio e conclusão de E/S *Vale para threads também! Sistemas Operacionais 2 Algoritmos de escalonamento preemptivos p Round Robin (RR) Por tempo Round-Robin (RR) Baseado em prioridades Shortest Remaining Time Next (SRTN) Múltiplas filas Prioridades dinâmicas (múltiplas filas com realimentação) Similar ao algoritmo FIFO, só ue: Cada processo recebe um tempo limite máximo (time-slice, uantum) para executar um ciclo de processador Um processo fica em execução até ue Complete sua execução (término exit ou kill) Libere voluntariamente o processador (chamada yield) Realize uma operação bloueante (E/S ou sincronização bloueantes) Esgote o tempo máximo de uso da CPU (uantum) Sistemas Operacionais 3 Sistemas Operacionais 4
Round Robin : implementação e funcionamento Problemas com Round Robin Fila de processos aptos é uma fila circular Necessidade de um relógio para delimitar as fatias de tempo Interrupção de tempo Se uantum obtém-se o comportamento de um escalonador FIFO A B C D 0 3 6 9 12 15 18 23 28 34 40 Tempos de execução A = 12 B = 8 C = 15 D = 5 Sistemas Operacionais 5 Problema 1: Dimensionamento do uantum Compromisso entre o sobrecusto e o tempo de resposta em função do número N de usuários Compromisso entre tempos de chaveamento e ciclo de processador (uantum) Traduz a uestão da eficiência versus conveniência Eficiência >> e Conveniência e (só um exemplo) N *( + e)... e e e N *( + e)... e Solução: uantum variável e e e Sistemas Operacionais 6 Problemas com Round Robin (cont.) Noção de prioridades Problema 2: Processos I/O bound são prejudicados Esperam da mesma forma ue processos CPU bound, porém uando ganham a CPU, muito provavelmente, não utilizam todo o seu uantum c Podia executar por, mas executa só c (c << p) Modo usuário Modo núcleo e e : uantum e: escalonamento (inclui salvamento e troca de contexto) Solução: privilegiar os processos I/O bound como forma de compensação Prioridades!!! Critério para selecionar processos/threads Prioridade pode ser definida de forma Estática: no momento da criação (ou alterada via chamada de sistema) Dinâmica: durante a execução do processo em função de condições de utilização (carga e recursos) do sistema e.g: Processo ue detém recurso importante pode ter prioridade aumentada, processo ue executa demais pode ter prioridade reduzida etc Pode ser incluído em políticas preemptivas e não preemptivas: Preemptiva: poder de retirar processo de menor prioridade da CPU Não-preemptiva: A prioridade é considerada apenas no momento da selecionar um dos processos ue está no estado de apto para passar a executando. Sistemas Operacionais 7 Sistemas Operacionais 8
Escalonamento preemptivo p por prioridade Implementação: Escalonador preemptivo p por prioridades Um processo fica em execução até ue Complete sua execução (término exit ou kill) Libere voluntariamente t o processador (chamada yield) Realize uma operação bloueante (E/S ou sincronização bloueantes) Um processo de mais alta prioridade entre no estado apto Se houver mais de um processo com a mesma prioridade é necessário efetuar um tie brake Pode ser o uso de uma política FIFO, SJF, Round-Robin entre eles Múltiplas filas associadas ao estado apto Cada fila tem uma prioridade associada e uma política para selecionar os processos nessa fila (FIFO, SJF, Round-Robin, Robin...) Funcionamento: executando Fila apto 0 Término Dispatch 1. Quando um processo de p CPU maior prioridade ue o Prioridade 0 processo em execução entrar Fila apto 1 no estado apto deve ocorrer uma preempção Prioridade 1 2. Varre as filas de prioridades, Fila apto n da mais alta a mais baixa, até encontrar a primeira fila não Prioridade n vazia. Preempção. Idea é dar aos processos I/O Fila de bloueados bound uma prioridade maior. Evento Espera por evento Sistemas Operacionais 9 Sistemas Operacionais 10 Problemas com escalonamento por prioridades Múltiplas filas com realimentação Um processo de baixa prioridade pode não ser executado Postergação indefinida (starvation) Processo com prioridade estática pode ficar mal classificado e ser penalizado ou favorecido em relação aos demais Típico de processos ue durante sua execução trocam de padrão de comportamento (CPU bound a I/O bound e vice-versa) Solução: Múltiplas filas com realimentação Baseado em prioridades dinâmicas Em função do tempo de uso da CPU a prioridade do processo aumenta e diminui Sistema de envelhecimento (agging) evita postergação indefinida id Possibilidade de trocar de fila (migração) Prioridade 0 executando Fila apto 0 Término Dispatch CPU Fila apto 1 Prioridade 1 Fila apto n Prioridade n Evento Preempção Fila de bloueados Espera por evento Sistemas Operacionais 11 Sistemas Operacionais 12
Shortest Remaining Time Next (SRTN) Escalonamento por fração justa (fair share) ) Versão preemptiva do Shortest Job/Process First (SJF-SPF) Uma solução para problema dos processos I/O bound no Round-Robin Princípio: Escolhe o processo apto cujo tempo de execução no próximo ciclo seja o menor Quando o processo entra no estado apto seu tempo é comparado com auele ue está em executando Se for menor, preempta o ue está executando O problema de como saber o futuro : tempo é uma estimativa Privilegia tarefas curtas ou auelas ue tem o menor ciclo de CPU Forma de priorizar processos I/O bound Um escalonador deve ser justo com os usuários do sistema Tomar decisões baseados só em processos leva a injustiças Ex: usuário 1 com 9 processos e usuário 2 com 1 processo. O usuário 1 potencialmente usaria 90% do processador. Solução: Considerar o proprietário do processo como parte do procedimento da política de escalonamento Dois usuários devem receber 50% do processador independente do número de processos ue cada um deles detém Sistemas Operacionais 13 Sistemas Operacionais 14 Escalonamento em múltiplos processadores Processadores multicore e com hyperthreading Duas categorias Assimétricos: uma CPU executa o sistema operacional, as demais executam aplicações de usuários Simétricos: todas CPUs executam o sistema operacional e aplicações usuário Estratégias: Fila de aptos única para todas CPUs ou uma fila por CPU Noção de afinidade Tentativa de manter o processo/thread executando na mesma CPU Pode ser afinidade rígida ou flexível Objetivo é reaproveitar informação já presente nos níveis de cache Balanceamento de carga O objetivo é manter todas as CPUs ocupadas Migração entre filas de aptos se opõe a noção de afinidade São vistos pelo sistema operacional como multiprocessadores Hyperthreading define processadores lógicos em processadores físicos O sistema operacional enxerga os processadores lógicos para efeitos de escalonamento Ex.: Intel i3 (dual core com HT): cada core tem dois lógicos (HT), então, para o SO, há como uatro processadores (lógicos) disponíveis lógico Com HT físico Sistema operacional Sem HT lógico físico Sistema operacional Sistemas Operacionais 15 Sistemas Operacionais 16
Estudo de casos Estudo de caso: Escalonamento windows UFRGS rmática - U Escalonamento Windows Escalonamento Linux Unidade de escalonamento é a thread Modelo de threads é 1:1 Real time Preempção por tempo e por prioridade Define duas classes: Tempo real: prioridade estática (níveis 16-31) user Variável: prioridade dinâmica (níveis 0-15) Cada classe possui 16 níveis de prioridades Cada nível é implementado por uma fila em uma política round-robin 31 16 15 Mais prio 0 Menos prio Múltiplas filas: classe de tempo real Múltiplas filas com realimentação: classe de tempo variável Threads da classe tempo real tem precedência sobre as da classe variável Sistemas Operacionais 17 Sistemas Operacionais 18 Escalonamento windows (classe variável) Estudo de caso: escalonamento Linux 2.6.0 até 2.6.22 Dois parâmetros definem a prioridade de uma thread: Valor de prioridade de base do processo Prioridade id d inicial i i ue indica sua prioridade id d relativa dentro do processo Prioridade da thread varia de acordo com uso do processador Preempção por esgotar o uantum: prioridade reduzida Preempção por operação de E/S: prioridade aumentada Nunca assume valor inferior a sua prioridade de base, nem superior a 15 Fator adicional em máuina multiprocessadoras: afinidade! Tentativa de escalonar uma thread no processador ue ela executou mais recentemente Unidade de escalonamento é thread Modelo de threads 1:1 0 Define duas classes Real time User: Processos interativos e batch (regular) 99 RT: Processos de tempo real 100 140 níveis diferentes de prioridade user Escalona sempre o processo (thread) de maior prioridade Cada nível possui um valor de uantum associado 139 Maior a prioridade, maior o uantum Quantum é o número de ciclos ue um processo pode continuar em execução Unidade de ciclo é 1ms (denominado jiffy) Mais prio Menos prio Sistemas Operacionais 19 Sistemas Operacionais 20
Escalonamento Linux (classe tempo real) ) Escalonamento Linux (classe usuário) Prioridades entre 0 e 99 Esuema de prioridade fixa Definida por usuário com privilégios especiais Seleciona o processo de maior prioridade para executar Múltiplas filas sem realimentação Políticas de escalonamento (padrão POSIX) SCHED_FIFO: escalonador FIFO com prioridade id d estática SCHED_RR: escalonador Round-robin com prioridade estática Na verdade NÃO são escalonadores de tempo real Não garantem prazo!! São simplesmente mais prioritários ue a classe USER Prioridades de 100 a 139 Associa tempos de uantum a cada nível Fator nice Valor a ser somado na prioridade da thread (-20 a +19) Default é zero Chamada de sistema nice(), mas ue só pode ser usada para baixar a prioridade Estrutura t de dadosd Fila de execução (runueue) = corresponde ao estado de apto Fila de espera (waitueue) = corresponde ao estado bloueado Threads ue esperam por evento de E/S ou sincronização Uma fila para cada evento ue uma thread pode esperar Sistemas Operacionais 21 Sistemas Operacionais 22 Fila de execução (Runueue) Esuema da estrutura runueue Uma por processador/core Possui ponteiros para dois vetores e uma função (migração) Vetores Ativo e Expirado (140 elementos cada) Cada elemento do vetor é o cabeça de uma lista encadeada Processos de prioridade i estão encadeados a partir do elemento i Princípio de funcionamento Seleciona o processo de mais alta prioridade do vetor de ativos Se uantum do processo esgotar, é movido para o vetor de expirados Se FIFO não há uantum Evita a inanição Classe usuário pode ser colocado em um nível de prioridade diferente Quando não houver mais processos na lista de ativos, inverte o valor dos ponteiros ativo e expirados 15 ssimi -19-août-1 A. Caris Runueue Ponteiro ativo 0 1 2 Ponteiro 139 expirado 0 1 2 Migração Serve garantir balanceamento entre as runueues dos diferentes processadores/cores (verificação periódica) 139 Listas duplamente encadeadas........ Sistemas Operacionais 23 Sistemas Operacionais 24
Prioridades Detalhes gerais sobre escalonador Linux Quanto mais prioritário, maior o uantum Nível 100 (800ms) a Nível 139 (5 ms) Prioridade dinâmica Baseada em uanto tempo usou a CPU e uanto tempo ficou bloueado Recompensa padrão I/O bound com até -5 Pune padrão CPU/bound com até +5 Recalculada ao mover de ativo para expirado Evoluiu bastante nos últimos anos Considera a presença de vários processadores/cores Afinidade id d e balanceamento Redução do tempo de execução Justiça A partir da versão 2.6.23 o escalonador é baseado em uma política Completely Fair Scheduling Complexidade O(n log n) Baseado em árvores rubro-negras com o tempo de processamento usado como chave de pesuisa Sistemas Operacionais 25 Sistemas Operacionais 26 Leituras complementares A. Tanenbaum. Sistemas Operacionais Modernos (3 a edição), Pearson Brasil, 2010. Capítulo 2: seções 241 2.4.1 a 243 2.4.3 A. Silberchatz, P. Galvin; Sistemas Operacionais. (7 a edição). Campus, 2008. Capítulo 5 (seções 5.1, 5.2 e 5.3) R. Oliveira, A. Carissimi, S. Toscani; Sistemas Operacionais. Editora Bookman 4 a edição, 2010 Capítulo 4 (seções 4.4 e 4.5) Sistemas Operacionais 27