Escalonamento de processos

FCFS, SJF, SRTF, Round Robin, prioridades, justiça proporcional e tempo real.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Quatro compilações estão prontas e há uma só CPU. Dar primeiro serviço à mais curta reduz certas esperas; interromper uma compilação longa pode dar resposta mais cedo às restantes. O escalonador escolhe uma tarefa pronta. Para comparar políticas, fixamos chegadas, rajadas, desempates e custos.

Hipóteses e métricas

Nos exemplos, temos uma CPU, uma rajada de CPU por processo, sem I/O e custo de troca de contexto nulo. Uma política não preemptiva mantém a tarefa até terminar a rajada ou bloquear. Uma política preemptiva pode interrompê-la e devolvê-la à fila de prontos.

Sejam AiA_i a chegada, BiB_i a duração da rajada, SiS_i o primeiro início e FiF_i o fim. Definimos:

Ti=Fi−Ai,Wi=Ti−Bi,Ri=Si−Ai.T_i = F_i-A_i,\qquad W_i=T_i-B_i,\qquad R_i=S_i-A_i.

TiT_i é retorno (turnaround), WiW_i espera na fila de prontos e RiR_i resposta até ao primeiro serviço. Se houver I/O, subtrai também o tempo bloqueado para obter a espera. Em tempo real, alguns textos chamam resposta a Fi−AiF_i-A_i; verifica a definição do enunciado.

Utilização é a fração de tempo em que a CPU trabalha. Throughput conta tarefas concluídas por unidade de tempo. Melhorar uma média pode piorar a resposta de uma tarefa específica.

FCFS e SJF com a mesma entrada

Cada política é uma regra de escolha perante a fila de prontos. FCFS escolhe por ordem de chegada. SJF não preemptivo escolhe a menor rajada entre as tarefas já prontas, sem adivinhar chegadas futuras. Só depois de fixar a regra é que a tabela compara os resultados.

Todos chegam em 0, por ordem P1, P2, P3, P4, com durações 6, 3, 2 e 4.

PolíticaIntervalosEsperas de P1, P2, P3, P4Média
FCFSP1: 0–6, P2: 6–9, P3: 9–11, P4: 11–150, 6, 9, 116,5
SJFP3: 0–2, P2: 2–5, P4: 5–9, P1: 9–159, 2, 0, 54

Um processo longo à frente faz os curtos esperar, ou seja tens o efeito de comboio.

Com todas disponíveis e durações conhecidas, ordenar por duração minimiza a espera média, mas não resolve automaticamente todas as situações com chegadas futuras.

A duração pode ser estimada por média exponencial:

τn+1=αtn+(1−α)τn,0≤α≤1.\tau_{n+1}=\alpha t_n+(1-\alpha)\tau_n,\quad 0\leq\alpha\leq1.

tnt_n é a rajada medida e τn\tau_n a previsão anterior. Para τn=8\tau_n=8, tn=4t_n=4 e α=0,5\alpha=0,5, a próxima previsão é 6. Um α\alpha elevado dá mais peso à medição recente.

Chegadas diferentes e SRTF

A chega em 0 com duração 5, B em 1 com duração 3 e C em 2 com duração 1. Em SJF não preemptivo, A começa por ser o único disponível e corre até 5. Seguem-se C até 6 e B até 9. As esperas são A=0, B=5, C=3, média 8/38/3.

SRTF escolhe o menor tempo restante. Usamos desempate pela chegada mais antiga:

InstanteDecisão
0A começa
1A tem 4 restantes; B tem 3, por isso B interrompe A
2B tem 2 restantes; C tem 1, por isso C corre
3C termina; B tem 2 e A tem 4, por isso B retoma
5B termina e A retoma até 9

Fins A=9, B=5, C=3. Esperas 9−0−5=49-0-5=4, 5−1−3=15-1-3=1 e 3−2−1=03-2-1=0, média 5/35/3. Ao surgir uma tarefa curta, compara com o tempo restante da atual, não com a sua duração inicial.

Round Robin

Round Robin dá até um quantum qq a cada tarefa e coloca no fim da fila quem ainda não terminou. Com os quatro processos do primeiro exemplo e q=3q=3:

FCFSP10P26P39P41115SJFP30P22P45P1915RR, q=3P10P23P36P48P111P41415
Cada retângulo é um intervalo de CPU. Face a FCFS, Round Robin antecipa o primeiro serviço de P2, P3 e P4, mas faz P1 voltar à fila.

Os fins são 14, 6, 8 e 15; as esperas são 8, 3, 6 e 11, média 7. Segue a fila depois de cada fatia: P1 corre 0-3 e vai para o fim; P2 corre 3-6 e termina; P3 corre 6-8 e termina; P4 corre 8-11 e volta ao fim; P1 corre 11-14 e termina; P4 corre 14-15 e termina. P1 não espera apenas até à primeira fatia: volta a esperar enquanto outros correm. Os tempos de primeira resposta são 0, 3, 6 e 8. FCFS tinha 0, 6, 9 e 11, por isso Round Robin melhora aqui a resposta dos últimos, embora a espera média aumente.

