Escalonamento de CPU

Aprenda como um sistema operacional decide qual programa será executado em seguida na CPU. Avalie escalonamentos com os tempos de retorno e de resposta e compare FIFO, tarefa mais curta primeiro, escalonamento circular e por prioridade em exemplos resolvidos. Veja como as filas multinível com realimentação identificam tarefas interativas, como o escalonamento por loteria, por passos e os escalonadores justos do Linux dão a cada tarefa uma parcela definida da CPU e como os escalonadores distribuem o trabalho entre várias CPUs. Por fim, analise os escalonadores do Linux e do Windows e escolha uma política para uma carga de trabalho.

IntermediárioAula 2 de 9 do curso Curso de Sistemas operacionais

O que você vai aprender

  1. Explique em que momentos da vida de um processo ocorrem decisões de escalonamento, diferencie o escalonamento preemptivo do não preemptivo e calcule as métricas usadas para comparar políticas de escalonamento.
    • Explique quando e como o escalonador escolhe a próxima tarefa
      Situe o escalonador de CPU no ciclo de vida de um processo, diferencie o escalonamento preemptivo do não preemptivo e nomeie os tipos de escalonador que um sistema operacional pode ter.
    • Calcule os tempos de retorno, de resposta e de espera
      Desenhe a linha do tempo de um escalonamento, calcule os tempos de retorno, de resposta e de espera, a vazão e a utilização da CPU e explique a que objetivo cada métrica atende.
  2. Escalone um conjunto de tarefas segundo as políticas clássicas, calcule o desempenho de cada uma e explique por que cada política atende a algumas cargas de trabalho e falha em outras.
    • Escalone tarefas com FIFO e tarefa mais curta primeiro
      Aplique o escalonamento FIFO e o escalonamento não preemptivo por tarefa mais curta primeiro, explique o efeito comboio e estime tempos de execução que não são conhecidos de antemão.
    • Use preempção para atender tarefas mais curtas e sobreponha entrada e saída
      Aplique o escalonamento por menor tempo restante primeiro, explique quando a preempção melhora o tempo de retorno e mantenha a CPU ocupada executando outras tarefas enquanto uma espera por entrada e saída.
    • Use escalonamento circular para obter respostas rápidas
      Aplique o escalonamento circular, explique seu efeito sobre os tempos de resposta e de retorno e escolha uma fatia de tempo adequada.
    • Use prioridades sem causar inanição de tarefas
      Aplique o escalonamento por prioridade, interprete as diferentes escalas de prioridade usadas na prática e previna a inanição e a inversão de prioridade.
  3. Explique como as filas multinível com realimentação aprendem com o comportamento de uma tarefa para aproximar o escalonamento por tarefa mais curta primeiro e manter respostas rápidas para tarefas interativas, e como suas regras são ajustadas contra a inanição e a manipulação do escalonador.
    • Acompanhe tarefas nas filas multinível com realimentação
      Apresente as regras básicas das filas multinível com realimentação e acompanhe como tarefas limitadas por processamento, curtas e interativas se movem entre suas filas.
    • Ajuste as MLFQ para combater a inanição e a manipulação do escalonador
      Explique os problemas das regras básicas de MLFQ, corrija-os com elevações de prioridade e melhor contabilização e escolha seus parâmetros.
  4. Explique o escalonamento por parcela proporcional, calcule as parcelas dadas pelo escalonamento por loteria, por passos e pelos escalonadores justos do Linux e compare seus pontos fortes.
    • Compartilhe a CPU por loteria
      Represente parcelas com bilhetes, realize um sorteio, preveja quanto o escalonamento por loteria se aproxima das parcelas desejadas e use moeda, transferência e inflação de bilhetes.
    • Obtenha parcelas exatas com escalonamento por passos
      Calcule passos e valores de passagem, acompanhe um escalonamento por passos e compare-o com o escalonamento por loteria.
    • Explique os escalonadores justos do Linux: CFS e EEVDF
      Calcule fatias de tempo e tempo de execução virtual no escalonador completamente justo, relacione valores de nice a pesos e descreva como o EEVDF escolhe a próxima tarefa.
  5. Explique como caches, coerência e afinidade alteram o escalonamento em um multiprocessador e compare projetos com fila única e com múltiplas filas que equilibram a carga entre CPUs.
    • Explique o que muda com várias CPUs
      Descreva o hardware multiprocessador da perspectiva do escalonador: caches privados, coerência de cache, necessidade de travas, afinidade de cache e diferentes tipos de núcleos de processamento.
    • Compare o escalonamento multiprocessador com fila única e com múltiplas filas
      Compare escalonadores multiprocessadores com fila única e com múltiplas filas, reconheça desequilíbrios de carga e corrija-os com migração e roubo de trabalho.
  6. Analise como Linux, Windows e outros sistemas combinam prioridades, realimentação e compartilhamento proporcional, controle-os com ferramentas padrão e escolha e avalie uma política para uma determinada carga de trabalho.
    • Controle o escalonador do Linux
      Descreva as políticas de escalonamento do Linux e sua história e use valores de nice, políticas de tempo real, afinidade de CPU e grupos de controle.
    • Analise o Windows e outros sistemas como escalonadores do tipo MLFQ
      Calcule prioridades base do Windows, explique elevações dinâmicas de prioridade e seu decaimento e reconheça as mesmas ideias de realimentação em outros sistemas.
    • Escolha e avalie uma política de escalonamento para uma carga de trabalho
      Associe políticas de escalonamento a cargas de trabalho, compare-as em um exemplo e escolha um método para avaliar um escalonador.

Guia de estudo de Escalonamento de CPU

6 capítulos

1

Decida quem executa e avalie o resultado

Uma CPU pode executar uma thread por vez, mas um sistema ocupado pode ter muitas threads prontas para usá-la. O escalonador decide qual trabalho avança a cada oportunidade. Para avaliar essa escolha, acompanhe tanto os estados dos processos quanto o tempo: uma primeira vez rápida, uma conclusão antecipada e uma alta taxa de trabalho concluído descrevem sucessos diferentes. Uma linha do tempo torna essas diferenças visíveis e fornece as evidências para comparar políticas.

1.1 De tarefa pronta a tarefa em execução

Um escalonador de CPU escolhe o processo ou a thread no estado de pronto que executará em seguida em uma CPU. A regra que ele segue é sua política. O despachante realiza a escolha ao transferir a execução para a tarefa selecionada. Uma política diferente pode usar o mesmo mecanismo de troca.

Acompanhe as mudanças de estado

Uma tarefa em execução ocupa uma CPU. Uma tarefa pronta poderia executar, mas está esperando sua vez. Uma tarefa bloqueada espera por um evento, como a conclusão de uma leitura de disco. Apenas tarefas prontas são candidatas à seleção.

Suponha que um editor inicie uma leitura de disco enquanto um compilador está pronto. O editor passa de execução para bloqueado, então o compilador pode executar. Quando a leitura termina, uma interrupção deixa o editor pronto novamente. Ele não necessariamente executa imediatamente: a política precisa escolher entre ele e outras tarefas prontas.

Decisões de escalonamento ocorrem quando uma tarefa bloqueia, termina, fica pronta ou é interrompida e devolvida ao estado de pronto. Ceder a CPU voluntariamente também a libera. Preempção significa retirar a CPU de uma tarefa que poderia continuar executando; a tarefa mantém seu estado salvo e pode ser retomada depois.

Tipo de políticaQuando uma tarefa em execução libera a CPUEfeito de uma nova tarefa pronta
Não preemptivaEla bloqueia, cede a CPU ou terminaA nova tarefa espera uma oportunidade de decisão
PreemptivaEla também pode perder a CPU enquanto ainda está apta a executarA nova tarefa pode substituir a tarefa atual

Uma interrupção do temporizador permite que o núcleo imponha uma fatia de tempo, mesmo que um programa execute um laço sem ceder a CPU. Uma operação de entrada e saída concluída também pode provocar preempção ao deixar pronta uma tarefa mais favorecida. Linux, Windows e macOS usam escalonamento preemptivo.

O trabalho vem em rajadas

Os programas alternam entre rajadas de CPU, quando fazem cálculos, e períodos de espera por entrada e saída. Um programa limitado por processamento, como um codificador, tem longas rajadas de CPU. Um programa limitado por entrada e saída, como um editor, frequentemente processa por pouco tempo e depois espera. Atender rapidamente a um editor após o pressionamento de uma tecla pode melhorar a resposta sem dar a ele muito tempo total de CPU.

O despachante salva o estado da tarefa anterior, restaura os registradores da tarefa escolhida e retoma sua sequência de instruções em modo usuário. Latência de despacho é o tempo necessário para transferir a execução. A troca também afeta os caches e o buffer de tradução de endereços, ou TLB, que armazena traduções de endereços. A próxima tarefa pode precisar preenchê-los novamente, então o tempo para salvar registradores é apenas parte do custo.

Três escalas de tempo do escalonamento

O escalonador de longo prazo admite tarefas enviadas e controla quantas estão no sistema. O escalonador de médio prazo pode suspender processos inteiros, retirando-os da memória e restaurando-os depois. O escalonador de curto prazo seleciona a próxima tarefa pronta e atua frequentemente. Sistemas de uso geral dependem principalmente dessa última função; sistemas em lote e clusters também podem controlar a admissão explicitamente.

Comece uma comparação de políticas com tarefas simples que usam apenas a CPU e têm durações conhecidas. Depois varie uma característica: durações diferentes expõem os atrasos do FIFO, chegadas posteriores expõem os limites da ausência de preempção, operações de entrada e saída criam oportunidades para sobrepor trabalho e durações desconhecidas exigem previsão ou realimentação.

Principais conclusões

  • Apenas tarefas prontas podem ser selecionadas para executar.
  • Uma política de escalonamento escolhe; o despachante realiza a troca.
  • A preempção preserva uma tarefa para que ela possa ser retomada.
  • Interrupções do temporizador e de dispositivos podem criar oportunidades de escalonamento.
  • Trocas frequentes custam tempo de despacho e prejudicam a localidade de cache.
  • Admissão, retirada da memória e seleção para a CPU atuam em escalas de tempo diferentes.

1.2 Leia os tempos em um escalonamento

Um escalonamento mostra quando as tarefas executam. Uma métrica indica qual parte desse escalonamento é relevante. Registre a chegada, a primeira execução e a conclusão de cada tarefa antes de calcular qualquer média.

Separe os três tempos

O tempo de retorno mede todo o intervalo entre a chegada e a conclusão. O tempo de resposta mede a demora até a primeira execução. O tempo de espera soma todos os intervalos em que a tarefa está pronta, mas não executa.

Tretorno=Tconclusa˜o−Tchegada Tresposta=Tprimeira execuc¸a˜o−Tchegada

Para uma tarefa que usa apenas a CPU, o tempo de retorno é igual à espera mais o tempo de execução na CPU. Com entrada e saída, o tempo bloqueado também faz parte do retorno, então subtrair apenas o tempo de CPU superestimaria a espera. Aqui, a resposta usa a definição baseada na primeira execução; um serviço voltado ao usuário pode medir separadamente o tempo até sua primeira saída.

Analise uma linha do tempo FIFO

A chega em 0 ms e precisa de 8 ms de tempo de CPU. B chega em 1 ms e precisa de 4 ms. C chega em 2 ms e precisa de 2 ms. Sem custo de troca, FIFO resulta em:

  • A: 0–8 ms.
  • B: 8–12 ms.
  • C: 12–14 ms.
TarefaRetornoRespostaEspera
A8−0=8 ms0−0=0 ms0 ms
B12−1=11 ms8−1=7 ms7 ms
C14−2=12 ms12−2=10 ms10 ms

O tempo médio de retorno é 8+11+123=313≈10,33 ms. Os tempos médios de resposta e de espera são ambos 0+7+103=173≈5,67 ms. Eles coincidem porque cada tarefa executa uma vez sem interrupção. Com preempção, uma tarefa pode voltar a esperar após sua primeira vez, então a espera pode superar a resposta.

Avalie toda a carga de trabalho

A vazão conta as tarefas concluídas por unidade de tempo decorrido. O escalonamento conclui três tarefas em 14 ms, aproximadamente 214,29 tarefas/s. A utilização da CPU é o tempo em que a CPU está ocupada dividido pelo tempo decorrido; aqui é 100% porque a CPU nunca fica ociosa. Especifique o intervalo de medição: acrescentar um período ocioso após a conclusão alteraria ambos os valores.

Uma alta utilização ainda pode vir acompanhada de longas esperas. Ela também não significa necessariamente que todo o tempo ocupado seja trabalho útil das aplicações: medições reais podem contar trocas e outros trabalhos do núcleo como tempo ocupado. Indique se um cálculo de sobrecarga mede tempo ocupado ou trabalho útil.

Escolha o que otimizar

Trabalho em lote frequentemente valoriza o tempo médio de retorno. Trabalho interativo valoriza uma resposta rápida. Serviços compartilhados precisam de acesso justo e também de vazão. Inanição significa que uma tarefa elegível espera indefinidamente, então uma boa média, por si só, não demonstra tratamento justo.

Examine os atrasos individuais e a cauda da distribuição. Um tempo de resposta no percentil 99 descreve o atraso no qual ou abaixo do qual ficam aproximadamente 99% das observações; alguns atrasos graves podem desaparecer dentro de uma média baixa. Sempre subtraia o instante de chegada da própria tarefa e conte seus intervalos de execução como atendimento, nunca como espera.

Principais conclusões

  • O tempo de retorno termina na conclusão; o de resposta termina na primeira execução.
  • A espera conta os intervalos no estado de pronto e exclui os intervalos de bloqueio.
  • Subtraia o instante de chegada de cada tarefa antes de calcular a média.
  • Vazão e utilização dependem do intervalo de observação.
  • Examine atrasos na cauda e inanição junto com as médias.
2

Acompanhe as políticas clássicas de escalonamento

As mesmas tarefas prontas podem terminar em ordens muito diferentes conforme a política. FIFO segue a chegada, políticas de tarefa mais curta favorecem pequenas demandas de CPU, o escalonamento circular alterna as vezes e o escalonamento por prioridade segue uma classificação. Construa a linha do tempo a partir da regra em cada momento de decisão e depois calcule o resultado. Chegadas posteriores, tarefas bloqueadas e custos de troca revelam escolhas de compromisso que uma única ordenação de tarefas não consegue mostrar. Os acompanhamentos manuais ignoram o custo de troca, salvo indicação em contrário.

2.1 FIFO e a rajada pronta mais curta

FIFO, também chamado de primeiro a chegar, primeiro a ser atendido ou FCFS, executa tarefas prontas em ordem de chegada. É não preemptivo: uma chegada posterior não pode interromper uma rajada de CPU em execução. Em exemplos que usam apenas a CPU, cada tarefa selecionada executa até a conclusão.

Observe o efeito comboio

A, B e C chegam juntas. A precisa de 60 ms; B e C precisam de 6 ms cada uma. Com A primeiro, FIFO executa A 0–60, B 60–66 e C 66–72. Os tempos de retorno são 60, 66 e 72 ms, com média de 66 ms. As tarefas pequenas passam a maior parte de seu tempo esperando atrás de A. Esse é o efeito comboio.

Tarefa mais curta primeiro (SJF) seleciona a próxima rajada de CPU mais curta entre as tarefas prontas e não a preempta. Com as mesmas chegadas, executa B 0–6, C 6–12 e depois A 12–72. O tempo médio de retorno passa a ser 6+12+723=30 ms. O trabalho total de CPU continua sendo 72 ms; a melhora vem da conclusão mais cedo das tarefas curtas.

Por que isso ajuda? Se uma rajada longa executa imediatamente antes de uma curta, ambas as tarefas esperam por todo o trabalho anterior. Trocar apenas essas duas reduz o atraso da tarefa curta pela duração da rajada longa, enquanto aumenta o atraso da tarefa longa apenas pela duração da rajada curta. Repetir essas trocas coloca as rajadas em ordem crescente. Quando todas as tarefas chegam juntas e suas durações são conhecidas, SJF minimiza os tempos médios de retorno e de espera; a resposta até a primeira execução também é igual à espera nesse caso não preemptivo com tarefas que usam apenas a CPU.

Restrinja a escolha às tarefas prontas

Agora A chega em 0 ms, enquanto B e C chegam em 10 ms. Em 0 ms, A é a única opção. O SJF não preemptivo executa A 0–60, B 60–66, C 66–72. Os tempos de retorno são 60, 56 e 62 ms, com média de aproximadamente 59,33 ms. SJF não pode agir sobre uma tarefa futura nem interromper uma rajada que já iniciou.

