Agendamento Preemptivo e Não Preemptivo
Principais diferenças entre agendamento preemptivo e não preemptivo
- No escalonamento preemptivo, a CPU é alocada para os processos por um período de tempo específico, e a CPU de escalonamento não preemptivo é alocada para o processo até que ele termine.
- No agendamento preemptivo, as tarefas são alternadas com base na prioridade, enquanto no agendamento não preemptivo não ocorre nenhuma alternância.
- O algoritmo preemptivo tem a sobrecarga de mudar o processo do estado pronto para o estado em execução, enquanto o agendamento não preemptivo não tem essa sobrecarga de mudança.
- O agendamento preemptivo é flexível, enquanto o agendamento não preemptivo é rígido.

O que é Agendamento Preemptivo?
O agendamento preemptivo é um método de agendamento em que as tarefas são atribuídas principalmente com suas prioridades. Às vezes é importante executar uma tarefa com prioridade mais alta antes de outra tarefa com prioridade mais baixa, mesmo que a tarefa com prioridade mais baixa ainda esteja em execução.
Nesse momento, a tarefa de menor prioridade é mantida por algum tempo e reinicia quando a tarefa de maior prioridade termina sua execução.
O que é Agendamento Não Preemptivo?
Neste tipo de método de escalonamento, a CPU foi alocada para um processo específico. O processo que mantém a CPU ocupada irá liberá-la alternando o contexto ou encerrando.
É o único método que pode ser usado para diversas plataformas de hardware. Isso porque ele não precisa de hardware especializado (por exemplo, um timer), como o agendamento preemptivo.
O escalonamento não preemptivo ocorre quando um processo entra voluntariamente no estado de espera ou termina.
Agendamento Preemptivo versus Não Preemptivo: Tabela de Comparação
Aqui estão as comparações diretas entre agendamento preemptivo e não preemptivo. As principais diferenças entre agendamento preemptivo e não preemptivo no sistema operacional são as seguintes:
| Agendamento Preemptivo | Agendamento não preventivo |
|---|---|
| Um processador pode ser impedido de executar os diferentes processos no meio de qualquer execução de processo atual. | Uma vez que o processador inicia sua execução, ele deve terminá-la antes de executar o outro. Não pode ser pausado no meio. |
| A utilização da CPU é mais eficiente em comparação com o agendamento não preemptivo. | A utilização da CPU é menos eficiente em comparação com o agendamento preemptivo. |
| O tempo de espera e resposta do agendamento preemptivo é menor. | O tempo de espera e de resposta do método de agendamento não preemptivo é maior. |
| O agendamento preventivo é priorizado. O processo de maior prioridade é aquele que é utilizado atualmente. | Quando qualquer processo entra no estado de execução, o estado desse processo nunca é excluído do agendador até que ele termine seu trabalho. |
| O agendamento preventivo é flexível. | O agendamento não preemptivo é rígido. |
| Exemplos: – Tempo restante mais curto primeiro, Round Robin, etc. | Exemplos: Primeiro a chegar, primeiro a servir, trabalho mais curto primeiro, agendamento prioritário, etc. |
| O algoritmo de agendamento preemptivo pode ser antecipado, ou seja, o processo pode ser agendado | No processo de agendamento não preemptivo não pode ser agendado |
| Neste processo, a CPU é alocada aos processos por um período de tempo específico. | Neste processo, a CPU é alocada para o processo até que ele termine ou mude para o estado de espera. |
| O algoritmo preemptivo tem a sobrecarga de mudar o processo do estado pronto para o estado em execução e vice-versa. | O agendamento não preemptivo não tem essa sobrecarga de mudar o processo da execução para o estado pronto. |
Vantagens do agendamento preventivo
Aqui estão os prós/benefícios do método de agendamento preemptivo:
- O método de escalonamento preemptivo é mais robusto, abordagem para que um processo não possa monopolizar a CPU
- Escolha da tarefa em execução reconsiderada após cada interrupção.
- Cada evento causa interrupção das tarefas em execução
- O sistema operacional garante que o uso da CPU seja o mesmo para todos os processos em execução.
- Neste, o uso da CPU é o mesmo, ou seja, todos os processos em execução farão uso da CPU igualmente.
- Este método de agendamento também improvisa o tempo médio de resposta.
- O agendamento preemptivo é benéfico quando o usamos para o ambiente de multiprogramação.
Vantagens do agendamento não preemptivo
Aqui estão os prós/benefícios do método de agendamento não preemptivo:
- Oferece baixa sobrecarga de agendamento
- Tende a oferecer alto rendimento
- É um método conceitualmente muito simples
- Less recursos computacionais necessários para agendamento
Desvantagens do agendamento preventivo
A seguir estão as desvantagens do agendamento preventivo:
- Precisa de recursos computacionais limitados para agendamento
- O agendador leva mais tempo para suspender a tarefa em execução, mudar o contexto e despachar a nova tarefa recebida.
- O processo de baixa prioridade precisa esperar mais tempo se alguns processos de alta prioridade chegarem continuamente.
Desvantagens do agendamento não preemptivo
Aqui estão os contras/desvantagens do método de agendamento não preemptivo:
- Pode levar à fome, especialmente para tarefas em tempo real
- Bugs podem fazer com que uma máquina congele
- Ele pode fazer em tempo real e Agendamento prioritário difícil
- Tempo de resposta ruim para processos
Exemplo de agendamento não preemptivo
No escalonamento SJF não preemptivo, uma vez que o ciclo da CPU é alocado para o processo, o processo o retém até atingir um estado de espera ou ser encerrado.
Considere os cinco processos a seguir, cada um com seu próprio tempo de burst e tempo de chegada exclusivos.
| Fila de Processo | Tempo de explosão | Tempo de chegada |
|---|---|---|
| P1 | 6 | 2 |
| P2 | 2 | 5 |
| P3 | 8 | 1 |
| P4 | 3 | 0 |
| P5 | 4 | 4 |
Passo 0) No tempo=0, P4 chega e inicia a execução.
Passo 1) No tempo = 1, chega o Processo P3. Porém, P4 ainda precisa de 2 unidades de execução para ser concluído. Ele continuará a execução.
Passo 2) No tempo =2, o processo P1 chega e é adicionado à fila de espera. P4 continuará a execução.
Passo 3) No tempo = 3, o processo P4 finalizará sua execução. O tempo de burst de P3 e P1 é comparado. O processo P1 é executado porque seu tempo de burst é menor comparado ao P3.
Passo 4) No tempo = 4, o processo P5 chega e é adicionado à fila de espera. P1 continuará a execução.
Passo 5) No tempo = 5, o processo P2 chega e é adicionado à fila de espera. P1 continuará a execução.
Passo 6) No tempo = 9, o processo P1 finalizará sua execução. O tempo de burst de P3, P5 e P2 é comparado. O processo P2 é executado porque seu tempo de burst é o menor.
Passo 7) No tempo=10, P2 está em execução e P3 e P5 estão na fila de espera.
Passo 8) No tempo = 11, o processo P2 finalizará sua execução. O tempo de burst de P3 e P5 é comparado. O processo P5 é executado porque seu tempo de burst é menor.
Passo 9) No tempo = 15, o processo P5 finalizará sua execução.
Passo 10) No tempo = 23, o processo P3 finalizará sua execução.
Passo 11) Vamos calcular o tempo médio de espera para o exemplo acima.
Wait time P4= 0-0=0 P1= 3-2=1 P2= 9-5=4 P5= 11-4=7 P3= 15-1=14 Average Waiting Time= 0+1+4+7+14/5 = 26/5 = 5.2
Exemplo de agendamento preventivo
Considere isto a seguir três processos em Rodada
| Fila de Processo | Tempo de explosão |
|---|---|
| P1 | 4 |
| P2 | 3 |
| P3 | 5 |
Passo 1) A execução começa com o processo P1, que possui tempo de burst 4. Aqui, cada processo é executado por 2 segundos. P2 e P3 ainda estão na fila de espera.
Etapa 2) No tempo =2, P1 é adicionado ao final da Fila e P2 começa a executar
Passo 3) Em time=4 , P2 é preemptado e adicionado no final da fila. P3 começa a executar.
Passo 4) Em time=6 , P3 é preemptado e adicionado no final da fila. P1 começa a executar.
Passo 5) Em time=8 , P1 tem um tempo de burst de 4. Ele concluiu a execução. P2 inicia execução
Passo 6) P2 tem tempo de burst de 3. Já foi executado por 2 intervalos. No tempo=9, P2 completa a execução. Então, P3 inicia a execução até terminar.
Passo 7) Vamos calcular o tempo médio de espera para o exemplo acima.
Wait time P1= 0+ 4= 4 P2= 2+4= 6 P3= 4+3= 7


















