Vamos discutir as diferenças entre o Planejamento Preventivo e Não Preventivo em resumo com a ajuda do gráfico de comparação mostrado abaixo.
Gráfico de comparação
Base para Comparação | Agendamento preventivo | Agendamento Não Preemptivo |
---|---|---|
Basic | Os recursos são alocados para um processo por um tempo limitado. | Uma vez que os recursos são alocados para um processo, o processo o mantém até completar seu tempo de burst ou mudar para o estado de espera. |
Interromper | O processo pode ser interrompido no meio. | O processo não pode ser interrompido até que termine ou mude para o estado de espera. |
Fome | Se um processo de alta prioridade chegar com freqüência à fila pronta, o processo de baixa prioridade pode morrer de fome. | Se um processo com tempo de burst longo estiver executando a CPU, outro processo com menos tempo de burst da CPU pode morrer de fome. |
A sobrecarga | O agendamento preventivo tem overheads de agendamento dos processos. | A programação não preventiva não possui despesas gerais. |
Flexibilidade | O agendamento preventivo é flexível. | A programação não preemptiva é rígida. |
Custo | O agendamento preventivo é associado ao custo. | A programação não preemptiva não é de custo associativo. |
Definição de Agendamento Preemptivo
O agendamento preventivo é aquele que pode ser feito nas circunstâncias em que um processo passa do estado de execução para o estado pronto ou do estado de espera para estado pronto . Aqui, os recursos (ciclos da CPU) são alocados para o processo pelo tempo limitado e, em seguida, são removidos, e o processo é colocado novamente na fila pronta, se ainda houver tempo de burst da CPU. O processo fica na fila pronta até a próxima chance de execução.
Se um processo com alta prioridade chegar na fila pronta, ele não precisará esperar que o processo atual conclua seu tempo de burst. Em vez disso, o processo atual é interrompido no meio da execução e é colocado na fila pronta até que o processo com alta prioridade esteja utilizando os ciclos da CPU. Desta forma, cada processo na fila pronta ganha algum tempo para executar a CPU. Isso torna o agendamento preventivo flexível, mas aumenta a sobrecarga de alternar o processo do estado de execução para estado pronto e vice-versa.
Algoritmos que trabalham com escalonamento preventivo são Round Robin. Shortest First Job (SJF) e Priority Scheduling podem ou não estar sob programação antecipada.
Vamos dar um exemplo de Agendamento Preventivo, veja na figura abaixo. Temos quatro processos P0, P1, P2, P3. Dos quais, P2 chega no tempo 0. Assim, a CPU é alocada para o processo P2, pois não há outro processo na fila. Enquanto isso, P2 estava executando, P3 chega no tempo 1, agora o tempo restante para o processo P2 (5 milissegundos) que é maior que o tempo requerido por P3 (4 milisegundos). Então, a CPU é alocada para o processador P3.
Definição de Programação Não Preemptiva
Agendamento não preemptivo é aquele que pode ser aplicado nas circunstâncias quando um processo termina, ou um processo muda de execução para estado de espera . Na programação não preemptiva, uma vez que os recursos (CPU) são alocados para um processo, o processo mantém a CPU até que seja terminada ou atinja um estado de espera.
Ao contrário do agendamento preventivo, o agendamento não preemptivo não interrompe um processo executando a CPU no meio da execução. Em vez disso, ele aguarda o processo concluir seu tempo de burst da CPU e, em seguida, ele pode alocar a CPU para outro processo.
No planejamento não preventivo, se um processo com tempo de burst longo da CPU estiver sendo executado, o outro processo terá que esperar por um longo período, o que aumenta o tempo médio de espera dos processos na fila pronta. No entanto, o planejamento não preemptivo não tem nenhuma sobrecarga de alternar os processos da fila pronta para a CPU, mas torna o agendamento rígido, pois o processo em execução não é nem mesmo antecipado para um processo com prioridade mais alta.
Principais diferenças entre agendamento preemptivo e não preemptivo
- A diferença básica entre escalonamento preemptivo e não preemptivo é que no escalonamento preemptivo a CPU é alocada aos processos pelo tempo limitado . Enquanto em programação não preemptiva, a CPU é alocada para o processo até que ela termine ou mude para o estado de espera .
- O processo de execução no planejamento preemptivo é interrompido no meio da execução, enquanto o processo de execução no planejamento não preemptivo não é interrompido no meio da execução.
- O agendamento preventivo tem a sobrecarga de alternar o processo do estado pronto para o estado de execução, vice-versa e manter a fila pronta. Por outro lado, o planejamento não preemptivo não tem nenhuma sobrecarga de alternar o processo do estado em execução para o estado pronto.
- No planejamento preventivo, se um processo com alta prioridade frequentemente chegar na fila pronta, o processo com baixa prioridade terá que aguardar por um longo período e poderá ter que passar fome. Por outro lado, no escalonamento não preventivo, se a CPU é alocada para o processo com maior tempo de burst, então os processos com pequeno tempo de burst podem ter que morrer de fome.
- O agendamento preventivo é bastante flexível porque os processos críticos têm permissão para acessar a CPU à medida que chegam à fila pronta, não importa qual processo esteja sendo executado atualmente. A programação não preemptiva é rígida, pois mesmo que um processo crítico entre na fila pronta, o processo que está executando a CPU não é perturbado.
- O agendamento preventivo é de custo associativo, pois ele precisa manter a integridade dos dados compartilhados, o que não é o caso do agendamento não preemptivo.
Conclusão:
Não é que o agendamento preventivo seja melhor do que o agendamento não preventivo ou o vise-verse. Tudo depende de como um agendamento minimiza o tempo médio de espera dos processos e maximiza a utilização da CPU.