PolíticaInformação usadaPrincipal fraqueza
FIFOOrdem de chegadaTrabalho curto pode esperar atrás de trabalho longo
SJFDuração prevista da próxima rajadaTrabalho longo pode ser adiado por chegadas repetidas de tarefas curtas

FIFO evita a inanição quando as tarefas à frente acabam liberando a CPU. SJF pode causar inanição de uma tarefa longa em espera se tarefas curtas continuarem chegando.

Preveja uma rajada

A próxima rajada de CPU geralmente é desconhecida. Uma média exponencial combina a última rajada medida com a previsão anterior:

τn+1=αtn+(1−α)τn

Aqui, tn é a rajada medida, τn a previsão anterior e α um peso entre 0 e 1. Começando com 10 ms e usando α=0,5, uma medição de 6 ms gera uma previsão de 8 ms. Uma medição seguinte de 4 ms gera 6 ms; outra de 6 ms mantém a previsão em 6 ms. Com peso zero, as medições não têm efeito; com peso um, apenas a medição mais recente importa. A grandeza prevista é a duração da rajada de CPU, não o tamanho do arquivo do programa ou o número de linhas.

Principais conclusões

  • FIFO usa a ordem de chegada e pode criar um comboio.
  • SJF escolhe a rajada mais curta que já está pronta.
  • O tempo médio ótimo do SJF exige as hipóteses adequadas sobre a carga de trabalho.
  • Chegadas posteriores não podem interromper o SJF não preemptivo.
  • A média exponencial equilibra medições recentes com previsões anteriores.
  • Um fluxo de tarefas curtas pode causar inanição de uma tarefa longa no SJF.

2.2 Interrompa uma tarefa longa e sobreponha entrada e saída

Menor tempo restante primeiro (STCF, também SRTF) é o SJF preemptivo. Em uma chegada ou conclusão, compare o tempo de CPU de que cada tarefa pronta ainda precisa. Uma recém-chegada interrompe a tarefa atual quando precisa de menos tempo do que resta à atual.

Compare o tempo restante

A precisa de 60 ms e chega em 0 ms. B e C precisam de 6 ms cada uma e chegam em 10 ms. A executa por 10 ms, restando 50 ms. Em 10 ms, B vence porque 6 ms é menos que 50 ms; C tem a mesma duração, então a ordem de chegada e depois o nome resolvem o empate.

A linha do tempo é A 0–10, B 10–16, C 16–22, A 22–72. Os tempos de retorno são A 72 ms, B 6 ms e C 12 ms, com média de 30 ms. Os tempos de resposta são 0, 0 e 6 ms, com média de 2 ms. O SJF não preemptivo com essas chegadas tem médias de aproximadamente 59,33 ms de retorno e 35,33 ms de resposta.

Sempre subtraia o atendimento já recebido. Comparar uma nova rajada de 12 ms com os 60 ms originais de A estaria errado se restassem apenas 5 ms a A. STCF concluiria A primeiro. Com durações conhecidas de tarefas que usam apenas a CPU e custo de troca zero, STCF minimiza o tempo médio de retorno para chegadas arbitrárias. Tarefas longas ainda podem sofrer inanição sob um fluxo contínuo de trabalho mais curto.

Quando todas as tarefas que usam apenas a CPU chegam juntas, SJF e STCF produzem a mesma ordem. A tarefa mais curta em execução só fica mais curta, então nenhuma tarefa em espera se torna motivo para preemptá-la.

Use o tempo de bloqueio de outra tarefa

Uma tarefa bloqueada não pode usar a CPU. Sua espera por entrada e saída é uma oportunidade para executar outras tarefas prontas, mesmo com uma política não preemptiva. A preempção volta a ser relevante quando a conclusão de uma operação de entrada e saída deixa uma rajada curta pronta enquanto outra tarefa executa.

Considere A com cinco rajadas de CPU de 10 ms e uma leitura de disco de 10 ms após cada uma de suas quatro primeiras rajadas. B precisa de uma rajada de CPU de 50 ms. Ambas chegam em 0 ms. Se a CPU ficar ociosa durante as leituras de A e adiar B até A terminar, A conclui em 90 ms e B em 140 ms.

Trate cada rajada de A que retorna como uma tarefa curta pronta:

  • A executa 0–10; sua leitura ocupa 10–20 enquanto B executa.
  • A retorna para 20–30; restam 40 ms a B, então os 10 ms de A vencem.
  • B executa 30–40 durante a próxima leitura. A alternância se repete.
  • A última rajada de A executa 80–90; B conclui seus últimos 10 ms durante 90–100.

A ainda termina em 90 ms, mas B termina em 100 ms. A CPU realiza 100 ms de trabalho em 100 ms de tempo decorrido. A atividade de disco e a atividade de CPU se sobrepõem; a CPU não executa A enquanto A está bloqueada. Uma interrupção de dispositivo marca A como pronta quando cada leitura termina, após o que STCF compara sua nova rajada com o trabalho restante de B.

Principais conclusões

  • STCF compara a demanda restante de CPU nos momentos de decisão.
  • A preempção pode permitir que tarefas curtas que chegam depois terminem muito mais cedo.
  • Com chegadas simultâneas de tarefas que usam apenas a CPU, SJF e STCF coincidem.
  • Uma tarefa bloqueada libera a CPU para que outro trabalho possa se sobrepor à sua entrada e saída.

2.3 Alterne as vezes com escalonamento circular

O escalonamento circular (RR) mantém uma fila FIFO de tarefas prontas e dá à tarefa da frente no máximo um quantum, ou fatia de tempo. Uma tarefa que termina ou bloqueia deixa a CPU antes. Uma tarefa que ainda está pronta quando sua fatia termina vai para o fim da fila.

Acompanhe as vezes antes de calcular os tempos

A, B e C chegam em 0 ms e precisam de 9 ms cada uma. Com um quantum de 3 ms, RR executa:

  • Primeira rodada: A 0–3, B 3–6, C 6–9.
  • Segunda rodada: A 9–12, B 12–15, C 15–18.
  • Última rodada: A 18–21, B 21–24, C 24–27.

As primeiras execuções ocorrem em 0, 3 e 6 ms, então o tempo médio de resposta é 3 ms. As conclusões ocorrem em 21, 24 e 27 ms, então o tempo médio de retorno é 24 ms. FIFO resulta em tempo médio de resposta de 9 ms e tempo médio de retorno de 18 ms. Aqui RR inicia todas rapidamente, mas adia a primeira conclusão até 21 ms.

RR divide o acesso à CPU enquanto as tarefas competem; ele não iguala os tempos de conclusão. Uma tarefa curta pode terminar em sua primeira vez. Com um conjunto fixo de n tarefas prontas e quantum q, a espera entre as vezes é de no máximo (n−1)q sem custos de troca. Chegadas contínuas, outras classes de prioridade e restrições às CPUs em que uma tarefa pode executar alteram as condições desse limite.

Trate chegadas no limite de uma fatia

Use a ordem de chegada e depois a ordem alfabética para desempates. Uma tarefa que chega exatamente quando uma fatia termina entra antes da tarefa preemptada. Com A chegando em 0 ms e precisando de 8 ms, B em 1 ms precisando de 4 ms e C em 2 ms precisando de 2 ms, um quantum de 2 ms resulta em A 0–2, B 2–4, C 4–6, A 6–8, B 8–10, A 10–14.

O intervalo final de A contém duas vezes consecutivas sem concorrente. Os tempos de resposta são 0, 1 e 2 ms; os tempos de retorno são 14, 9 e 4 ms. Suas médias são 1 ms e 9 ms. Quando uma tarefa bloqueada retorna no RR básico, ela entra para uma nova vez; não reserva tempo de CPU não usado enquanto está bloqueada.

Faça o quantum valer seu custo

Um quantum muito grande faz RR se comportar como FIFO para rajadas mais curtas que esse quantum. Um quantum minúsculo cria muitos despachos e perturbações repetidas nos caches. Em uma implementação simples baseada em temporizador, o quantum é um número inteiro de períodos do temporizador.

Para um custo de troca s após cada fatia útil de duração q, a fração aproximada de sobrecarga é sq+s. Uma troca de 0,1 ms custa cerca de 9,1% com uma fatia de 1 ms, mas cerca de 0,99% com uma fatia de 10 ms. Fatias mais longas amortizam o custo de troca ao distribuí-lo por mais trabalho útil.

Uma regra prática comum de dimensionamento é permitir que a maioria das rajadas, por exemplo, cerca de 80%, termine em uma fatia. A escolha adequada depende das durações medidas das rajadas e dos atrasos de resposta que a carga de trabalho tolera. Conte as trocas entre tarefas separadamente dos eventos do temporizador que apenas permitem que a mesma única tarefa pronta continue.

Principais conclusões

  • RR coloca novamente na fila uma tarefa pronta que não terminou após seu quantum.
  • A resposta pode melhorar enquanto o tempo médio de retorno cresce.
  • As regras para chegadas no limite da fatia determinam a ordem da fila.
  • Um quantum curto aumenta a sobrecarga de troca.
  • Fatias mais longas amortizam os custos de despacho e de cache.

2.4 Prioridades, envelhecimento e dependências de travas

Um escalonador por prioridade executa a tarefa pronta de maior prioridade. Tarefas de mesma prioridade podem seguir FIFO ou escalonamento circular. Em uma versão preemptiva, uma tarefa recém-pronta de prioridade mais alta recebe a CPU imediatamente; em uma versão não preemptiva, ela espera até que a tarefa atual a libere.

Identifique a direção da escala

Os números de prioridade não seguem uma direção universal. Nos exemplos dos livros apresentados aqui, use números menores para prioridades mais altas. Os valores de nice do Linux seguem essa direção, mas os níveis de prioridade do Windows e as prioridades de tempo real do Linux usam números maiores para prioridades mais altas.

A, B e C chegam em 0 ms com rajadas de 4, 3 e 5 ms e prioridades 2, 1 e 3. O escalonamento não preemptivo por prioridade executa B 0–3, A 3–7 e C 7–12. Seus tempos de espera são 0, 3 e 7 ms, com média de aproximadamente 3,33 ms; os tempos de retorno são 3, 7 e 12 ms, com média de aproximadamente 7,33 ms.

Uma prioridade interna vem de comportamento medido, como uso da CPU ou esperas por entrada e saída. SJF determina a classificação a partir da duração prevista da rajada. Uma prioridade externa vem de uma pessoa, como um administrador que marca um backup como menos urgente. Nenhuma das escolhas garante que trabalho de baixa prioridade receba tempo de CPU quando há uma chegada contínua de trabalho de prioridade mais alta.

Aumente a prioridade com a espera

O envelhecimento aumenta gradualmente a prioridade de uma tarefa em espera. Se a classificação melhora uma posição a cada 100 ms, uma tarefa que começa na prioridade 20 chega à prioridade máxima 0 após 2 s de espera no estado de pronto. Uma classificação mais alta a coloca em competição com o trabalho favorecido; as regras de desempate determinam a vez de cada tarefa com a mesma classificação.

A inanição é a falta de progresso causada pela seleção repetida de outro trabalho. O envelhecimento a combate mudando a classificação ao longo do tempo. Ele tem uma finalidade diferente da previsão da duração de rajadas: uma tarefa longa que espera há muito tempo pode merecer uma vez, embora sua rajada continue longa.

Acompanhe a dependência na inversão de prioridade

Uma tarefa H de alta prioridade pode estar bloqueada por uma trava mantida pela tarefa L de baixa prioridade. Uma tarefa M de prioridade média pode preemptar L. Agora H não pode prosseguir, embora M tenha prioridade menor que H: L precisa executar primeiro para liberar a trava. Essa é a inversão de prioridade.

Com a herança de prioridade, L herda temporariamente a prioridade de H enquanto mantém a trava de que H precisa. M não consegue mais impedir que L use a CPU. L executa, libera a trava e perde a prioridade herdada; H fica pronta e pode executar.

ProblemaCausaResposta do escalonamento
InaniçãoOutro trabalho pronto continua tendo prioridade sobre uma tarefaO envelhecimento aumenta sua classificação com a espera
Inversão de prioridadeTrabalho favorecido espera por quem mantém uma trava e tem classificação mais baixaA herança eleva a prioridade de quem mantém a trava enquanto dura a dependência

Aumentar a própria prioridade de H não libera a trava: H continua bloqueada. O essencial é permitir que a thread capaz de satisfazer a dependência execute. Em 1997, a Mars Pathfinder enfrentou um problema de inversão de prioridade que foi resolvido com a ativação da herança de prioridade.

Principais conclusões

  • Verifique qual direção indica prioridade mais alta.
  • O envelhecimento eleva a prioridade de tarefas em espera para combater a inanição.
  • Uma tarefa bloqueada de alta prioridade não pode executar até que sua dependência seja satisfeita.
  • A herança de prioridade eleva temporariamente a prioridade de quem mantém a trava.
3

Aprenda o comportamento de uma tarefa com filas de realimentação

A próxima rajada de CPU raramente é conhecida de antemão. As filas multinível com realimentação aprendem com o uso da CPU: novas tarefas recebem uma oportunidade inicial, enquanto o processamento contínuo desce para filas com atendimento menos urgente. Acompanhar tanto a fila de cada tarefa quanto a cota consumida explica esse comportamento. Elevações periódicas e contabilização cuidadosa tratam então das duas principais falhas: tarefas que esperam demais e tarefas que cedem a CPU estrategicamente para manter sua classificação.

3.1 Mova tarefas pelas filas de realimentação

As filas multinível com realimentação (MLFQ) combinam prioridades com escalonamento circular. Seu objetivo é aproximar o atendimento de tarefas curtas e manter respostas rápidas para o trabalho interativo sem receber o tempo futuro de execução de cada tarefa. O uso recente da CPU fornece a realimentação.

Aplique as regras das filas

Cada tarefa pronta pertence a uma fila de prioridade. A versão básica com contabilização segue quatro regras:

  1. Escolha a fila de maior prioridade que contenha trabalho pronto.
  2. Nessa fila, alterne as tarefas de mesma prioridade com escalonamento circular.
  3. Coloque uma nova tarefa na fila mais alta.
  4. Rebaixe uma tarefa quando ela consumir sua cota de tempo de CPU no nível atual, contando o uso ao longo de todas as vezes em que executou e das interrupções por entrada e saída.

Um quantum limita uma vez de execução. Uma cota limita o atendimento total em um nível de prioridade. Um nível pode permitir vários quanta antes do rebaixamento. No nível mais baixo, um rebaixamento mantém a tarefa na fila inferior.

Isso dá a uma nova tarefa a chance de terminar rapidamente. Uma tarefa que consome tempo de CPU repetidamente revela uma demanda maior e desce. Uma rajada curta que bloqueia consome pouca cota, então tarefas interativas tendem a permanecer nos níveis superiores por mais tempo.

Acompanhe uma tarefa longa e uma recém-chegada

Use as filas Q2, Q1 e Q0, com Q2 como a mais alta, quanta de 10 ms e cotas de 10 ms em cada nível, sem elevação de prioridade durante este acompanhamento. A precisa de 200 ms e chega em 0 ms. Ela executa em Q2 de 0–10, em Q1 de 10–20 e depois em Q0.

Em 100 ms, A recebeu 100 ms de tempo de CPU. B chega precisando de 20 ms. B entra em Q2 e preempta A, depois executa 100–110 em Q2. Ela consumiu a cota desse nível e desce para Q1. Q1 tem prioridade maior que Q0, onde está A, então B executa 110–120 e termina. A retoma em 120 e conclui seus 100 ms restantes em 220 ms. O tempo de retorno de B é 20 ms, apesar de chegar depois de uma tarefa muito mais longa.

Acompanhe o trabalho restante de A enquanto B executa: ele permanece em 100 ms. O tempo decorrido avança durante o atendimento de B, mas A não recebe atendimento da CPU nesse período.

Separe espera de consumo de CPU

Um editor que executa por 1 ms e espera por entrada usa uma cota de 10 ms ao longo de dez dessas rajadas. O tempo bloqueado não conta na cota de CPU. Com contabilização rigorosa, essas rajadas curtas ainda se somam, então o editor acaba descendo, a menos que uma elevação de prioridade o reinicie primeiro.

Uma regra inicial da MLFQ rebaixava apenas tarefas que usavam um quantum inteiro sem interrupção. Uma tarefa que cedia a CPU pouco antes do fim mantinha sua prioridade. Essa regra tornava o trabalho interativo responsivo, mas também permitia manipulação deliberada. Contar o uso cumulativo de CPU fecha essa brecha.

