Escalonamento de Processos EDF Algorithm
Flávio Couto ([email protected])
EDF Scheduler
• Software que executa um algoritmo para encontrar um escalonamento ótimo em um único processador para um dado conjunto de processos, tal que cada processos inicia sua execução após seu release time e completa seu tempo de execução antes de seu deadline, e que um dado conjunto de relações de precedência e um dado conjunto de relações de exclusão são satisfeitas. Este algoritmo pode ser
aplicado para o problema do escalonamento pre-run-time de processos com relações arbitrárias de precedência e de exclusão em hard-real-time systems
Conceitos Importantes
• Release Time
– instante de tempo a partir do qual o processo pode iniciar a sua execução
• Computation Time
– tempo de execução de um processo
• Deadline
– instante de tempo máximo em que um processo
deve terminar sua execução para satisfazer os
requisitos temporais
Conceitos Importantes (Cont.)
• Escalonador Pre-run-time
– Decisões de escalonamento são tomadas antes do início da execução dos processos
• Relação de Precedência
– A precede B : processo A deve terminar sua execução antes do início da execução de B
• Relação de Exclusão
– A exclui B : processo A não pode ser
preemptado pelo processo B
Relação de Precedência
Processo 1 precede Processo2:
•Situação Incorreta
Relação de Precedência
Processo 1 precede Processo2:
•Situação Incorreta
Relação de Precedência
Processo 1 precede Processo2:
•Situação Correta
Relação de Exclusão
Processo 1 exclui Processo2:
•Situação Incorreta
Relação de Exclusão
Processo 1 exclui Processo2:
•Situação Correta
Algoritmo da Implementação
O algoritmo usado utiliza a técnica branch-and-bound. Ele tem uma árvore de busca onde no nó raiz é utilizada a técnica
Earliest-deadline-first para computar um “solução válida inicial” que satisfaça as restrições de release time e todas relações de exclusão e precedência existentes inicialmente.
Então sistematicamente vamos desenvolvendo aquela solução inicial até um escalonamento optimal ou feasible ser encontrado.
Solução Válida
(Escalonamento Válido)
Deverá satifazer as seguintes condições:
i, j Conj(Processos)
• startTime[i] >= releaseTime[i]
• Se i precede j
– completionTime[i] <= startTime[j]
• Se i exclui j e startTime[i] < startTime[j]
– completionTime[i] <= startTime[j]
Solução Inicial
Earliest-deadline-first
• Os processos com os deadlines menores devem ser executados antes dos processos com os deadlines “maiores”, desde que
satisfaçam as relações de precedência e
exclusão entre os processos, além do
release time de cada processos
Solução Inicial
Earliest-deadline-first
r[P0]= 40 ; c[P0]=20; d[P0]=110;
r[P1]= 60 ; c[P1]=20; d[P1]= 90;
r[P2]= 50 ; c[P2]=20; d[P2]= 91;
r[P3]= 0 ; c[P3]=20; d[P3]=120;
P0 exclui P1 - P2 exclui P0 P1 exclui P0 - P1 exclui P2 P0 exclui P2 - P2 exclui P1
Solução Inicial
Earliest-deadline-first
r[P0]= 0 ; c[P0]=60; d[P0]=122;
r[P1]= 20 ; c[P1]=20; d[P1]=121;
r[P2]= 30 ; c[P2]=20; d[P2]=120;
r[P3]= 90 ; c[P3]=20; d[P3]=110;
P0 exclui P3
Refinamento da Solução Inicial
Em cada nó da árvore de busca, nós encontramos o último segmento na solução válida daquele nó. Nós identificamos conjuntos de segmentos de “expansão” G1 e G2 tal que esta solução possa ser refinada.
• G1 => o último segmento da solução do nó que será expandido é escalonado antes de um segmento de G1.
• G2 => o último segmento da solução do nó que será expandido preempta um segmento de G2.
OBS: último segmento: segmento que é responsável pelo lateness(completionTime - deadline) do escalonamento.