Diferença entre agendamento preemptivo e não preemptivo em sistemas operacionais

Programação do processador (ou Programação de CPU) determina quais processos são atribuídos e removidos da CPU, com base em modelos de agendamento, como Preemptivo e Programação não preventiva (também conhecido como Agendamento cooperativo).

Os sistemas mais antigos poderiam operar em modos independentes simples, mas com a crescente necessidade de sistemas flexíveis e responsivos, além da virtualização, o gerenciamento eficiente do multiprocessamento fornece resposta rápida a todas as solicitações de processamento de tarefas.

As unidades de agendamento são frequentemente chamadas de tarefa e é tarefa do agendador executar e gerenciar essas tarefas sempre que necessário; o Agendador seleciona a tarefa a ser removida e atribuída à CPU para processamento, de acordo com o modelo de agendamento usado.

Como o Agendador sabe quais tarefas são prioritárias?

O Agendador precisa executar um processo de seleção justo e eficiente, levando em consideração solicitações de processamento dinâmicas e variáveis ​​e aproveitando ao máximo os ciclos da CPU.

As tarefas podem estar em dois estados durante o processamento:

  1. Em um Explosão de CPU onde a CPU está executando cálculos para processar a tarefa (o período para uma CPU Burst varia de tarefa para tarefa e de programa para programa).
  2. Em um Explosão de entrada / saída (E / S) aguardando que os dados sejam recebidos ou enviados do sistema.

Quando a CPU está ociosa, o Agendador lê o Fila pronta, e seleciona a próxima tarefa a ser executada. Então, é o Expedidor que fornece à tarefa selecionada o controle da CPU, por isso precisa ser rápido! Qualquer momento ocupado pelo expedidor é conhecido como Latência de Despacho.

Existem diferentes estruturas e parâmetros personalizados para definir o Fila pronta, bem como vários métodos que podem ser usados ​​para gerenciar as complexidades do processo de agendamento.

Geralmente, trata-se de otimizar e maximizar a utilização da CPU, taxa de transferência, etc..

O Agendador deve tomar uma decisão durante um dos seguintes estágios:

  1. Quando a tarefa muda de um Corrida para um Estado em espera (por exemplo, aguardando durante uma solicitação de E / S).
  2. Quando a tarefa muda de Corrida para pronto (por exemplo, respondendo a uma interrupção).
  3. Quando a tarefa muda de Esperando para pronto (por exemplo, uma solicitação de E / S é concluída).
  4. Quando o Tarefa

Uma nova tarefa deve ser selecionada se os estágios 1 ou 4 ocorrerem para garantir a utilização total da CPU e, nos estágios 2 e 3, a tarefa pode continuar em execução ou uma nova é selecionada..

Depois de entender como uma tarefa é processada, vejamos dois modelos de agendamento que lidam com interrupções de CPU.

Ambos têm recursos semelhantes com tarefas, estados de tarefas, filas e prioridades (estáticas ou dinâmicas):

  • Programação não preventiva é quando uma tarefa é executada até parar (voluntariamente) ou terminar. O Windows® teve Agendamento Não Preemptivo até o Windows 3.x, após o qual foi alterado para Preemptivo do Windows 95.
  • Programação Preemptiva é onde uma tarefa pode ser suspensa à força por uma interrupção da CPU, ao contrário do Non-Preemptive, onde a tarefa é executada até liberar o controle da CPU.

Programação não preventiva

As tarefas em um sistema não preventivo serão executadas até a conclusão.

O Agendador verifica os estados de todas as tarefas e agenda a próxima tarefa de maior prioridade com um pronto Estado.

Com o agendamento não preventivo, uma vez que uma tarefa tem sua atribuição à CPU, ela não pode ser retirada, mesmo que tarefas curtas precisem esperar que tarefas mais longas sejam concluídas.

O gerenciamento de agendamento em todas as tarefas é "justo" e os tempos de resposta são previsíveis, pois tarefas de alta prioridade não podem aumentar as tarefas em espera na fila.

O Agendador garante que cada tarefa obtenha sua parte da CPU, evitando atrasos em qualquer tarefa. A 'quantidade de tempo' alocada para a CPU pode não ser necessariamente igual, pois depende de quanto tempo a tarefa leva para ser concluída.

Programação Preemptiva

Esse modelo de agendamento permite que as tarefas sejam interrompidas - em contraste com o agendamento não preventivo, que possui uma abordagem de "execução até a conclusão".

As interrupções, que podem ser iniciadas a partir de chamadas externas, chama o Agendador para pausar uma tarefa em execução para gerenciar outra tarefa de prioridade mais alta - para que o controle da CPU possa ser antecipado.

A tarefa de maior prioridade em um pronto estado é executado, permitindo resposta rápida a eventos em tempo real.

Alguns dos contras com o Planejamento Preemptivo envolvem o aumento de custos indiretos nos recursos ao usar interrupções e problemas podem ocorrer com duas tarefas que compartilham dados, pois uma pode ser interrompida durante a atualização de estruturas de dados compartilhadas e pode afetar negativamente a integridade dos dados.

Por outro lado, é prático poder pausar uma tarefa para gerenciar outra que possa ser crítica.

Em suma

Muitas variações e dependências em diferentes políticas podem ser definidas, como o uso de um “Política de Round Robin [i]” onde cada tarefa (com prioridade igual) é executada uma vez e depois colocada no final da fila, para o próximo ciclo.

Outras políticas incluem Primeiro a entrar, primeiro a sair, Menor trabalho primeiro, Menor trabalho-seguinte, Menor tempo restante, etc.

A análise de dados históricos pode fornecer informações sobre aspectos, como a taxa na qual novas tarefas chegam, a CPU e as explosões de E / S, etc., para que as distribuições de probabilidade possam calcular características dos tempos de espera das tarefas, armando assim os administradores com dados relevantes para definir modelos de agendamento..