As filas inferiores executam sempre que nenhuma fila superior tem trabalho pronto. Uma tarefa de prioridade mais alta que está bloqueada não impede que tarefas de prioridade mais baixa usem a CPU. Sob demanda contínua de alta prioridade, o trabalho de prioridade mais baixa precisa de um mecanismo adicional contra a inanição, fornecido por elevações periódicas.

Principais conclusões

  • A MLFQ aprende com o uso observado da CPU, sem conhecer as durações de rajadas futuras.
  • A fila pronta de maior prioridade vence; tarefas de mesma prioridade se alternam.
  • Novas tarefas entram no topo.
  • Quantum e cota controlam partes diferentes do escalonamento.
  • A contabilização cumulativa de CPU inclui o atendimento anterior ao bloqueio de uma tarefa.

3.2 Previna a inanição e a cessão estratégica da CPU

A realimentação cria uma separação útil, mas o comportamento passado de uma tarefa pode deixar de representar suas necessidades atuais. Um cálculo longo pode se tornar interativo mais tarde. Enquanto isso, uma tarefa na fila inferior pode esperar indefinidamente se as filas superiores permanecerem ocupadas.

Reavalie cada tarefa periodicamente

Uma elevação de prioridade move todas as tarefas de volta para a fila mais alta após um período S. Ela permite que tarefas em espera compartilhem a fila superior e que o escalonador aprenda novamente o comportamento alterado. Uma tarefa promovida e limitada por processamento depois consome sua cota e volta a descer.

Considere as primeiras regras da MLFQ: duas tarefas interativas sempre cedem a CPU antes de uma fatia completa de 10 ms e juntas mantêm Q2 ocupada. Uma tarefa limitada por processamento espera em Q0. Sem elevações, ela não recebe atendimento. Em um escalonamento repetitivo no qual uma elevação a cada 100 ms lhe dá uma vez de 10 ms no nível superior antes de ser rebaixada e o trabalho de maior prioridade ocupa o restante, ela recebe 10% da CPU. Essa porcentagem vem deste acompanhamento; uma elevação não atribui uma parcela fixa geral.

Um período de elevação longo deixa esperas longas entre oportunidades. Um período muito curto reinicia repetidamente o trabalho limitado por processamento e enfraquece a vantagem do trabalho interativo. Alguns projetos usaram períodos em torno de um segundo, mas o período é uma escolha de ajuste baseada no comportamento da carga de trabalho e nos objetivos de resposta.

Contabilize o uso entre cessões da CPU

Um problema separado é a manipulação do escalonador. Pela regra inicial da fatia completa, um programa pode executar por 9 ms, solicitar uma operação de entrada e saída de 1 ms e repetir. Ele nunca usa uma fatia inteira de 10 ms de uma vez, então mantém a prioridade máxima enquanto consome quase todo o tempo de CPU disponível.

Com uma cota cumulativa de 10 ms, a primeira rajada consome 9 ms e deixa 1 ms. Após a operação de entrada e saída, mais um milissegundo esgota a cota, e a tarefa é rebaixada durante sua segunda rajada. Uma requisição de entrada e saída muda o estado; ela não apaga o atendimento já recebido. A regra de contabilização impede essa tática mesmo sem uma elevação.

MecanismoO que mudaProblema tratado
Contabilização da cotaSoma o uso de CPU ao longo das vezes de execuçãoCessão estratégica antes do fim da fatia
Elevação periódicaReinicia o aprendizado da prioridadeInanição e mudança de comportamento
Ajuste os níveis

Escolha o número de filas, o quantum de cada fila, a cota de cada nível e o período de elevação. As filas superiores geralmente usam quanta curtos, por exemplo, 10 ms, para alternar rapidamente entre tarefas interativas. Filas inferiores podem usar quanta muito mais longos, às vezes centenas de milissegundos, para reduzir as trocas durante processamento contínuo.

A cota pode crescer independentemente do quantum. Um nível com quantum de 5 ms e cota de 15 ms pode permitir três vezes completas antes do rebaixamento. Aumentar a cota adia a classificação como tarefa de longa duração; aumentar o quantum prolonga uma vez individual.

O projeto de compartilhamento de tempo do Solaris ilustra a realimentação baseada em tabela: sua tabela clássica configurável tem 60 níveis de prioridade, com quanta que vão de aproximadamente 20 ms em alta prioridade até algumas centenas de milissegundos em baixa prioridade. Projetos clássicos do BSD, por sua vez, calculavam a prioridade a partir do uso recente da CPU, que decai ao longo do tempo. Ambos fazem o uso antigo da CPU perder influência, de modo que o histórico distante de uma thread não determina permanentemente seu tratamento.

Principais conclusões

  • Elevações reabrem oportunidades de atendimento e permitem reaprender comportamentos alterados.
  • Uma elevação não concede prioridade alta permanente nem parcela fixa de CPU.
  • A contabilização cumulativa impede a tática de ceder a CPU antes do fim da fatia.
  • Quanta curtos nos níveis superiores favorecem a resposta; quanta mais longos nos inferiores reduzem a sobrecarga.
  • Uma cota pode abranger várias vezes de execução em um nível.
  • A realimentação pode usar tabelas de prioridade ou fórmulas de uso de CPU que decai.
4

Divida o tempo de CPU por parcelas

Um escalonador de parcela justa começa com um direito: quanto da CPU disputada cada tarefa apta a executar deve receber. Bilhetes expressam esse direito no escalonamento por loteria e por passos; pesos o expressam na classe justa do Linux. As regras de seleção diferem em quanto a divisão em intervalos curtos acompanha a divisão pretendida e em como favorecem atendimento rápido. Acompanhe a contabilização para entender por que um peso maior proporciona mais tempo real de CPU enquanto seu progresso virtual cresce mais lentamente.

4.1 Sorteie vezes ponderadas com escalonamento por loteria

O escalonamento por parcela proporcional busca dividir o atendimento da CPU de acordo com parcelas atribuídas. No escalonamento por loteria, cada tarefa apta a executar possui bilhetes. Um bilhete vencedor aleatório escolhe a tarefa para a próxima fatia de igual duração. A chance de uma tarefa vencer é seu número de bilhetes dividido pelo total de bilhetes das tarefas aptas a executar.

Localize um bilhete vencedor

A possui 100 bilhetes, B 50 e C 250. Numere os 400 bilhetes de 0 a 399. A possui 0–99, B possui 100–149 e C possui 150–399. Um sorteio de 300 seleciona C.

Uma implementação baseada em lista sorteia um número e acumula as quantidades de bilhetes. Os totais acumulados são 100 após A, 150 após B e 400 após C. Pare no primeiro total estritamente maior que o número sorteado. Usar “maior ou igual” atribuiria incorretamente os bilhetes nos limites: o número sorteado 100 pertence a B. Colocar primeiro quem possui mais bilhetes reduz o tamanho médio dessa busca na lista.

Diferencie expectativa de garantia

Com A possuindo 75 bilhetes e B 25, a parcela esperada de A é 75%. Em 100 sorteios independentes de fatias iguais com ambas aptas a executar, espera-se que A vença 75 vezes. O desvio padrão é:

100×0,75×0,25≈4,33 fatias.

Um resultado de aproximadamente 71–79 vitórias está a cerca de um desvio padrão da média; não é um intervalo garantido. Execuções curtas podem se afastar bastante da proporção pretendida de 3:1. À medida que o intervalo de observação cresce, a variação aleatória relativa diminui. A loteria proporciona justiça probabilística, não uma divisão exata em um intervalo finito nem uma espera limitada até a próxima vez.

Para duas tarefas com quantidades iguais de bilhetes e demandas iguais de CPU, a métrica de injustiça U divide o instante de conclusão da primeira pelo da última. A razão chega a 1 quando terminam juntas e é menor quando uma termina muito antes. Essa razão entre conclusões é especialmente variável para tarefas curtas escalonadas por loteria.

Distribua bilhetes entre usuários e dependências

A moeda de bilhetes permite que um usuário divida localmente um direito global atribuído. O usuário X tem 200 bilhetes globais e atribui 300 bilhetes locais a X1 e 100 a X2. Dos 400 bilhetes locais, X1 tem três quartos, o que lhe dá 150 bilhetes globais; X2 recebe 50. O usuário Y tem 100 bilhetes globais para Y1. O total é 300, então X1 recebe uma parcela esperada de 50%, X2 cerca de 16,67% e Y1 cerca de 33,33% da CPU disputada.

A transferência de bilhetes empresta temporariamente os bilhetes de um cliente a um servidor que trabalha para ele e depois os devolve quando a requisição termina. Isso acompanha a dependência de trabalho. A inflação de bilhetes permite que tarefas cooperantes aumentem suas próprias quantidades de bilhetes para solicitar mais atendimento. Ela exige confiança ou limites: a inflação sem restrições permite que uma tarefa gananciosa reduza as parcelas de todas as outras.

A loteria precisa dos totais de bilhetes, mas não de um registro de quanto cada tarefa está adiantada em atendimento. Uma nova tarefa simplesmente acrescenta seus bilhetes ao conjunto das tarefas aptas a executar. A atribuição dos bilhetes continua sendo uma escolha de política; o sorteio aleatório implementa essa escolha em termos de expectativa. Os bilhetes de uma tarefa bloqueada não competem por uma fatia que ela não pode usar.

Principais conclusões

  • A fração de bilhetes fornece a chance de uma tarefa vencer cada sorteio.
  • A busca cumulativa para quando o total ultrapassa o número vencedor.
  • As parcelas da loteria são proporções esperadas, com variação no curto prazo.
  • A moeda de bilhetes preserva o direito global de um usuário enquanto o divide localmente.
  • A transferência acompanha uma dependência; a inflação sem restrições pode reduzir as parcelas dos demais.

4.2 Mantenha o atendimento proporcional com valores de passo

O escalonamento por passos transforma parcelas de bilhetes em uma sequência determinística. Cada tarefa apta a executar tem um passo, calculado como uma constante grande dividida por seus bilhetes, e um valor de passagem que registra seu progresso ponderado. Escolha o menor valor de passagem, execute essa tarefa por uma fatia de igual duração e depois some seu passo ao seu valor de passagem.

Calcule os passos

A tem 50 bilhetes, B 25 e C 100. Com a constante 1.000, seus passos são 20, 40 e 10. Mais bilhetes produzem um passo menor. O valor de passagem de uma tarefa favorecida cresce lentamente, então se torna o mínimo com mais frequência.

Comece todos os valores de passagem em zero e resolva empates alfabeticamente. Mantenha a tupla na ordem fixa A, B, C:

Valores de passagem antes da seleçãoTarefa selecionadaValores de passagem após sua fatia
(0, 0, 0)A(20, 0, 0)
(20, 0, 0)B(20, 40, 0)
(20, 40, 0)C(20, 40, 10)
(20, 40, 10)C(20, 40, 20)
(20, 40, 20)A(40, 40, 20)
(40, 40, 20)C(40, 40, 30)
(40, 40, 30)C(40, 40, 40)

Somente o valor de passagem da tarefa selecionada muda. Em sete fatias, A recebe duas vezes, B uma e C quatro: a proporção exata de 50:25:100. No valor de passagem comum de 40, cada uma avançou pela mesma quantidade de atendimento ponderado. Entre esses alinhamentos, as parcelas em intervalos curtos não precisam ser exatas.

Separe atendimento real e progresso virtual

O valor de passagem é um valor de ordenação, não o tempo decorrido nem uma contagem de bilhetes. O passo grande de B faz com que ela espere enquanto A e C alcançam seu valor de passagem. Ela ainda recebe sua parcela pretendida de um sétimo nesse ciclo repetitivo. Somar a quantidade de bilhetes ao valor de passagem inverteria o projeto: a tarefa com mais bilhetes daria o maior salto e seria selecionada com menos frequência.

A constante controla a escala dos passos, não as proporções pretendidas dos bilhetes. Implementações com números inteiros precisam de precisão suficiente para evitar distorcer essas proporções pelo arredondamento. Comparações e atualizações precisam usar uma escala consistente.

Posicione uma recém-chegada de modo adequado

Suponha que tarefas já presentes tenham valores de passagem em torno de 4.000. Uma nova tarefa começando em zero venceria repetidamente enquanto alcançasse as demais, mesmo que tivesse poucos bilhetes. Inicialize seu valor de passagem em relação ao progresso atual do sistema, por exemplo, com o valor mínimo atual, para que ela não acumule atendimento referente ao tempo anterior à sua chegada.

LoteriaPassos
Sorteios aleatórios implementam as parcelas esperadasA seleção pelo menor valor de passagem acompanha o atendimento deterministicamente
Quantidades de bilhetes bastam para a seleçãoCada tarefa precisa de um valor de passagem e de um passo
Uma recém-chegada simplesmente acrescenta bilhetesUma recém-chegada precisa de um valor de passagem inicial adequado

O tempo de execução virtual do Linux usa a ideia relacionada de contabilizar progresso ponderado pelo atendimento real da CPU. Em ambos os projetos, um direito maior faz esse progresso crescer mais lentamente, mantendo a tarefa competitiva para atendimento posterior.

Principais conclusões

  • O passo é a constante comum dividida pelos bilhetes.
  • Selecione o menor valor de passagem e some apenas o passo dessa tarefa.
  • Quantidades maiores de bilhetes fazem os valores de passagem crescerem mais lentamente.
  • Novas tarefas precisam de valores de passagem vinculados ao progresso atual.

4.3 Pesos, tempo de execução virtual e prazos elegíveis

Os escalonadores justos do Linux acompanham o atendimento ponderado de CPU. O escalonador completamente justo (CFS), introduzido no Linux 2.6.23 em 2007, escolhia a tarefa apta a executar com o menor tempo de execução virtual. O Linux começou a substituir essa regra de seleção pelo EEVDF na versão 6.6 em 2023.

Divida o atendimento por peso

Um valor de nice vai de −20, o mais favorecido, a +19, o menos favorecido. Nice 0 tem peso 1024. Cada passo em direção a um valor de nice maior reduz o peso por um fator de aproximadamente 1,25. Exemplos de pesos são 3121 para nice −5, 820 para nice 1, 335 para nice 5, 110 para nice 10 e 15 para nice 19.

Nice 0 contra nice 1 resulta em 10241024+820≈0,555, aproximadamente 55,5% contra 44,5%. As parcelas dependem aproximadamente da diferença entre os valores de nice: 3121/1024 e 335/110 são ambos aproximadamente 3,05. Nice +19 competindo com nice 0 ainda recebe cerca de 1,4% nesse modelo simples de duas tarefas.

O CFS clássico distribui uma latência de escalonamento alvo por peso:

fatiak=wk∑iwi×lateˆncia

Para pesos 1024, 1024 e 335, o total é 2383. Um período alvo de 48 ms dá aproximadamente 20,63 ms a cada tarefa de peso maior e 6,75 ms à de peso menor. Esses parâmetros são ilustrativos, não padrões universais do núcleo. Com quatro tarefas iguais, 48 ms dão 12 ms a cada uma. Com dez, 4,8 ms para cada uma ficaria abaixo de uma granularidade mínima ilustrativa de 6 ms, então o período precisa crescer.

Contabilize o progresso virtual

O CFS aumenta o tempo de execução virtual de uma tarefa em execução em:

Δv=1024w×Δt

Uma tarefa de peso 1024 ganha um milissegundo virtual por milissegundo real. Uma tarefa de peso 335 ganha aproximadamente 3,06. Contabilizar mais rapidamente as tarefas de menor peso faz com que esperem mais cedo, enquanto tarefas de maior peso recebem mais atendimento real.

O CFS clássico ordena as tarefas aptas a executar que estão na fila em uma árvore rubro-negra pelo tempo de execução virtual. Inserção e remoção têm custo de tempo logarítmico; um ponteiro armazenado para o nó mais à esquerda permite encontrar o mínimo em tempo constante. Tarefas bloqueadas saem dessa árvore de tarefas aptas a executar. O posicionamento ao despertar impede que uma longa suspensão anterior se transforme em uma reivindicação ilimitada de atendimento para recuperar o tempo.

Escolha entre tarefas elegíveis com EEVDF

O primeiro prazo virtual elegível mantém pesos e a contabilização do atendimento virtual. Uma tarefa tem defasagem de serviço positiva quando ainda lhe é devido atendimento e negativa quando recebeu mais que seu direito. Tarefas com defasagem não negativa são elegíveis. O EEVDF seleciona a tarefa elegível com o prazo virtual mais próximo.