Para comparar, mantém as mesmas rajadas e muda só o quantum para 2. O traço fica:

IntervaloProcessoEfeito no fim da fatia
0–2P1Restam 4; volta ao fim
2–4P2Resta 1; volta ao fim
4–6P3Termina
6–8P4Restam 2; volta ao fim
8–10P1Restam 2; volta ao fim
10–11P2Termina
11–13P4Termina
13–15P1Termina

P1, P2, P3 e P4 terminam em 15, 11, 6 e 13. As esperas são 15-6=9, 11-3=8, 6-2=4 e 13-4=9, média 7,5. Diminuir o quantum não garante reduzir a espera média: o objetivo de resposta pode exigir outro compromisso.

Um quantum muito grande aproxima o modelo de FCFS. Um quantum muito pequeno aumenta a frequência de trocas. Se cada fatia útil tiver duração qq e cada troca custo cc, uma aproximação à fração útil é q/(q+c)q/(q+c), desde que existam tarefas para alternar e fatias completas.

Quando a aproximação falha

A fração q/(q+c)q/(q+c) supõe fatias cheias e fila sempre ocupada. Com rajadas mais curtas que o quantum ou CPU por vezes sem trabalho, mede antes os intervalos reais de execução e troca.

Prioridades e filas

Uma prioridade fixa pode deixar uma tarefa esperar indefinidamente se chegam sempre tarefas de prioridade superior. Isto é inanição. Aging aumenta a prioridade de quem espera para combater esse problema.

Em filas multinível, tarefas de classes diferentes ficam em filas fixas, que podem ter políticas próprias. É preciso definir como a CPU é repartida entre filas. Prioridade estrita entre elas pode causar inanição; quotas de tempo dão outro compromisso.

Em filas multinível com realimentação, ou MLFQ, as tarefas podem mudar de fila segundo o comportamento observado. Um modelo comum começa com prioridade alta, reduz a prioridade de quem consome a sua quota e periodicamente promove tarefas para evitar inanição. Especifica os quantums e as regras de promoção: MLFQ não designa um único algoritmo com resultados universais.

Para tarefas periódicas, como ler um sensor de 4 em 4 ms, usa o modelo de custo e período da secção de tempo real, não uma fila multinível genérica. O CFS histórico e o EEVDF atual do Linux inspiram-se em justiça proporcional, mas os seus detalhes e parâmetros não são o modelo de resposta dos exercícios.

Justiça proporcional e Linux

O modelo CFS organiza tarefas por vruntime, tempo executado ponderado pelo peso. Escolher quem tem menor vruntime tenta compensar quem recebeu menos CPU. Maior peso faz o vruntime crescer mais devagar para a mesma duração física, dando uma maior quota de CPU. Em nice, valores menores correspondem a maior prioridade e peso; não invertas esta relação.

Por exemplo, se os pesos de A e B são 2 e 1, a divisão ideal com ambos sempre prontos é 2/32/3 para A e 1/31/3 para B. Uma árvore ordenada permite encontrar o menor vruntime. Este é um modelo estudado; Linux moderno está a transitar para EEVDF, que escolhe entre tarefas elegíveis pela deadline virtual. Não confundir a deadline virtual com o prazo físico de uma tarefa de tempo real.

Tempo real: RMS e EDF

Uma tarefa periódica tem custo máximo CiC_i, período PiP_i e deadline. Uma hard deadline é um requisito cujo incumprimento é falha; uma soft deadline admite atraso com perda de qualidade.

No modelo com uma CPU, tarefas independentes, preempção, custo desprezável e deadlines iguais aos períodos, RMS dá prioridade fixa ao menor período. Para nn tarefas, a condição suficiente

U=∑iCi/Pi≤n(21/n−1)U=\sum_i C_i/P_i\leq n(2^{1/n}-1)

prova escalonabilidade. Exceder o limite não prova impossibilidade: podes precisar de analisar a linha do tempo ou os tempos de resposta. EDF escolhe a job pronta com deadline absoluta mais próxima. Nas mesmas hipóteses, U≤1U\leq1 é o critério de escalonabilidade de EDF.

Para A com C=1,P=4C=1,P=4 e B com C=2,P=5C=2,P=5, U=0,25+0,4=0,65U=0,25+0,4=0,65. O limite de RMS para duas tarefas é cerca de 0,828, por isso ambos os critérios aceitam o conjunto. Para A com C=2,P=4C=2,P=4 e B com C=3,P=6C=3,P=6, U=1U=1 passa em EDF, mas não no limite suficiente de RMS. Neste caso RMS falha: A corre 0–2, B 2–4, A 4–6, e a primeira job de B ainda precisa de uma unidade na sua deadline 6.

Exercícios

Espera média com preempção

A chega em 0 com duração 5, B em 1 com 3 e C em 2 com 1. Aplica SRTF, sem custos e com desempate pela chegada mais antiga. Qual é a espera média? Arredonda a duas casas.

