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.
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:
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:
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):
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.
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.
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..