O prazo combina o início virtual de uma requisição com sua duração de atendimento solicitada, ajustada ao tempo virtual. É um valor de ordenação do atendimento, não uma promessa de horário real de conclusão. Uma fatia solicitada mais curta pode dar a uma tarefa elegível um prazo mais próximo e melhorar a latência sem aumentar sua parcela de longo prazo determinada pelo peso. O Linux atual oferece suporte a solicitações de fatia por meio de sched_setattr().

Seleção do CFS clássicoSeleção do EEVDF
Menor tempo de execução virtualPrazo virtual mais próximo entre as tarefas elegíveis

Principais conclusões

  • Valores de nice determinam pesos relativos para atendimento normal na classe justa.
  • O tempo de execução virtual cresce inversamente ao peso.
  • O CFS clássico usa o menor tempo de execução virtual e um ponteiro armazenado para o mínimo da árvore.
  • A granularidade mínima pode estender o período do CFS clássico.
  • O EEVDF primeiro verifica a elegibilidade e depois compara os prazos virtuais.
  • Requisições mais curtas no EEVDF alteram a latência, enquanto os pesos determinam as parcelas.
5

Distribua o trabalho entre várias CPUs

Várias CPUs criam mais oportunidades para executar trabalho, mas agora a distribuição afeta o custo de cada escolha. Uma thread pode encontrar dados já carregados nos caches de um núcleo e memória distante em outro. As filas de tarefas prontas também precisam permitir decisões simultâneas sem corromper o estado compartilhado. Compare uma fila compartilhada com filas separadas por CPU e depois pondere o benefício de equilibrar o trabalho em relação ao custo de movê-lo.

5.1 Considere os caches e a topologia das CPUs

Várias CPUs só ajudam quando há trabalho paralelo. Uma única thread executa em uma CPU lógica por vez; várias threads ou programas independentes podem usar várias CPUs juntos. Um escalonador precisa escolher tanto qual tarefa executa quanto onde ela executa.

Compartilhe a responsabilidade pelo escalonamento

No multiprocessamento simétrico (SMP), as CPUs executam código do núcleo e tomam suas próprias decisões de escalonamento. No multiprocessamento assimétrico, um processador principal coordena o escalonamento enquanto os demais executam o trabalho atribuído. O controle central é mais simples, mas o processador principal pode se tornar um gargalo. Sistemas de uso geral usam SMP.

Decisões simultâneas exigem coordenação. Se duas CPUs removem tarefas de uma fila compartilhada de prontos, suas atualizações precisam ser sincronizadas para que nenhuma entrada seja perdida nem a mesma tarefa da fila seja selecionada duas vezes. Mais CPUs podem aumentar a contenção por essa estrutura compartilhada.

Preserve o conteúdo útil dos caches

Os núcleos têm caches pequenos e rápidos, normalmente caches L1 e L2 privados e um L3 maior compartilhado por vários núcleos. Localidade temporal significa reutilizar dados acessados recentemente. Localidade espacial significa acessar dados próximos, como elementos consecutivos de um vetor.

Uma thread de ordenação no núcleo 0 preenche seus caches e sua TLB. Se ela retomar nesse núcleo após uma breve preempção, muitas entradas necessárias ainda podem estar presentes. No núcleo 3, ela pode precisar buscar os mesmos dados novamente em um cache compartilhado ou na memória. Afinidade de cache é a tendência do escalonador de manter uma thread próxima da CPU que ela usou recentemente. O benefício exato depende do que permanece em cache e da topologia de compartilhamento dos caches.

Separe coerência de sincronização

A coerência de cache impede que núcleos usem indefinidamente cópias conflitantes armazenadas em cache de uma única posição de memória. O monitoramento do barramento é uma ideia de implementação: caches observam o tráfego e invalidam ou atualizam cópias quando outro núcleo escreve. Sistemas maiores podem usar outros mecanismos de coerência.

A coerência não transforma várias instruções em uma operação atômica. Se duas CPUs leem o tamanho de uma fila, alteram entradas e escrevem o tamanho de volta, leituras e escritas individuais coerentes ainda permitem intercalações prejudiciais. O escalonador precisa de travas ou outro método de sincronização para toda a atualização. A própria linha de cache compartilhada de uma trava pode se mover entre núcleos à medida que competem por ela.

Interprete a organização do hardware
Característica do hardwareO que o escalonador precisa considerar
Multithreading simultâneo (SMT)CPUs lógicas em um núcleo compartilham unidades de execução e caches
Acesso não uniforme à memória (NUMA)A memória próxima a um soquete pode ser acessada mais rapidamente que a memória remota
Núcleos heterogêneosNúcleos de desempenho e de eficiência oferecem diferentes relações entre velocidade e energia

A Intel chama sua implementação de SMT de Hyper-Threading. Duas threads ocupadas em CPUs lógicas do mesmo núcleo competem pelos recursos desse núcleo; duas CPUs lógicas não equivalem a dois núcleos físicos independentes. Uma migração em NUMA também pode afastar o processamento da memória que ele usa, mesmo quando o preenchimento do cache é rápido.

Mover uma thread para uma CPU ociosa pode eliminar um longo atraso na fila. Mantê-la no lugar pode preservar a localidade. Compare esses custos usando a carga de trabalho real: afinidade é uma preferência de desempenho, enquanto uma máscara de afinidade explícita restringe quais CPUs são permitidas.

Principais conclusões

  • A aceleração paralela exige várias threads ou programas aptos a executar.
  • SMP permite que várias CPUs tomem decisões de escalonamento.
  • A afinidade de cache preserva dados e traduções usados recentemente.
  • A coerência não torna atômica uma atualização com várias etapas.
  • SMT, NUMA e tipos de núcleo diferentes afetam os custos de distribuição.

5.2 Equilibre o trabalho sem movê-lo constantemente

Um escalonador multiprocessador precisa de um lugar para manter o trabalho pronto. Uma fila compartilhada facilita encontrar trabalho. Filas separadas por CPU reduzem a contenção compartilhada e preservam a distribuição, mas podem deixar uma CPU sobrecarregada enquanto outra está ociosa.

Compare projetos de filas
ProjetoPrincipal vantagemPrincipal custo
Fila única (SQMS)Qualquer CPU ociosa elegível pode pegar trabalho em esperaContenção na fila e menor afinidade de cache
Múltiplas filas (MQMS)Decisões locais escalam e mantêm a afinidadeO desequilíbrio de carga exige correção ativa

No escalonamento multiprocessador com fila única, todas as CPUs retiram trabalho de uma fila compartilhada. Se as tarefas podem executar em todas as CPUs, o trabalho em espera naturalmente ocupa uma CPU ociosa. Uma trava compartilhada protege a fila, então aumentar o número de CPUs pode transformar essa trava em um gargalo.

Com cinco tarefas A–E em escalonamento circular em quatro CPUs, uma sequência atribui A, B, C, D na primeira rodada; E, A, B, C na segunda; e D, E, A, B na terceira. A executa na CPU 0, depois na 1 e depois na 2. A máquina permanece ocupada, mas A troca repetidamente de caches privados. Regras de afinidade podem manter a maior parte da distribuição enquanto movem tarefas selecionadas para equilibrar o trabalho.

Observe parcelas desiguais

No escalonamento multiprocessador com múltiplas filas, cada CPU escalona sua própria fila. Suponha que a CPU 0 tenha A e C e a CPU 1 tenha B e D, todas limitadas por processamento e compartilhando localmente em escalonamento circular. Inicialmente cada tarefa recebe metade de uma CPU. Quando C termina, A recebe toda a CPU 0 enquanto B e D ainda recebem metade da CPU 1 cada uma.

A máquina continua plenamente utilizada, mas as tarefas deixam de receber parcelas iguais. Se A também terminar, a CPU 0 fica ociosa embora B e D estejam prontas. Mover uma delas para a CPU 0 dá uma CPU inteira a ambas e usa capacidade antes ociosa.

Com três tarefas iguais limitadas por processamento e duas CPUs, o atendimento igual no longo prazo é de dois terços de uma CPU por tarefa. Uma distribuição fixa deixa uma tarefa sozinha e duas compartilhando. Alternar periodicamente qual tarefa fica sozinha pode aproximar a divisão igual. Nenhuma thread executa nas duas CPUs ao mesmo tempo.

Decida quando migrar

A migração move uma tarefa para a fila de outra CPU. O roubo de trabalho é uma estratégia de busca: uma CPU com pouco trabalho examina a fila de uma CPU mais ocupada e retira trabalho dela. Verificações frequentes criam tráfego de sincronização; verificações raras deixam o desequilíbrio sem solução. O roubo também precisa respeitar a elegibilidade das CPUs e a localidade da memória.

Compare o tempo de espera que se espera economizar com o custo da migração. Uma fila longa em uma CPU e uma CPU compatível ociosa criam um forte motivo para mover uma tarefa. Uma pequena diferença temporária entre filas pode desaparecer antes que os custos de preencher os caches sejam recuperados.

Os projetos O(1) e CFS do Linux usavam filas de tarefas prontas por CPU; o Linux equilibra a carga entre domínios de escalonamento do hardware, considerando núcleos compartilhados e soquetes. O BF Scheduler, uma alternativa, usava uma fila única. Usuários podem restringir a distribuição com taskset ou sched_setaffinity() no Linux e SetThreadAffinityMask() no Windows. Uma máscara de afinidade restrita pode explicar por que uma tarefa pronta não usa uma CPU que parece ociosa.

Principais conclusões

  • Uma fila compartilhada facilita encontrar trabalho em espera, mas precisa de sincronização compartilhada.
  • Filas por CPU preservam a localidade e reduzem a contenção.
  • A utilização total da CPU pode coexistir com parcelas desiguais por tarefa.
  • A migração corrige desequilíbrios com custos de cache e coordenação.
  • O roubo de trabalho puxa tarefas para CPUs com capacidade disponível.
  • Restrições de afinidade limitam quais CPUs ociosas podem receber uma tarefa.
6

Interprete configurações do sistema e avalie uma política

Escalonadores reais combinam várias ideias: classes de prioridade, parcelas ponderadas, realimentação após esperas e distribuição entre CPUs. Uma configuração pode mudar a precedência, a parcela ou a distribuição permitida, então identifique qual controle você está analisando antes de prever seu efeito. Linux e Windows fornecem exemplos concretos. Para escolher uma política, relacione esses mecanismos a uma carga de trabalho e teste tanto os resultados médios quanto os atrasos enfrentados pelas tarefas menos favorecidas.

6.1 Use os controles de escalonamento do Linux

O Linux escalona threads, chamadas de tarefas no núcleo. A política de escalonamento, o valor de nice, os controles de grupo e a afinidade de CPU de uma tarefa respondem a perguntas diferentes sobre quando e onde ela executa.

Examine primeiro a política
PolíticaComportamento de seleção
SCHED_OTHER e SCHED_BATCHAtendimento normal da classe justa, ponderado por nice
SCHED_IDLETrabalho normal de prioridade extremamente baixa; nice não o afeta
SCHED_FIFOPrioridade de tempo real, sem quantum entre tarefas de mesma prioridade
SCHED_RRPrioridade de tempo real, alternando tarefas de mesma prioridade por quantum
SCHED_DEADLINEAtendimento da classe de prazo, acima das outras classes

As políticas normais têm prioridade estática 0. FIFO e RR de tempo real usam 1–99, em que 99 é a mais alta. Uma tarefa FIFO continua até bloquear, ceder a CPU ou ser preemptada por trabalho de prioridade mais alta. RR acrescenta alternância entre tarefas de mesma prioridade; sched_rr_get_interval() informa seu quantum. Esses nomes descrevem políticas do Linux: o escalonamento justo normal não é o algoritmo RR de fatias iguais dos livros.

Altere parcelas e distribuição

Nice vai de −20 a +19, com padrão 0. Valores maiores reduzem o peso na classe justa, por um fator de aproximadamente 1,25 por passo. Em uma inicialização típica com nice 0, nice -n 10 make inicia uma compilação com nice 10; -n é um ajuste ao valor de nice herdado. renice -n 5 -p 4321 define o processo indicado com nice 5. Um usuário pode tornar seu próprio trabalho menos favorecido; aumentar a prioridade exige privilégio adequado ou um limite de recursos que o permita.

taskset -c 0,1 ./app permite que um programa execute nas CPUs 0 e 1. Ele não cria uma segunda thread nem promete qualquer uma das CPUs exclusivamente. ps -o pid,cls,ni,rtprio,comm mostra campos relacionados à política, enquanto top ajuda a observar prioridade, nice e consumo de CPU.

chrt -f 50 ./app seleciona a prioridade de tempo real FIFO 50. Use configurações de tempo real apenas em um ambiente controlado: uma thread ocupada de alta prioridade pode atrasar o interpretador de comandos e o trabalho essencial do sistema. Os limites padrão de tempo de CPU para tarefas de tempo real reservam algum tempo para trabalho normal, mas não garantem que toda carga desse tipo responda rapidamente. A precedência altera o acesso ao atendimento da CPU, não a velocidade de uma instrução.

Diferencie peso de grupo de cota

No cgroup v2, cpu.weight vai de 1 a 10000, com padrão 100, e divide a capacidade disputada da CPU na classe justa entre grupos ativos do mesmo nível. Pesos 200 e 100 dão aproximadamente dois terços e um terço de uma CPU quando ambos os grupos estão ocupados. Se o segundo ficar ocioso, o primeiro poderá usar toda a capacidade disponível.

cpu.max define um limite de tempo de CPU. O valor “50000 100000” permite 50 ms de tempo agregado de CPU por período de 100 ms, equivalente a metade de uma CPU em média. Várias threads podem consumir esse orçamento em paralelo e esgotá-lo mais cedo no tempo decorrido. Um grupo sujeito a limite pode ter seu uso restringido mesmo quando há capacidade de CPU disponível.

Situe os nomes na história

O escalonador O(1) do Linux 2.6.0 usava vetores de prioridade e realimentação de interatividade. O CFS chegou na versão 2.6.23 em 2007. O Linux 6.6 em 2023 começou a transição para a seleção EEVDF na classe justa. Desde o Linux 6.12 em 2024, sched_ext oferece suporte a políticas de escalonamento BPF carregadas dinamicamente em núcleos configurados para isso. Se esse escalonador falhar ou impedir o progresso de tarefas aptas a executar, o núcleo restaura o escalonamento interno.

Principais conclusões

  • A classe de política determina a precedência antes da interpretação de nice.
  • Nice ajusta a parcela relativa na classe justa; a afinidade restringe as CPUs permitidas.
  • SCHED_IDLE ignora nice.
  • Um peso de cgroup divide a capacidade disputada; uma cota limita o atendimento agregado de CPU.
  • O EEVDF altera a seleção na classe justa, enquanto sched_ext oferece suporte a políticas substituíveis.

6.2 Acompanhe as prioridades e a realimentação do Windows

O Windows escalona threads prontas por prioridade de 0 a 31, com números maiores indicando prioridades mais altas. Threads prontas de mesma prioridade se alternam em escalonamento circular. Uma thread recém-pronta de prioridade mais alta preempta uma de prioridade mais baixa sem esperar o fim de seu quantum. A prioridade 0 pertence à thread de zeragem de páginas, que preenche com zeros as páginas livres.

Encontre a prioridade base a partir de duas configurações

A prioridade base de uma thread depende da classe de prioridade de seu processo e de seu próprio nível relativo de thread. As classes de processo são Idle, Below normal, Normal, Above normal, High e Realtime. Os níveis de thread incluem Idle, Lowest, Below normal, Normal, Above normal, Highest e Time critical.

Classe do processoNível da threadPrioridade base
NormalNormal8
NormalHighest10
HighNormal13
RealtimeNormal24

Time critical resulta em 15 fora da classe Realtime e em 31 dentro dela. O nível de thread Idle resulta em 1 fora de Realtime e em 16 dentro dela. Esses níveis extremos são entradas especiais da tabela, então somar um deslocamento fixo a cada classe produziria resultados errados.

Acompanhe uma elevação temporária

As prioridades 1–15 são a faixa variável; 16–31 são a faixa de tempo real. Uma thread começa com prioridade dinâmica igual à prioridade base. Para threads na faixa variável, eventos como entrada ou conclusão de uma espera podem elevar temporariamente a prioridade dinâmica. Threads com prioridades base de tempo real não recebem essas elevações.