Pista
Revê a escolha em cada chegada.
Mais uma pista
Os fins são A=9, B=5 e C=3.
Solução

A corre 0–1, B 1–2, C 2–3, B 3–5 e A 5–9. Cada chegada exige comparar tempos restantes. As esperas são 9-0-5=4, 5-1-3=1 e 3-2-1=0. A média é 5/3, arredondada para 1,67.

Erros frequentes

Subtrair só a chegada ou comparar a nova tarefa com a duração original da atual.

Voltar à explicação
Espera depois de várias fatias

P1 e P2 chegam em 0, nesta ordem, com durações 5 e 4. Round Robin tem quantum 2, sem custos. Quanto espera P2 no total?

Pista
Faz a sequência de fatias até ambos terminarem.
Mais uma pista
P1:0-2, P2:2-4, P1:4-6, P2:6-8, P1:8-9.
Solução

P2 termina em 8. O retorno é 8 e a duração é 4, por isso espera 4 unidades, não 5. A espera é 2 antes da primeira fatia e 2 entre as duas fatias.

Erros frequentes

Confundir a espera com o instante de fim ou com o retorno do outro processo.

Voltar à explicação
Exceder um limite suficiente

Duas tarefas têm utilização total 0,9. O limite suficiente de RMS é aproximadamente 0,828. Isto prova que RMS falha? E o que permite concluir EDF numa CPU, com tarefas independentes e preemptivas, custos desprezáveis e deadlines iguais aos períodos?

Pista

Um teste suficiente pode ser inconclusivo fora do limite.

Mais uma pista

Para EDF, compara a utilização com 1 nas hipóteses indicadas.

Solução

Exceder 0,828 não prova falha de RMS; é preciso outro teste ou analisar a execução. No modelo indicado, EDF admite utilização até 1, por isso 0,9 cumpre o critério.

Confere a tua resposta:

  • Distingui condição suficiente de necessária.
  • Indiquei as hipóteses de EDF.
  • Não concluí impossibilidade só pelo limite de RMS.

Erros frequentes

Usar uma condição suficiente como necessária ou aplicar EDF sem verificar as deadlines.

Voltar à explicação
FCFS e SJF com uma chegada tardia

P1 chega em 0 com rajada 4; P2 chega em 1 com rajada 2; P3 chega em 2 com rajada 1. Uma CPU, sem I/O nem custos de troca. Aplica FCFS e SJF não preemptivo. Desenha os intervalos, calcula a espera de cada processo e a média. Neste modelo, espera e primeira resposta coincidem?

Pista
SJF escolhe apenas entre processos já prontos.
Solução

Em 0 só P1 está pronto. Ambas as políticas o executam até 4; SJF não fica à espera de uma tarefa curta futura.

FCFS segue P2 de 4 a 6 e P3 de 6 a 7. As esperas são 0, 4-1=3 e 6-2=4; a média é 7/3, cerca de 2,33.

Em SJF, no instante 4 estão disponíveis P2 e P3. Escolhe P3 de 4 a 5 e P2 de 5 a 7. As esperas de P1, P2, P3 são 0, 5-1=4 e 4-2=2; a média é 2. Espera e primeira resposta coincidem aqui, pois cada processo tem uma única rajada não preemptiva e sem I/O.

Confere a tua resposta:

  • Comecei P1 em 0 sem esperar por chegadas futuras.
  • Obtive fins 4,6,7 em FCFS e 4,7,5 em SJF.
  • Calculei espera e primeira resposta de cada processo.
Voltar à explicação
Espera pronta e espera por I/O

Uma CPU usa Round Robin com quantum 2 e custos nulos. A e B chegam em 0, nesta ordem; C chega em 1. A executa uma rajada de CPU de 2, bloqueia durante 3 unidades de I/O e volta para uma rajada de CPU de 1. B tem uma rajada de 5 e C uma de 1. Quem termina I/O entra no fim da fila de prontos. I/O não ocupa a CPU.

Desenha a linha do tempo e calcula, por processo, retorno, tempo à espera de CPU e primeira resposta. Em 5, B já está na fila antes de A regressar.

Pista
O bloqueio começa depois de A concluir a primeira rajada.
Solução

O traço é A 0-2, B 2-4, C 4-5, B 5-7, A 7-8, B 8-9. A está bloqueado de 2 a 5 e não recebe fatias nesse intervalo. Em 4, B volta ao fim da fila atrás de C; quando A regressa, fica atrás de B.

ProcessoRetornoEspera por CPUPrimeira resposta
A8-0=88-3-3=20
B9-0=99-5=42
C5-1=44-1=34-1=3

A usou três unidades de CPU e esteve três bloqueado. As outras duas são espera na fila de prontos, de 5 a 7. Subtrair apenas a CPU ao retorno daria 5 e confundiria espera por I/O com espera por CPU.

Confere a tua resposta:

  • Retirei A da fila de prontos durante as três unidades de I/O.
  • Obtive fins A=8, B=9 e C=5.
  • Separei as esperas prontas 2, 4 e 3 do tempo bloqueado.
Voltar à explicação

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.