Recomendado, 2024

Escolha Do Editor

Diferença entre Agendamento Preemptivo e Não Preemptivo no SO

É responsabilidade do agendador de CPU alocar um processo à CPU sempre que a CPU estiver no estado inativo. O agendador de CPU seleciona um processo da fila pronta e aloca o processo à CPU. O agendamento que ocorre quando um processo passa do estado de execução para o estado pronto ou do estado de espera para estado pronto é chamado de Agendamento preventivo . Nas mãos, o agendamento que ocorre quando um processo termina ou muda de execução para estado de espera para esse tipo de escalonamento de CPU é chamado de Programação Não Preemptiva . A diferença básica entre o agendamento preemptivo e não preventivo está no próprio nome. Isso é um agendamento preventivo pode ser preempted; os processos podem ser agendados. Na programação não preemptiva, os processos não podem ser agendados.

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çãoAgendamento preventivoAgendamento Não Preemptivo
BasicOs 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.
InterromperO processo pode ser interrompido no meio.O processo não pode ser interrompido até que termine ou mude para o estado de espera.
FomeSe 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 sobrecargaO agendamento preventivo tem overheads de agendamento dos processos.A programação não preventiva não possui despesas gerais.
FlexibilidadeO agendamento preventivo é flexível.A programação não preemptiva é rígida.
CustoO 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.

Enquanto isso, o P3 estava em execução, o processo P1 chega no tempo 2. Agora, o tempo restante para P3 (3 milissegundos) é menor que o tempo requerido pelos processos P1 (4 milissegundos) e P2 (5 milissegundos). Então P3 tem permissão para continuar. Enquanto P3 está continuando, o processo P0 chega ao tempo 3, agora o tempo restante para P3 (2 milissegundos) é igual ao tempo requerido por P0 (2 milissegundos). Então, P3 continua e depois que P3 termina, a CPU é alocada para P0, pois tem menos tempo de burst do que o outro. Depois que P0 termina, a CPU é alocada para P1 e depois para P2.

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.

Vamos resolver o exemplo de programação acima de maneira não preemptiva. Como inicialmente o processo P2 chega no tempo 0, então a CPU é alocada para o processo P2 leva 6 milissegundos para executar. Entre todos os processos, ou seja, P0, P1, P3 chega na fila pronta. Mas todas as esperas até o processo P2 completar o seu tempo de burst da CPU. Então o processo que chega depois de P2, ou seja, o P3 é então alocado na CPU até terminar o tempo de rajada. Similarmente, então P1 é executado, e a CPU é posteriormente dada ao processo P0.

Principais diferenças entre agendamento preemptivo e não preemptivo

  1. 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 .
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

Top