Suponha que uma thread com prioridade base 8 seja elevada a 14. Se ela continuar processando, sua prioridade dinâmica cai um nível após cada quantum completo: 13 após o primeiro, 12 após o segundo e 8 após o sexto. A elevação não muda permanentemente a prioridade base e não decai abaixo dela.

Isso é realimentação: trabalho recém-desbloqueado recebe atendimento rápido, enquanto o uso contínuo de CPU perde a vantagem temporária. O Windows também usa elevações temporárias para threads prontas que esperam há muito tempo, a fim de combater a inanição. Essa elevação pode ajudar quem mantém uma trava e tem classificação baixa a progredir, mas é um mecanismo diferente da herança de prioridade específica de uma trava.

Reconheça projetos relacionados

A classe de compartilhamento de tempo do Solaris é um projeto de MLFQ orientado por tabela. O ULE do FreeBSD usa filas de tarefas prontas por CPU e compara o comportamento de suspensão com o de execução para identificar threads interativas. Esses sistemas compartilham a ideia de adaptar o atendimento ao comportamento observado sem usar regras de filas idênticas.

O macOS oferece classes de qualidade de serviço (QoS), incluindo interativa para o usuário, iniciada pelo usuário, padrão, utilitária e em segundo plano. Elas descrevem a urgência do trabalho. Em Apple silicon, a QoS ajuda o sistema a distribuir o trabalho entre núcleos de desempenho e de eficiência. Os programas comunicam a importância do trabalho; o sistema operacional escolhe a distribuição de acordo com a política e o hardware disponível.

Escalonadores reais combinam realimentação, prioridades, justiça e afinidade. Uma classe Realtime do Windows tem precedência maior, mas não garante cálculos mais rápidos nem correção completa de tempo real.

Principais conclusões

  • Os números de prioridade do Windows aumentam com a precedência.
  • A prioridade base combina a classe do processo com o nível relativo da thread.
  • Elevações na faixa variável decaem um nível por quantum completo até a base.
  • Prioridades base de tempo real não recebem elevações dinâmicas.
  • Solaris, ULE e macOS usam ideias relacionadas com mecanismos diferentes.
  • A QoS comunica a urgência do trabalho e ajuda a orientar sua distribuição.

6.3 Escolha uma política e teste suas consequências

Escolha o objetivo da carga de trabalho antes de escolher um escalonador. Uma fila de tarefas em lote pode valorizar a conclusão rápida de muitas tarefas pequenas. Um editor precisa de atendimento rápido após uma entrada. Um servidor compartilhado precisa de uma distribuição justificável entre usuários ou grupos.

Associe o mecanismo ao objetivo
Necessidade da carga de trabalhoMecanismo adequadoEscolha de compromisso a examinar
Baixo tempo médio de retorno em loteSJF ou STCF com rajadas conhecidas ou previstasErro de previsão e inanição
Atendimento interativo rápidoPreempção com realimentação ou seleção justa sensível à latênciaCusto de troca e atrasos na cauda
Acesso proporcional entre usuáriosBilhetes, passos ou pesos de grupoJustiça em intervalos curtos e distribuição entre grupos
Cálculo longo limitado por processamentoAtendimento suficiente por vez para amortizar as trocasRapidez de resposta do trabalho concorrente
Trabalho com dispositivos e prazo críticoPolíticas de tempo real adequadasInterferência em outras tarefas
Compare políticas com entradas idênticas

A chega em 0 ms precisando de 8 ms, B em 1 ms precisando de 4 ms e C em 2 ms precisando de 2 ms. Ignore o custo de troca. FIFO executa A, B, C. SJF também começa por A, mas depois executa C antes de B. STCF executa A 0–1, B 1–2, C 2–4, B 4–7, A 7–14. RR usa um quantum de 2 ms, com chegadas no limite da fatia entrando na fila antes da tarefa cuja fatia terminou.

PolíticaTempo médio de retornoTempo médio de resposta até a primeira execução
FIFO10,33 ms5,67 ms
SJF9,67 ms5 ms
STCF7,33 ms0 ms
RR9 ms1 ms

STCF vence nas duas métricas nessa carga porque cada tarefa mais curta recém-chegada executa imediatamente. RR proporciona um início rápido sem conhecer as durações das rajadas. Com tarefas de mesma duração que chegam simultaneamente, FIFO pode ter menor tempo médio de retorno que RR. Uma classificação em uma carga de trabalho é uma evidência sobre essa carga.

Escolha um método de avaliação

A modelagem determinística calcula manualmente uma sequência fixa. Ela fornece resultados exatos para suas entradas e facilita a análise das decisões, mas frequentemente deixa de fora os custos de despacho e de cache. Modelos de filas descrevem padrões de chegada e atendimento usando distribuições e preveem o comportamento médio.

Para um sistema estável em regime permanente, a lei de Little relaciona a população média n, a taxa de chegada λ e o tempo médio de permanência W:

n=λW

Com 14 tarefas/s e tempo médio de 0,5 s no sistema, a população média é de 7 tarefas. Mantenha o limite de observação consistente: a população da fila de prontos exige o tempo de espera nessa fila, enquanto a população de todo o sistema exige o tempo em todo o sistema. Converta as unidades antes de multiplicar.

A simulação executa um modelo de escalonador, frequentemente com um registro de carga de trabalho. Ela pode testar padrões complexos de chegada e bloqueio, mas suas conclusões dependem do modelo e dos registros escolhidos. A implementação avalia o escalonador em um sistema operacional real e inclui a sobrecarga efetiva; exige mais esforço e ainda precisa de cargas representativas e medições reproduzíveis.

Examine vazão, utilização, atrasos individuais e na cauda, justiça e consumo de energia junto com as médias. Em um multiprocessador, uma máquina ocupada ainda pode dividir o atendimento de forma desigual ou desperdiçar tempo preenchendo caches novamente. Compare políticas usando o mesmo intervalo de observação e a mesma carga de trabalho e depois varie as características da carga que importam para os usuários pretendidos.

Principais conclusões

  • Escolha métricas que correspondam às necessidades reais da carga de trabalho.
  • Compare políticas com chegadas e demandas de CPU idênticas.
  • Uma classificação específica de uma carga de trabalho não estabelece um vencedor universal.
  • A lei de Little exige um sistema estável e limites correspondentes para população e tempo.
  • A simulação depende do modelo; a implementação inclui a sobrecarga real.
  • Avalie atrasos na cauda, justiça, vazão e energia junto com as médias.

Exercícios resolvidos de Escalonamento de CPU

6 Lições Interativas

1

Dos estados de pronto aos atrasos medidos

11 passos
Acompanhe uma decisão de escalonamento e depois extraia os tempos de resposta, de espera e de retorno de uma linha do tempo.
  1. 1
    IntroduçãoAcompanhe a transferência da CPU

    Uma tarefa em execução inicia uma leitura de disco enquanto outra tarefa está pronta. O sistema operacional pode usar esse período de espera para avançar outro trabalho. Vamos acompanhar primeiro as mudanças de estado (uma tarefa está pronta, em execução ou bloqueada) e depois interpretar uma curta linha do tempo da CPU para medir o que cada tarefa experimentou: resposta, espera e tempo de retorno.

    Mantenha duas perguntas separadas enquanto trabalha: quem pode executar agora e qual atraso uma métrica deve contar? Uma tarefa pode ter uma primeira vez rápida, mas ainda terminar muito mais tarde.

  2. 2
    ExplicaçãoEscolha entre tarefas que podem executar

    O escalonador seleciona trabalho pronto. Uma tarefa em execução já tem uma CPU; uma tarefa bloqueada precisa esperar por seu evento. Quando a leitura começa, quem a solicitou fica bloqueado e libera a CPU. Quando a leitura termina, volta a ficar pronto.

    A leitura concluída cria uma oportunidade de seleção. Se a tarefa que retorna executa imediatamente depende da política e de outro trabalho pronto.

  3. 3
    ConexãoSepare a escolha da troca

    A política escolhe a próxima tarefa pronta. O despachante salva o estado anterior, restaura o estado escolhido e retoma a execução. Sua latência e o preenchimento dos caches pela próxima tarefa custam tempo.

    Um temporizador pode devolver o controle ao núcleo mesmo quando um programa nunca cede a CPU. Uma interrupção de dispositivo também pode deixar pronto trabalho favorecido. A preempção preserva a tarefa interrompida para uma vez posterior.

  4. 4
    DesafioO editor em espera pode preemptar?

    Um editor está bloqueado à espera de entrada enquanto uma tarefa limitada por processamento executa. O editor tem prioridade mais alta. Ele pode tomar a CPU antes de a entrada chegar? Explique qual estado importa.

    ---reveal---

    Não. O editor está bloqueado e não pode executar até que seu evento de entrada ocorra. Depois que a entrada o deixar pronto, um escalonador preemptivo por prioridade poderá escolhê-lo. A prioridade classifica o trabalho pronto; ela não elimina a dependência do evento.

  5. 5
    ExemploDesenhe os intervalos de atendimento

    A chega em 0 ms precisando de 5 ms, B em 2 ms precisando de 3 ms e C em 4 ms precisando de 1 ms. São tarefas que usam apenas a CPU. FIFO sem custo de troca executa A 0–5, B 5–8 e depois C 8–9.

    Registre os instantes de primeira execução 0, 5 e 8 ms e os instantes de conclusão 5, 8 e 9 ms. Esses são instantes. Em seguida, subtraímos a chegada de cada tarefa para transformá-los em atrasos.

  6. 6
    ExemploMeça o atraso até a conclusão

    O tempo de retorno vai da chegada até a conclusão. Na linha do tempo, o retorno de A é 5 ms, o de B é 6 ms e o de C é 5 ms.

    A média é:

    (5+6+5)/3=16/3≈5,33 ms.

    O instante de conclusão de B é 8 ms, mas ela esteve no sistema por apenas 6 ms porque chegou em 2 ms. Medir todas as tarefas desde o começo do gráfico superestimaria os atrasos das chegadas posteriores.

  7. 7
    ExemploMeça a primeira vez e a espera total

    O tempo de resposta termina quando a tarefa executa pela primeira vez. A espera 0 ms por essa primeira vez, B espera 3 ms e C espera 4 ms. O tempo médio de resposta é aproximadamente 2,33 ms.

    Aqui a resposta é igual à espera total porque cada tarefa que usa apenas a CPU executa sem interrupção depois de selecionada. Com preempção, intervalos posteriores no estado de pronto também contam como espera. Um intervalo bloqueado por entrada e saída conta para o retorno, mas não para a espera na fila de prontos.

  8. 8
    DesafioCalcule os atrasos de uma tarefa preemptada

    A tarefa R chega em 1 ms, executa pela primeira vez em 4 ms e termina em 15 ms. Ela usa 6 ms de CPU sem entrada e saída. Encontre os tempos de resposta, de retorno e de espera.

    ---reveal---

    O tempo de resposta é 3 ms e o de retorno é 14 ms. Subtrair 6 ms de atendimento do retorno resulta em 8 ms de espera total. Os 3 ms iniciais são apenas parte dessa espera; outros 5 ms ocorrem após a primeira vez de execução.

  9. 9
    Ideia-chaveAvalie a máquina e o indivíduo

    Nossa sequência FIFO conclui três tarefas em 9 ms sem tempo ocioso. Sua vazão é aproximadamente 333,33 tarefas/s e sua utilização da CPU é 100% nesse intervalo. Esses valores para toda a máquina não descrevem a experiência de cada tarefa.

    Examine atrasos individuais e um percentil alto quando os usuários se importam com esperas longas e raras. A justiça também considera se o trabalho pronto recebe atendimento, incluindo tarefas escondidas por uma média favorável.

  10. 10
    DesafioUse corretamente um intervalo bloqueado

    Uma tarefa chega em 0 ms, executa 0–2, espera por um dispositivo 2–7, espera no estado de pronto 7–10 e executa 10–12 até terminar. Quais são seus tempos de resposta e de espera?

    ---reveal---

    O tempo de resposta é 0 ms porque a tarefa executa imediatamente. O tempo de espera é 3 ms, o intervalo de pronto 7–10. Seu tempo de retorno de 12 ms também contém 4 ms de CPU e 5 ms bloqueada. Chamar todos os 8 ms fora da execução na CPU de “espera” misturaria dois estados do processo.

  11. 11
    RecapitulaçãoVerifique o estado antes de contar o tempo

    Para uma nova sequência, identifique o trabalho pronto em cada evento, registre os intervalos de atendimento e depois extraia os instantes de primeira execução e de conclusão. Subtraia as chegadas antes de calcular as médias. Mantenha o tempo bloqueado separado ao medir a espera na fila de prontos.

2

Construa escalonamentos a partir da regra da política

17 passos
Compare regras de seleção, preempções, vezes de execução no escalonamento circular e dependências de prioridade por meio de linhas do tempo resolvidas.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoUma carga de trabalho, várias escolhas
  2. 2
    ExemploComece pela ordem de chegada
  3. 3
    ExemploDeixe o trabalho curto terminar primeiro
  4. 4
    DesafioPreveja a próxima rajada
  5. 5
    ExemploInterrompa a tarefa longa para uma chegada mais curta
  6. 6
    ExemploConclua o trabalho restante
  7. 7
    DesafioCompare com o que resta
  8. 8
    ConexãoUse o bloqueio para liberar capacidade
  9. 9
    ExemploAlterne duas tarefas iguais
  10. 10
    ExemploCalcule a conclusão com alternância
  11. 11
    DesafioPosicione uma chegada no limite da fatia
  12. 12
    Ideia-chaveConsidere o custo de cada transferência
  13. 13
    ExemploInterprete a classificação antes da execução
  14. 14
    ExemploAcompanhe quem mantém a trava
  15. 15
    DesafioEscolha a mudança útil de prioridade
  16. 16
    DesafioEscolha entre resposta e conclusão
  17. 17
    RecapitulaçãoTransforme uma regra em uma linha do tempo
3

Acompanhe a realimentação e identifique a manipulação

12 passos
Acompanhe uma tarefa pelos níveis de filas e depois corrija a cessão estratégica da CPU e as longas esperas com contabilização e elevações de prioridade.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoAprenda sem conhecer a duração futura da rajada
  2. 2
    ExplicaçãoUse uma fila e dois limites de atendimento
  3. 3
    ExemploDeixe o uso contínuo da CPU levar a tarefa para baixo
  4. 4
    ExemploDê à recém-chegada sua oportunidade inicial
  5. 5
    DesafioPreserve uma cota interrompida
  6. 6
    ExemploRevele a brecha da cessão antecipada
  7. 7
    ExemploMantenha o histórico de atendimento
  8. 8
    DesafioConte apenas o consumo de CPU
  9. 9
    ExplicaçãoDê uma nova oportunidade ao trabalho antigo
  10. 10
    DesafioSepare as duas correções
  11. 11
    ConexãoAjuste as vezes de execução separadamente da classificação
  12. 12
    RecapitulaçãoAcompanhe as evidências que mudam a prioridade
4

Contabilize o atendimento proporcional de CPU

16 passos
Transforme bilhetes em probabilidades e passos e depois acompanhe o progresso virtual ponderado e a elegibilidade no EEVDF.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoComece com um direito
  2. 2
    ExemploInterprete os intervalos de bilhetes
  3. 3
    Ideia-chaveEspere variação em intervalos curtos
  4. 4
    DesafioConverta uma distribuição local
  5. 5
    ConexãoDeixe um serviço herdar o direito do cliente
  6. 6
    ExemploCalcule passos inversos à quantidade de bilhetes
  7. 7
    ExemploReúna novamente os progressos ponderados
  8. 8
    DesafioPosicione uma nova tarefa no escalonamento por passos
  9. 9
    ExplicaçãoContabilize o atendimento real em unidades virtuais
  10. 10
    ExemploDivida um período alvo
  11. 11
    DicaInterprete nice como entrada para o peso
  12. 12
    ConexãoEncontre o mínimo com eficiência
  13. 13
    ExplicaçãoFiltre a elegibilidade antes dos prazos
  14. 14
    DesafioAplique as duas comparações do EEVDF
  15. 15
    DesafioPreserve a parcela ao mudar o tamanho da requisição
  16. 16
    RecapitulaçãoSepare a distribuição da seleção
5

Equilibre a carga da CPU mantendo a localidade útil

11 passos
Examine custos de hardware, compare projetos de filas e decida quando mover trabalho pronto ajuda.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoUma segunda CPU acrescenta uma escolha de distribuição
  2. 2
    ExplicaçãoReconheça o paralelismo disponível
  3. 3
    ExemploMantenha um conjunto de trabalho usado recentemente
  4. 4
    DesafioA coerência protege toda a atualização?
  5. 5
    ExplicaçãoEscolha uma organização de filas
  6. 6
    ExemploIdentifique atendimento desigual em CPUs ocupadas
  7. 7
    ExemploAlterne a distribuição para igualar o atendimento
  8. 8
    DesafioUse uma CPU ociosa quando permitido
  9. 9
    Ideia-chavePondere o custo de recuperação em relação ao atraso economizado
  10. 10
    DesafioDecida se a mudança economiza tempo
  11. 11
    RecapitulaçãoVerifique capacidade, elegibilidade e localidade
6

Interprete os controles do sistema e avalie um escalonador

15 passos
Interprete o comportamento do Linux e do Windows e depois escolha um limite de medição e avalie as evidências.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoInterprete cada controle em sua própria camada
  2. 2
    ExplicaçãoVerifique a classe de política do Linux
  3. 3
    ExemploDiferencie parcela de distribuição
  4. 4
    ExemploAplique pesos de grupo sob competição
  5. 5
    DesafioInterprete uma cota agregada
  6. 6
    ConexãoReconheça a geração do escalonador
  7. 7
    ExplicaçãoRelacione configurações do Windows à classificação base
  8. 8
    ExemploDeixe uma elevação temporária decair
  9. 9
    DesafioVerifique a faixa de elevação
  10. 10
    ConexãoReconheça ideias relacionadas de realimentação
  11. 11
    ExplicaçãoEscolha a medição que importa
  12. 12
    ExemploMantenha a lei de Little dentro de um mesmo limite
  13. 13
    DesafioObtenha a espera a partir da população
  14. 14
    DesafioExplique uma aparente melhora de desempenho
  15. 15
    RecapitulaçãoRelacione uma configuração a um efeito medido

Questões de Escalonamento de CPU

50 Questões de Prática em 5 conjuntos

Conjunto 1: Interprete decisões e acompanhe o atendimento de CPU10 Questões de Prática

Questão 1 de 10

O escalonamento circular usa um quantum de 3 ms. A chega em 0 ms precisando de 7 ms, B em 1 ms precisando de 4 ms e C em 3 ms precisando de 2 ms. Uma chegada no limite da fatia entra antes da tarefa cuja fatia terminou. Quando A termina? Ignore o custo de troca.
  1. Em 13 ms.
  2. Em 10 ms.
  3. Em 11 ms.
  4. Em 12 ms.
Mostrar respostaOcultar resposta
Resposta: A
As vezes de execução são A 0–3, B 3–6, C 6–8, A 8–11, B 11–12 e A 12–13. A precisa de seu último milissegundo após a última vez de B, então conclui em 13 ms. Colocar A antes de C, que chegou no limite da fatia, altera incorretamente a fila após a primeira fatia.

Questão 2 de 10

Um editor está esperando por uma leitura de disco, um compilador está pronto e um visualizador terminou. Qual tarefa o escalonador de CPU pode selecionar agora?
  1. O editor.
  2. O compilador.
  3. O visualizador.
  4. O editor e o compilador.
Mostrar respostaOcultar resposta
Resposta: B
O compilador está pronto e pode executar assim que for selecionado. O editor precisa esperar por seu evento de disco antes de se tornar candidato. Ter trabalho inacabado não basta: trabalho bloqueado ainda não pode usar a CPU.

Questão 3 de 10

Uma tarefa que usa apenas a CPU chega em 4 ms, executa pela primeira vez em 9 ms e conclui em 22 ms após usar 10 ms de CPU. Quais são seus tempos de resposta e de espera total?
  1. Resposta 9 ms; espera 12 ms.
  2. Resposta 5 ms; espera 18 ms.
  3. Resposta 8 ms; espera 5 ms.
  4. Resposta 5 ms; espera 8 ms.
Mostrar respostaOcultar resposta
Resposta: D
O tempo de resposta é o atraso até a primeira execução: 9 menos 4 resulta em 5 ms. O tempo de retorno é 22 menos 4, ou 18 ms, então a espera é 18 menos 10, ou 8 ms. Usar o atraso até a primeira execução como toda a espera deixaria de fora os 3 ms passados no estado de pronto após o primeiro despacho.

Questão 4 de 10

Três tarefas que usam apenas a CPU chegam juntas: A precisa de 18 ms, B de 4 ms e C de 8 ms. Qual é o tempo médio de retorno delas no SJF não preemptivo com custo de troca zero?
  1. 15,33 ms.
  2. 10,00 ms.
  3. 20,67 ms.
  4. 24,67 ms.
Mostrar respostaOcultar resposta
Resposta: A
SJF executa B, C e depois A, resultando em instantes de conclusão de 4, 12 e 30 ms. Como todas as chegadas ocorrem no instante zero, o tempo médio de retorno é 46 dividido por 3, ou 15,33 ms. Calcular a média das durações das rajadas resulta em 10 ms, o que deixa de fora o tempo gasto atrás de trabalho anterior.

Questão 5 de 10

Um previsor de rajadas tem uma estimativa de 20 ms e usa peso 0,25 para a medição mais recente. Ele observa rajadas de 8 ms e depois de 12 ms. Qual é sua previsão após as duas observações?
  1. 17,00 ms.
  2. 14,00 ms.
  3. 15,75 ms.
  4. 13,50 ms.
Mostrar respostaOcultar resposta
Resposta: C
A primeira atualização é 0,25 vezes 8 mais 0,75 vezes 20, resultando em 17 ms. A segunda usa essa estimativa atualizada: 0,25 vezes 12 mais 0,75 vezes 17 resulta em 15,75 ms. Reutilizar a estimativa original de 20 ms descartaria o efeito da primeira observação.

Questão 6 de 10

As tarefas que usam apenas a CPU são A (chegada em 0 ms, demanda de 10 ms), B (2 ms, 4 ms) e C (3 ms, 2 ms). No STCF, qual é o tempo médio de retorno? Ignore os custos de troca.
  1. 7,00 ms.
  2. 9,33 ms.
  3. 8,00 ms.
  4. 8,67 ms.
Mostrar respostaOcultar resposta
Resposta: C
A executa 0–2, B 2–3, C 3–5, B 5–8 e A 8–16. Os tempos de retorno são 16, 6 e 2 ms, com média de 8 ms. Deixar B terminar antes de considerar C ignora a segunda preempção: em 3 ms, B ainda precisa de 3 ms e C precisa de apenas 2 ms.

Questão 7 de 10

Em 0 ms, a tarefa D inicia uma operação de dispositivo de 7 ms e bloqueia. A tarefa E está pronta e precisa de 5 ms de CPU, sem entrada e saída. Se a CPU não fica ociosa quando há trabalho e os custos de troca são zero, quando E termina?
  1. Em 7 ms.
  2. Em 12 ms.
  3. Em 2 ms.
  4. Em 5 ms.
Mostrar respostaOcultar resposta
Resposta: D
E pode usar a CPU imediatamente enquanto a operação de dispositivo de D prossegue, então seus cinco milissegundos de atendimento terminam em 5 ms. Esperar até a operação de D terminar resultaria em 12 ms, mas D está bloqueada e não ocupa a CPU. O tempo de dispositivo e o tempo de CPU de outra tarefa podem se sobrepor.

Questão 8 de 10

Um ciclo de escalonamento repetitivo contém 3,8 ms de trabalho útil de CPU seguido de uma troca de 0,2 ms. Que fração do tempo decorrido é sobrecarga de troca?
  1. 5,26%.
  2. 5%.
  3. 0,05%.
  4. 95%.
Mostrar respostaOcultar resposta
Resposta: B
O ciclo inteiro dura 4 ms, dos quais 0,2 ms são de troca, então a fração é 0,05, ou 5%. Dividir apenas pelos 3,8 ms de trabalho útil resulta em aproximadamente 5,26%, mas essa é uma razão em relação ao trabalho útil, não a fração solicitada do tempo total decorrido.

Questão 9 de 10

As tarefas prontas P, Q, R e S têm prioridades 7, 2, 5 e 9 segundo a escala dos livros. Números menores significam prioridade mais alta. Qual executa primeiro no escalonamento por prioridade?
  1. P.
  2. R.
  3. S.
  4. Q.
Mostrar respostaOcultar resposta
Resposta: D
Q tem o menor número de prioridade e, portanto, a classificação mais alta nessa escala. O escalonamento por prioridade a seleciona antes de P, R ou S, independentemente de seus nomes. Escolher S pelo maior número aplica a direção do Windows a uma escala definida explicitamente no sentido contrário.

Questão 10 de 10

Uma tarefa em execução inicia voluntariamente uma leitura e fica bloqueada. Outra tarefa pronta é selecionada. Essa transferência exige escalonamento preemptivo?
  1. Sim; toda troca é preempção.
  2. Não; o bloqueio libera a CPU.
  3. Sim; entrada e saída é um evento do temporizador.
  4. Não; a tarefa bloqueada ainda executa.
Mostrar respostaOcultar resposta
Resposta: B
Uma tarefa bloqueada não pode continuar executando, então até mesmo um escalonador não preemptivo pode escolher outra tarefa. A preempção retira especificamente a CPU de uma tarefa que continua apta a executar. Chamar toda troca de contexto de preempção confunde o mecanismo de troca com o motivo da transferência.
Conjunto 2: Acompanhe prioridades, cotas e realimentação10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Uma thread de alta prioridade espera por uma trava mantida por uma thread de baixa prioridade, enquanto uma thread de prioridade média continua executando. Como se chama esse problema de escalonamento?
  1. Envelhecimento de prioridade.
  2. Alternância circular.
  3. Inversão de prioridade.
  4. Desequilíbrio de carga da CPU.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Uma tarefa pronta começa na prioridade 12, com números menores indicando prioridade mais alta. O envelhecimento melhora sua prioridade em uma posição a cada 15 ms de espera no estado de pronto. Em 90 ms, qual é sua classificação em relação a uma tarefa pronta de prioridade 5?
  1. Prioridade 6; ainda tem classificação inferior.
  2. Prioridade 5; agora estão empatadas.
  3. Prioridade 6; agora tem classificação superior.
  4. Prioridade 7; ainda tem classificação inferior.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um nível de MLFQ tem quantum de 4 ms e cota cumulativa de 10 ms. Uma tarefa usa 4 ms, depois 3 ms e então retoma. Quanto atendimento de CPU resta antes do rebaixamento?
  1. 4 ms.
  2. 3 ms.
  3. 6 ms.
  4. 7 ms.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Uma MLFQ tem Q2 acima de Q1 acima de Q0, com quanta de 4 ms e cotas de 4 ms em cada nível. A chega em 0 ms precisando de 15 ms; B chega em 6 ms precisando de 3 ms. Não há elevações nem custos de troca. Quando A executa pela primeira vez em Q0?
  1. Em 8 ms.
  2. Em 9 ms.
  3. Em 12 ms.
  4. Em 11 ms.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Uma tarefa executa por 5 ms, bloqueia por 1 ms e repete. Sua cota no nível superior é de 8 ms, com contabilização cumulativa de CPU e sem elevações. Durante qual rajada de CPU ela é rebaixada pela primeira vez?
  1. Durante sua segunda rajada.
  2. Após sua primeira rajada completa.
  3. Durante sua terceira rajada.
  4. Ela mantém a prioridade máxima indefinidamente.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Uma tarefa de MLFQ está em Q1 com 7 ms de sua cota de 12 ms usados. Ela executa por 3 ms, bloqueia por 5 ms e depois volta a executar. Não ocorre elevação. Em qual instante decorrido desde o início desses eventos ela é rebaixada?
  1. Em 5 ms.
  2. Em 8 ms.
  3. Em 13 ms.
  4. Em 10 ms.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Uma tarefa limitada por processamento esperava na fila inferior, mas agora realiza rajadas curtas após receber entrada. Qual mecanismo de MLFQ permite que seu novo comportamento seja aprendido novamente a partir do topo?
  1. Um quantum mais longo no nível inferior.
  2. Uma cota maior no nível inferior.
  3. Uma elevação periódica de prioridade.
  4. Uma reinicialização a cada cessão antecipada.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Três tarefas aptas a executar em uma loteria possuem 40, 60 e 100 bilhetes. Qual é a chance de a segunda tarefa vencer o próximo sorteio?
  1. 20%.
  2. 30%.
  3. 40%.
  4. 60%.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um usuário tem 120 bilhetes globais e dá às tarefas locais L e M 1 e 3 bilhetes locais. Um segundo usuário tem 80 bilhetes globais para uma tarefa apta a executar. Todas as tarefas permanecem aptas a executar. Se o primeiro usuário dobrar ambas as quantidades locais, qual será a parcela esperada de CPU de L em todo o sistema?
  1. 15%.
  2. 25%.
  3. 30%.
  4. 7,5%.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Duas tarefas no escalonamento por passos têm valores de passagem iguais. A tarefa A tem 20 bilhetes e a tarefa B tem 40, com constante de passo 800. Após A receber uma fatia, qual é o aumento de seu valor de passagem?
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 3: Acompanhe a contabilização de bilhetes e tempo virtual10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

As tarefas de loteria A, B e C possuem 35, 25 e 40 bilhetes nessa ordem. Os bilhetes começam em zero. Qual tarefa vence um sorteio de 60?
  1. A.
  2. B.
  3. B e C empatam.
  4. C.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Uma tarefa de loteria possui 20% de todos os bilhetes das tarefas aptas a executar e vence 2 das primeiras 20 fatias iguais. O que se pode concluir sobre esse resultado?
  1. Sua parcela de bilhetes deve agora ser 10%.
  2. Ele pode ocorrer em um sorteio justo.
  3. Suas próximas duas vitórias estão garantidas.
  4. A loteria deve estar implementada incorretamente.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

O usuário X tem 180 bilhetes globais, divididos localmente como A:2 e B:1. O usuário Y tem 120 bilhetes globais para C. As três tarefas estão aptas a executar. X altera apenas a quantidade local de A de 2 para 5. Qual é a nova parcela esperada de B no sistema?
  1. 20%.
  2. 16,67%.
  3. 10%.
  4. 8,33%.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

As tarefas A, B e C no escalonamento por passos têm 30, 60 e 20 bilhetes, com constante 600 e todos os valores de passagem inicialmente em zero. Resolva empates alfabeticamente. Qual é a sequência das primeiras seis seleções de tarefas?
  1. A, B, C, B, A, B.
  2. A, B, C, A, B, C.
  3. A, B, C, B, C, A.
  4. A, B, C, B, B, A.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Os valores de passagem existentes no escalonamento por passos são 420, 440 e 460. Uma nova tarefa é inicializada com o valor mínimo de passagem atual. Qual é seu valor de passagem inicial?
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

As tarefas A e B no escalonamento por passos têm passos 15 e 40, ambas começando com valor de passagem zero. Resolva empates alfabeticamente. Até a primeira vez em que seus valores de passagem voltam a ser iguais, quantas fatias A recebeu?
  1. 3 fatias.
  2. 8 fatias.
  3. 5 fatias.
  4. 11 fatias.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um modelo clássico de CFS tem tarefas de pesos 1024 e 512 e um período alvo de 30 ms, sem restrição de granularidade mínima ativa. Qual fatia nominal a tarefa de menor peso recebe?
  1. 5 ms.
  2. 15 ms.
  3. 20 ms.
  4. 10 ms.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Uma tarefa de peso 256 executa por 2 ms reais em um modelo clássico de CFS. Quanto tempo de execução virtual ela acumula?
  1. 0,5 ms virtuais.
  2. 2 ms virtuais.
  3. 8 ms virtuais.
  4. 4 ms virtuais.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma decisão do EEVDF encontra A com defasagem −1 e prazo virtual 6, B com defasagem 2 e prazo 12, e C com defasagem 0 e prazo 9. Qual tarefa executa em seguida?
  1. A.
  2. C.
  3. B.
  4. A e C empatam.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Duas tarefas da classe justa, sempre aptas a executar e de mesmo peso, competem em uma CPU. Uma solicita fatias mais curtas no EEVDF. O que deve mudar sem alterar seu peso?
  1. Sua parcela dobra; sua latência permanece igual.
  2. Sua parcela diminui; seus prazos permanecem iguais.
  3. Sua latência permanece igual; sua parcela se torna aleatória.
  4. Sua latência pode melhorar; sua parcela permanece igual.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 4: Distribua o trabalho e interprete os controles do Linux10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um programa tem uma thread apta a executar e nenhum processo auxiliar. Quantas CPUs lógicas podem executar essa thread no mesmo instante?
  1. Uma.
  2. Duas.
  3. Todas as CPUs em sua máscara de afinidade.
  4. Todas as CPUs que compartilham seu cache.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Duas CPUs leem, cada uma, o tamanho de uma fila compartilhada, alteram uma entrada e depois escrevem um tamanho atualizado. Seus caches são coerentes. O que mais é necessário para proteger a atualização?
  1. Uma invalidação do cache antes de cada leitura da fila.
  2. Um quantum de tempo mais longo para cada tarefa.
  3. Sincronização que abranja a operação na fila.
  4. Apenas uma cópia privada do tamanho da fila.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Duas CPUs idênticas atendem às tarefas iguais A, B e C, limitadas por processamento. Por 12 ms, A executa sozinha enquanto B e C compartilham igualmente a outra CPU. Nos 6 ms seguintes, B executa sozinha enquanto A e C compartilham; nos 6 ms finais, C executa sozinha enquanto A e B compartilham. Ignorando custos, qual é o maior atendimento de CPU por tarefa menos o menor após 24 ms?
  1. 0 ms.
  2. 6 ms.
  3. 12 ms.
  4. 3 ms.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Três tarefas que usam apenas a CPU estão prontas em 0 ms: A precisa de 8 ms, B de 2 ms e C de 6 ms. A e B podem executar apenas na CPU 1; C pode executar na CPU 0 ou 1. Ambas as CPUs são idênticas e não ficam ociosas quando há trabalho, com SJF local e migração sem custo. Qual é o menor tempo médio de retorno possível?
  1. 5,33 ms.
  2. 6 ms.
  3. 8 ms.
  4. 8,67 ms.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um programa é iniciado a partir de um interpretador de comandos com nice 0 usando nice -n 8 ./worker. No escalonamento justo normal com tarefas concorrentes ocupadas, o que o comando altera?
  1. O processo worker se torna mais favorecido.
  2. O processo worker se torna menos favorecido.
  3. O processo worker entra na prioridade de tempo real 8.
  4. O processo worker fica limitado a 8% de uma CPU.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Dois cgroups do mesmo nível compartilham uma CPU. A tem peso 300 e cota de 40 ms por 100 ms; B tem peso 100 e nenhuma cota. Ambos estão sempre ocupados. Ignore a sobrecarga. Qual distribuição média é possível em períodos completos de cota?
  1. A 75%; B 25%.
  2. A 40%; B 25%.
  3. A 40%; B 60%.
  4. A 30%; B 70%.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um cgroup tem cpu.max definido como “60000 100000”. No início de um novo período, duas threads desse grupo executam simultaneamente em duas CPUs. Após quanto tempo decorrido de execução elas esgotam o orçamento?
  1. 30 ms.
  2. 60 ms.
  3. 100 ms.
  4. 120 ms.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Duas tarefas prontas de tempo real do Linux podem executar na mesma CPU: uma usa SCHED_FIFO na prioridade 35, a outra usa SCHED_RR na prioridade 45. Qual tem maior precedência?
  1. A tarefa FIFO na prioridade 35.
  2. Nenhuma; elas compartilham a CPU.
  3. A tarefa de menor valor de nice.
  4. A tarefa RR na prioridade 45.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma thread do Windows tem prioridade base 10 e é elevada à prioridade dinâmica 14. Ela então usa três quanta completos sem novas elevações. Qual é sua prioridade dinâmica?
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Uma fila de prontos estável recebe 250 tarefas/s e tem em média 5 tarefas em espera. Cada tarefa usa 8 ms de CPU após sair da fila, sem outro atraso. Qual é seu tempo médio da chegada à conclusão?
  1. 28 ms.
  2. 20 ms.
  3. 8 ms.
  4. 12 ms.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 5: Compare o comportamento do sistema e avalie as evidências10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um processo do Windows tem classe de prioridade Normal e uma thread no nível relativo Highest. Qual é a prioridade base dessa combinação?
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Uma thread do Windows tem prioridade base 18 e termina uma espera por teclado. O mecanismo normal de elevação dinâmica aumenta sua prioridade?
  1. Sim; a conclusão da espera por teclado sempre causa elevação.
  2. Não; sua base está na faixa de tempo real.
  3. Não; apenas threads limitadas por processamento recebem elevações.
  4. Sim; sua base passa permanentemente a 31.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

As tarefas A e B, que usam apenas a CPU, chegam juntas, precisando de 6 ms e 2 ms. O desempate alfabético coloca A primeiro no FIFO e no RR. Compare FIFO com RR de 2 ms, ignorando custos de troca. Como RR altera os tempos médios de resposta e de retorno?
  1. A resposta melhora em 2 ms; o retorno melhora em 1 ms.
  2. A resposta melhora em 1 ms; o retorno piora em 2 ms.
  3. A resposta melhora em 2 ms; o retorno piora em 1 ms.
  4. A resposta piora em 2 ms; o retorno melhora em 1 ms.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um sistema estável tem em média 6 tarefas em permanência e conclui 15 tarefas/s, o que corresponde à sua taxa de chegada. Qual é o tempo médio de permanência?
  1. 2,50 s.
  2. 0,90 s.
  3. 0,10 s.
  4. 0,40 s.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Dois projetos de RR usam quanta úteis de 0,9 ms e 4,9 ms. Cada quantum completo é seguido por uma troca de 0,1 ms. A execução útil conclui 2 registros por milissegundo de CPU. Qual projeto alcança pelo menos 1900 registros/s e qual vazão ele obtém? Suponha que quanta completos se repitam continuamente.
  1. O projeto de 0,9 ms; 2000 registros/s.
  2. Ambos os projetos; 2000 registros/s cada.
  3. O projeto de 4,9 ms; 1900 registros/s.
  4. O projeto de 4,9 ms; 1960 registros/s.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Uma MLFQ usa duas filas. O quantum e a cota superiores são de 3 ms; o quantum inferior é de 6 ms. Em 0 ms, A e B são elevadas ao topo nessa ordem, com 10 ms e 4 ms restantes. Não ocorrem chegadas, novas elevações ou custos. Quando B termina?
  1. Em 7 ms.
  2. Em 10 ms.
  3. Em 13 ms.
  4. Em 14 ms.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Uma migração leva 2 ms para recuperar o conteúdo útil do cache. Permanecer na fila atual significa esperar 9 ms; mudar para uma CPU ociosa elegível não tem outro atraso. Qual vantagem direta de espera e recuperação a migração oferece?
  1. 7 ms.
  2. 11 ms.
  3. 9 ms.
  4. 2 ms.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Duas tarefas justas sempre aptas a executar têm pesos 2048 e 1024 em uma CPU. Cada uma recebe atendimento até que ambas tenham acumulado 12 ms virtuais a partir de valores iniciais iguais. Quanto atendimento real de CPU a tarefa de maior peso recebeu?
  1. 6 ms.
  2. 24 ms.
  3. 12 ms.
  4. 36 ms.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um escalonador BPF sched_ext ativo impede o progresso de uma tarefa apta a executar, e o núcleo detecta a falha. Qual recuperação a interface oferece?
  1. Mantê-lo ativo e aumentar todos os pesos de nice.
  2. Mover todas as tarefas afetadas para SCHED_FIFO.
  3. Interrompê-lo e restaurar o escalonamento justo interno.
  4. Bloquear suas tarefas até que a política BPF seja recarregada.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

A política X proporciona menor tempo médio de resposta que a política Y, mas uma tarefa longa e pronta nunca executa com X durante um fluxo contínuo de chegadas curtas. Qual propriedade adicional precisa ser investigada?
  1. Resistência à inanição.
  2. Precisão do tempo de chegada.
  3. Igualdade dos tamanhos dos programas.
  4. Vazão de pico do dispositivo.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

87 Termos-Chave, cada um com sua definição

A

Acesso não uniforme à memória (NUMA)
NUMA é uma arquitetura de memória na qual a latência de acesso depende de a memória ser local ao processador em execução ou estar em outro nó.
A distribuição em NUMA importa quando uma thread migrada acessa repetidamente a memória de seu soquete anterior.
Afinidade de cache
Afinidade de cache é a preferência por executar uma tarefa perto da CPU que ela usou recentemente para que possa reutilizar caches e traduções já preenchidos.
A afinidade de cache pode favorecer o núcleo 2 após uma breve preempção de uma thread que fazia uma ordenação nele.
Afinidade de CPU
Afinidade de CPU restringe ou favorece os processadores nos quais uma tarefa executa; uma máscara explícita especifica quais CPUs são permitidas.
A afinidade de CPU restrita ao núcleo 0 explica por que a tarefa pronta não pode usar o núcleo 1 ocioso.
Amortização
Amortização distribui um custo fixo por trabalho útil suficiente para que o custo se torne uma fração menor do tempo total.
Vezes de atendimento mais longas melhoram a amortização dos custos de preenchimento do cache após uma troca.

Á

Árvore rubro-negra
Uma árvore rubro-negra é uma árvore de busca balanceada; o CFS clássico ordena nessa estrutura as tarefas aptas a executar que estão na fila pelo tempo de execução virtual.
A árvore rubro-negra permite atualizações logarítmicas, enquanto um ponteiro armazenado fornece seu mínimo rapidamente.

C

Classe de prioridade
Uma classe de prioridade do Windows é uma configuração no nível do processo que se combina com o nível relativo de cada thread para determinar sua prioridade base.
Alterar a classe de prioridade do processo muda como seus níveis de thread são associados às prioridades base.
Coerência de cache
A coerência de cache mantém consistentes entre núcleos as cópias em cache de posições individuais de memória, sem tornar atômicas as operações com várias etapas.
A coerência de cache não pode proteger uma atualização de fila compartilhada com várias instruções contra intercalações prejudiciais.
Contabilização cumulativa
A contabilização cumulativa soma o uso de CPU de uma tarefa ao longo de suas vezes de execução em um nível de prioridade, para que bloquear ou ceder a CPU não apague a cota consumida.
A contabilização cumulativa rebaixa a tarefa mesmo que nenhuma de suas rajadas individuais dure um quantum completo.
Cota de tempo de CPU
Uma cota de tempo de CPU é o atendimento total de CPU que uma tarefa pode consumir em um nível de MLFQ antes do rebaixamento, possivelmente ao longo de várias vezes de execução.
A cota de 15 ms permite três quanta completos de 5 ms no mesmo nível de prioridade.
cpu.max
A configuração cpu.max limita o atendimento agregado de CPU de um grupo do cgroup v2 em cada período de tempo de CPU configurado.
Uma cota cpu.max pode limitar um grupo depois que seus trabalhadores consomem conjuntamente o orçamento do período.
cpu.weight
A configuração cpu.weight atribui a um grupo do cgroup v2 um peso relativo de atendimento justo quando ele compete com grupos ativos do mesmo nível.
Um serviço com cpu.weight 300 compete por aproximadamente três vezes o atendimento de um grupo ocupado do mesmo nível com 100.

D

Defasagem de serviço
Defasagem de serviço é a diferença entre o atendimento de CPU ao qual uma tarefa tem direito e o atendimento que recebeu, com defasagem positiva indicando atendimento devido.
Uma tarefa com defasagem de serviço negativa já recebeu atendimento extra e não é elegível no EEVDF.
Desequilíbrio de carga
Desequilíbrio de carga é uma distribuição desigual da demanda apta a executar entre CPUs, que pode desperdiçar capacidade ou dar atendimento desigual a tarefas comparáveis.
O desequilíbrio de carga aparece quando uma tarefa sozinha recebe uma CPU inteira enquanto duas outras dividem outra.
Despachante
O despachante é o mecanismo que realiza uma escolha de escalonamento, salvando e restaurando o estado das tarefas e retomando a execução.
O despachante restaura os registradores da thread escolhida antes de retornar ao seu código de usuário.

E

Efeito comboio
O efeito comboio é o atraso sofrido por tarefas curtas na fila atrás de uma rajada longa de CPU, produzindo tempos médios de conclusão ruins.
O efeito comboio fica visível quando várias tarefas minúsculas terminam somente depois da primeira tarefa grande.
Elevação de prioridade
Uma elevação de prioridade aumenta temporariamente a classificação de escalonamento; uma elevação em toda a MLFQ devolve as tarefas ao topo para que seu comportamento possa ser aprendido novamente.
A elevação de prioridade dá à antiga tarefa da fila inferior uma nova chance de executar no topo.
Envelhecimento
Envelhecimento é a melhora gradual da prioridade de uma tarefa em espera, destinada a permitir que trabalho que espera há muito tempo compita e resista à inanição.
O envelhecimento eleva uma tarefa em lote que espera há muito tempo em direção à classificação do trabalho em primeiro plano que continua chegando.
Escalonador completamente justo (CFS)
CFS é o escalonador justo clássico do Linux, introduzido na versão 2.6.23, cuja seleção de tarefas favorece o menor tempo de execução virtual ponderado.
O CFS atribui a uma tarefa de menor peso mais tempo de execução virtual pela mesma quantidade de atendimento real de CPU.
Escalonador de CPU
Um escalonador de CPU é o componente do sistema operacional que escolhe qual processo ou qual thread no estado de pronto deve executar em seguida em uma CPU.
O escalonador de CPU seleciona o editor depois que uma leitura concluída deixa sua próxima rajada pronta.
Escalonador de longo prazo
Um escalonador de longo prazo controla quais tarefas enviadas entram em um sistema, influenciando assim seu grau de multiprogramação.
O escalonador de longo prazo de um cluster admite outra tarefa em lote quando há capacidade disponível.
Escalonador de médio prazo
Um escalonador de médio prazo suspende temporariamente processos inteiros, retirando-os da memória e restaurando-os depois.
Um escalonador de médio prazo pode reduzir a pressão sobre a memória suspendendo temporariamente um processo.
Escalonamento circular
Escalonamento circular é uma política que alterna tarefas prontas em uma fila FIFO, dando a cada uma no máximo um quantum de tempo antes de colocá-la novamente na fila.
No escalonamento circular, um gerador de relatórios que ainda tem trabalho recebe outra vez após as demais tarefas prontas executarem.
Escalonamento multiprocessador com fila única (SQMS)
SQMS é o escalonamento multiprocessador por uma fila compartilhada de prontos, que facilita a distribuição do trabalho, mas cria custos de sincronização compartilhada.
SQMS pode dar a próxima tarefa em espera a uma CPU ociosa elegível sem procurar em filas separadas.
Escalonamento multiprocessador com múltiplas filas (MQMS)
MQMS é o escalonamento multiprocessador com filas locais de prontos por CPU, permitindo seleção local escalável, mas exigindo balanceamento de carga.
MQMS pode deixar uma CPU ociosa enquanto duas tarefas prontas permanecem atribuídas a outra CPU.
Escalonamento por loteria
O escalonamento por loteria escolhe cada próxima fatia de CPU por um sorteio aleatório de bilhetes, dando às tarefas aptas a executar chances de vitória proporcionais aos bilhetes.
O escalonamento por loteria pode dar a uma tarefa de 60 bilhetes menos de seis vitórias em seus primeiros dez sorteios.
Escalonamento por passos
O escalonamento por passos é um compartilhamento proporcional determinístico que executa a tarefa com o menor valor de passagem e avança esse valor por um passo inverso à quantidade de bilhetes.
O escalonamento por passos mantém o atendimento em intervalos curtos próximo às proporções de bilhetes sem sorteios aleatórios.
Escalonamento por prioridade
O escalonamento por prioridade seleciona a tarefa pronta de maior classificação, usando outra regra, como FIFO ou escalonamento circular, para resolver classificações iguais.
O escalonamento por prioridade executa uma tarefa urgente recém-pronta antes do trabalho comum em um sistema preemptivo.
Estado de bloqueado
O estado de bloqueado é a condição de uma tarefa que não pode prosseguir até que ocorra um evento, como a conclusão de uma requisição de entrada e saída.
O editor entra no estado de bloqueado enquanto espera pelo próximo evento de teclado.
Estado de pronto
O estado de pronto é a condição de uma tarefa que pode executar, mas espera ser selecionada para uma CPU disponível.
Um compilador preemptado retorna ao estado de pronto enquanto outra tarefa usa a CPU.

F

Filas multinível com realimentação (MLFQ)
Uma MLFQ é um escalonador com várias filas de prioridade que muda a fila de uma tarefa de acordo com o consumo observado de CPU e a realimentação.
A MLFQ inicia a recém-chegada no topo e a rebaixa após uso contínuo de CPU.

G

Granularidade mínima
Granularidade mínima é a escala inferior de uma vez de atendimento no CFS clássico que impede que muitas tarefas aptas a executar criem fatias excessivamente curtas.
A granularidade mínima pode fazer o período total de escalonamento superar sua meta sob intensa competição.
Grupo de controle (cgroup)
Um grupo de controle é um agrupamento de processos ou threads do Linux ao qual controladores aplicam políticas de alocação e consumo de recursos.
Um grupo de controle permite que o orçamento de CPU de um serviço abranja vários processos trabalhadores cooperantes.

H

Herança de prioridade
A herança de prioridade concede temporariamente a quem mantém uma trava a prioridade de uma tarefa de prioridade mais alta que espera por essa trava.
A herança de prioridade permite que quem mantém a trava e tem classificação baixa execute por tempo suficiente para liberá-la.

I

Inanição
Inanição é o adiamento indefinido de uma tarefa pronta porque decisões de escalonamento dão repetidamente a CPU a outras tarefas.
Um fluxo contínuo de tarefas curtas pode causar inanição de uma tarefa longa no SJF.
Inflação de bilhetes
A inflação de bilhetes aumenta a própria quantidade de bilhetes de uma tarefa para solicitar mais atendimento, exigindo confiança ou controles para impedir a redução injusta das parcelas alheias.
A inflação de bilhetes sem restrições permite que uma tarefa gananciosa reduza a probabilidade de vitória de todas as outras tarefas aptas a executar.
Interrupção de dispositivo
Uma interrupção de dispositivo sinaliza um evento, como a conclusão de uma operação de entrada e saída, permitindo que o núcleo deixe novamente pronto o trabalho em espera.
Uma interrupção de dispositivo que sinaliza o fim da leitura de um editor muda esse editor de bloqueado para pronto.
Inversão de prioridade
A inversão de prioridade ocorre quando trabalho de alta prioridade espera por uma dependência de prioridade mais baixa que a execução de prioridade média pode atrasar.
A inversão de prioridade mantém a tarefa urgente bloqueada enquanto trabalho de prioridade média preempta quem mantém sua trava.

L

Latência de cauda
Latência de cauda descreve atrasos próximos à extremidade mais lenta de uma distribuição de tempos de resposta, frequentemente informados por um percentil alto.
A latência de cauda do serviço piora quando um pequeno número de requisições espera muito mais que a média.
Latência de despacho
Latência de despacho é o atraso envolvido na transferência da execução da CPU de uma tarefa para a tarefa escolhida pelo escalonador.
Um quantum mais curto faz a latência de despacho representar uma fração maior de cada ciclo de atendimento.
Lei de Little
A lei de Little relaciona população média, taxa de chegada e tempo de permanência em um sistema estável em regime permanente com um limite consistente.
A lei de Little fornece uma população média de quatro quando oito tarefas chegam por segundo e permanecem 0,5 s.
Localidade espacial
Localidade espacial é a tendência de um programa acessar dados próximos a posições acessadas recentemente, como elementos vizinhos de um vetor.
A localidade espacial ajuda uma varredura sequencial de um vetor a se beneficiar da busca de uma linha inteira de cache.
Localidade temporal
Localidade temporal é a tendência de um programa reutilizar dados acessados recentemente, tornando o conteúdo em cache útil para execução posterior.
A localidade temporal ajuda o laço a reutilizar as mesmas entradas de tabela de um cache já preenchido.

M

Manipulação do escalonador
Manipulação do escalonador é a alteração deliberada do comportamento observado para obter vantagens de atendimento que a política não pretendia conceder.
A manipulação do escalonador funciona quando uma regra de cessão antecipada esquece o tempo de CPU usado antes de cada operação de entrada e saída.
Média exponencial
A média exponencial prevê a próxima rajada de CPU combinando uma fração fixa da medição mais recente com a estimativa anterior.
Na média exponencial, um peso maior para a medição faz as previsões reagirem mais rapidamente a novas rajadas.
Menor tempo restante primeiro (STCF, também SRTF)
STCF é uma política preemptiva que executa a tarefa pronta com a menor demanda restante de CPU, também chamada de menor tempo restante primeiro.
STCF preempta uma tarefa com 14 ms restantes quando uma tarefa recém-pronta precisa de apenas 2 ms.
Migração
Migração move a execução de uma tarefa entre CPUs, frequentemente para corrigir desequilíbrio ao custo de localidade de cache e de memória.
A migração para uma CPU ociosa compatível pode economizar mais tempo de espera do que custa para preencher os caches.
Modelagem determinística
A modelagem determinística avalia políticas de escalonamento em uma carga de trabalho fixa com instantes de chegada, demandas e custos modelados especificados.
A modelagem determinística permite examinar cada escolha de escalonamento, mas estabelece resultados apenas para aquela sequência.
Modelo de filas
Um modelo de filas representa chegadas e atendimento usando distribuições de probabilidade para estudar populações médias, atrasos e capacidade.
Um modelo de filas pode estimar a espera média sob uma distribuição escolhida de durações de rajadas.
Moeda de bilhetes
A moeda de bilhetes divide o direito global fixo de um usuário entre tarefas locais, convertendo frações de bilhetes locais em bilhetes globais.
A moeda de bilhetes permite que um usuário divida uma quantidade fixa de 80 bilhetes entre três tarefas locais.
Multiprocessamento simétrico (SMP)
SMP é um projeto multiprocessador no qual as CPUs podem executar código do sistema operacional e tomar suas próprias decisões de escalonamento.
Um núcleo SMP coordena atualizações simultâneas da fila de prontos feitas por várias CPUs.
Multithreading simultâneo (SMT)
SMT permite que várias CPUs lógicas compartilhem os recursos de execução de um núcleo físico, fornecendo sequências paralelas de instruções com capacidade compartilhada.
Duas threads limitadas por processamento em CPUs lógicas do mesmo núcleo SMT competem mais diretamente que threads em núcleos separados.

P

Parcela proporcional
Uma parcela proporcional é uma fração alvo do atendimento de CPU disputado, atribuída a uma tarefa ou grupo por meio de um direito relativo.
O serviço recebe uma parcela proporcional maior quando seu peso aumenta em relação ao grupo ocupado do mesmo nível.
Passo
Um passo é o resultado da divisão de uma constante comum pela quantidade de bilhetes de uma tarefa, somado ao seu valor de passagem após a tarefa receber uma fatia de atendimento.
Um passo menor faz o valor de passagem da tarefa favorecida crescer mais lentamente após cada vez selecionada.
Período de elevação de prioridade
Um período de elevação de prioridade é o intervalo decorrido entre reinicializações de prioridade em toda a MLFQ, equilibrando novas oportunidades e separação útil de prioridades.
Um período de elevação de prioridade muito curto devolve repetidamente cálculos longos às filas interativas.
Prazo virtual
Prazo virtual é um ponto final ponderado de ordenação do atendimento usado pelo EEVDF para comparar requisições de tarefas elegíveis para atendimento.
Um prazo virtual mais próximo ajuda uma requisição curta elegível a executar mais cedo sem uma garantia de horário real.
Preempção
Preempção é a retirada da CPU de uma tarefa em execução que poderia continuar, com seu estado preservado para retomada posterior.
Uma preempção provocada pelo temporizador permite que outra thread pronta execute antes de o cálculo terminar.
Primeiro a entrar, primeiro a sair (FIFO)
FIFO é uma política não preemptiva que seleciona tarefas prontas em ordem de chegada e deixa uma rajada de CPU em execução continuar até terminar ou ceder a CPU.
No FIFO, uma rajada curta recém-chegada espera atrás da rajada longa que já está em execução.
Primeiro prazo virtual elegível (EEVDF)
EEVDF é uma seleção da classe justa que escolhe o prazo virtual mais próximo entre as tarefas elegíveis por não estarem adiantadas em relação ao seu direito.
O EEVDF pode favorecer uma requisição curta elegível sem aumentar a parcela ponderada de longo prazo da tarefa.
Prioridade base
A prioridade base de uma thread do Windows é sua classificação inicial, obtida pela combinação da classe de prioridade de seu processo com seu nível relativo de thread.
A classe de processo Normal e o nível de thread Highest resultam em uma prioridade base do Windows de 10.
Prioridade dinâmica
A prioridade dinâmica de uma thread do Windows é sua classificação atual de escalonamento, que pode subir temporariamente acima da base na faixa variável.
A prioridade dinâmica da thread cai em direção à sua base após cada quantum completo com prioridade elevada.

Q

Qualidade de serviço (QoS)
Qualidade de serviço é uma classificação de urgência do trabalho usada pelo macOS para orientar decisões de atendimento, incluindo a distribuição entre tipos de núcleo.
A qualidade de serviço em segundo plano sinaliza urgência diferente da de trabalho interativo para o usuário em Apple silicon.
Quantum de tempo
Um quantum é o atendimento máximo de CPU permitido em uma vez de execução no escalonamento circular antes que uma tarefa pronta e inacabada seja preemptada.
Um quantum de 4 ms permite que uma tarefa com 10 ms de trabalho continue ao longo de várias vezes de execução.

R

Rajada de CPU
Uma rajada de CPU é um intervalo de processamento entre esperas ou até a conclusão, usado para descrever como uma tarefa demanda atendimento de CPU.
A rajada de CPU de um editor de texto após uma entrada pode ser muito mais curta que a rajada de um codificador de vídeo.
Rebaixamento de prioridade
Rebaixamento de prioridade é a mudança para um nível de MLFQ de prioridade mais baixa após uma tarefa consumir a cota de atendimento atribuída ao seu nível atual.
O rebaixamento de prioridade deixa o cálculo longo atrás de trabalho recém-pronto em uma fila superior.
Registro de carga de trabalho
Um registro de carga de trabalho é uma sequência registrada de eventos, como chegadas, rajadas e esperas, que pode orientar um experimento de escalonamento.
Um registro de carga de trabalho de uso interativo pode revelar atrasos ausentes em um teste em lote que usa apenas a CPU.
Roubo de trabalho
Roubo de trabalho é um método de balanceamento no qual uma CPU pouco carregada puxa trabalho apto a executar da fila de uma CPU mais ocupada.
O roubo de trabalho move um cálculo na fila para o núcleo ocioso após verificar sua elegibilidade para a CPU.

S

sched_ext
A classe sched_ext permite que um núcleo Linux configurado execute um escalonador BPF carregado dinamicamente, com recuperação para o escalonamento interno em caso de falha.
Um erro na política sched_ext ativa faz o núcleo restaurar o escalonamento justo normal.
SCHED_FIFO
SCHED_FIFO é uma política de tempo real do Linux sem quantum entre tarefas de mesma prioridade; elas continuam até bloquear, ceder a CPU ou sofrer preempção por uma prioridade mais alta.
Uma tarefa SCHED_FIFO na prioridade 40 pode executar antes do trabalho normal enquanto permanecer apta a executar.
SCHED_RR
SCHED_RR é um escalonamento de tempo real do Linux que acrescenta alternância baseada em quantum entre tarefas prontas com a mesma prioridade estática.
SCHED_RR faz duas tarefas de prioridade 50 se alternarem, enquanto a prioridade 60 pode preemptar qualquer uma delas.
Simulação
A simulação avalia um escalonador executando um modelo com cargas de trabalho sintéticas ou eventos registrados e medindo o comportamento resultante.
A simulação pode reproduzir o mesmo registro de chegadas e bloqueios em duas políticas de escalonamento.
Sobrecarga de troca de contexto
Sobrecarga de troca de contexto é o tempo de CPU gasto no despacho entre tarefas e na recuperação do estado útil de execução em vez de avançar o trabalho da aplicação.
Um quantum minúsculo aumenta a sobrecarga de troca de contexto porque rajadas úteis são separadas por transferências frequentes.
Sobreposição de entrada e saída
A sobreposição de entrada e saída ocorre quando a CPU executa uma tarefa enquanto uma operação de dispositivo solicitada por outra tarefa ainda está em andamento.
A sobreposição de entrada e saída permite que o compilador avance durante a leitura de disco do editor.

T

Tarefa interativa
Uma tarefa interativa frequentemente responde a entradas ou outros eventos com rajadas curtas de CPU separadas por períodos de espera.
Uma tarefa interativa pode passar a maior parte do tempo decorrido bloqueada, embora precise de atendimento rápido após cada entrada.
Tarefa limitada por entrada e saída
Uma tarefa limitada por entrada e saída tem rajadas curtas e frequentes de CPU separadas por esperas por dispositivos ou entradas, frequentemente precisando de atendimento rápido quando fica pronta.
Uma tarefa limitada por entrada e saída, como um editor, pode executar brevemente após cada tecla pressionada e depois bloquear novamente.
Tarefa limitada por processamento
Uma tarefa limitada por processamento precisa de longos intervalos de cálculo, com relativamente poucas esperas por entradas ou dispositivos entre rajadas de CPU.
Uma tarefa limitada por processamento, como a codificação de vídeo, pode usar cada vez disponível por um longo período.
Tarefa mais curta primeiro (SJF)
Tarefa mais curta primeiro é uma política não preemptiva que seleciona a tarefa pronta com a próxima rajada de CPU conhecida ou prevista mais curta.
Tarefa mais curta primeiro seleciona uma rajada pronta de 3 ms antes de uma rajada pronta de 11 ms.
Tempo de espera
Tempo de espera é a soma dos intervalos em que uma tarefa está pronta, mas não executa, excluindo seu atendimento de CPU e suas esperas em bloqueio.
O tempo de espera da tarefa inclui tanto o atraso inicial na fila quanto a espera após uma preempção.
Tempo de execução virtual
Tempo de execução virtual é o atendimento de CPU ajustado pelo peso da tarefa, de modo que tarefas de peso maior acumulem progresso virtual mais lentamente.
A tarefa de maior peso acumula menos tempo de execução virtual por milissegundo e permanece competitiva para receber mais atendimento.
Tempo de resposta
Tempo de resposta em um acompanhamento de escalonamento é o intervalo desde a chegada de uma tarefa até sua primeira execução na CPU, antes de eventuais esperas posteriores.
Um editor pode ter tempo de resposta curto mesmo quando sua operação completa termina muito mais tarde.
Tempo de retorno
Tempo de retorno é o tempo decorrido desde a chegada de uma tarefa até sua conclusão, incluindo atendimento, esperas no estado de pronto e tempo bloqueado.
Uma tarefa em lote que usa apenas 7 ms de atendimento de CPU, mas termina 18 ms após chegar, tem tempo de retorno de 18 ms.
Tempo restante
Tempo restante é o atendimento de CPU de que uma tarefa ou rajada ainda precisa após subtrair o atendimento que já recebeu.
O escalonador compara o tempo restante da tarefa em execução com a rajada completa da recém-chegada.
Transferência de bilhetes
Transferência de bilhetes é o empréstimo temporário dos bilhetes de uma tarefa a outra, frequentemente a um servidor que executa a requisição de quem empresta.
A transferência de bilhetes permite que o servidor que executa a requisição do cliente compita usando o direito do cliente.

U

ULE
ULE é o escalonador do FreeBSD, que usa filas de tarefas prontas por CPU e o comportamento observado de suspensão e execução para ajudar a identificar threads interativas.
O ULE combina escalonamento local de CPU com realimentação sobre a frequência com que uma thread fica suspensa.
Utilização da CPU
Utilização da CPU é a fração de um intervalo de observação durante a qual uma CPU está ocupada, podendo incluir a sobrecarga do núcleo.
Uma CPU com uma longa fila de prontos chega a 100% de utilização da CPU embora várias de suas tarefas tenham uma resposta ruim.

V

Valor de nice
Um valor de nice é um parâmetro de prioridade acessível ao usuário para tarefas normais do Linux, variando de −20, o mais favorecido, a +19, o menos favorecido.
Um valor de nice maior reduz a parcela relativa de CPU de uma tarefa normal quando há concorrentes aptos a executar.
Valor de passagem
Um valor de passagem registra o progresso do atendimento ponderado no escalonamento por passos e é comparado aos valores das outras tarefas aptas a executar para selecionar uma vez.
A tarefa com valor de passagem 40 executa antes de uma concorrente cujo valor já chegou a 60.
Vazão
Vazão é o número de tarefas concluídas por unidade de tempo decorrido durante um intervalo de observação especificado.
Um teste que compara duas políticas de escalonamento informa a vazão em tarefas por segundo no mesmo intervalo para cada política.

Sobre esta aula

Por StudeliRelatar um erro

Crie seus próprios Materiais de Estudo

Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.

Começar