O agendamento de processos de compartilhamento de tempo do Linux é um sistema complexo e de várias camadas projetado para distribuir de maneira justa e eficiente o tempo da CPU entre vários processos. O núcleo é o agendador do kernel, que emprega vários algoritmos e estruturas de dados para atingir seus objetivos. Aqui está um colapso dos principais aspectos:
1. Entidades de agendamento: * Processos
: A unidade fundamental de agendamento. Cada processo recebe uma fatia do tempo da CPU.
* threads
: Mais leve do que os processos, compartilhando o mesmo espaço de memória. Os agendadores modernos tratam os threads de maneira semelhante aos processos, geralmente agendando -os de forma independente dentro de um processo.
*
Processos em tempo real (opcional): Esses processos têm requisitos de tempo mais rígidos e podem ter prioridade em relação a outros processos. Eles são gerenciados por um mecanismo de agendamento separado (por exemplo, agendamento em tempo real).
2. Algoritmos de agendamento (histórico e atualmente): A Linux desenvolveu seus algoritmos de agendamento ao longo do tempo. As primeiras versões usaram algoritmos mais simples, mas os núcleos modernos usam uma abordagem sofisticada:
*
Scheduler completamente justo (cfs): Este é o agendador padrão nos kernels Linux modernos (desde 2.6.23). O CFS visa uma justiça completa, dando a cada processo uma parcela proporcional do tempo da CPU com base em seu *peso *. Ele usa uma estrutura de dados de árvore em preto vermelho para gerenciar com eficiência os processos executáveis e selecionar o próximo a ser executado. A idéia principal é ajustar dinamicamente o tempo de execução dos processos para garantir a justiça.
*
Outros algoritmos de agendamento (histórico ou nicho): Enquanto o CFS é dominante, outros algoritmos existem ou existem para necessidades específicas (por exemplo, sistemas mais antigos usavam agendadores O (n), menos eficientes que o O (log n) do CFS).
3. Conceitos -chave no CFS: *
Virtual Runtime (Vruntime): O CFS rastreia o tempo de execução virtual de cada processo. Esta é uma medida artificial de quanto tempo de CPU um processo consumiu. É usado para determinar qual processo é mais merecedor da CPU a seguir. Um processo com um Vruntime mais baixo é agendado primeiro.
*
pesos: Os processos podem receber pesos atribuídos para influenciar sua parcela do tempo da CPU. Um peso mais alto significa uma parcela maior. Isso permite priorizar processos específicos.
*
valores agradáveis: O espaço do usuário pode influenciar as prioridades de agendamento de processos por meio de valores * NICE *. Um valor mais baixo de bom (por exemplo, -20) fornece uma prioridade mais alta do processo, enquanto um valor mais alto (por exemplo, 19) confere mais prioridade. Isso afeta o peso atribuído ao processo.
*
Lices de tempo: Embora não seja explicitamente definido como em alguns sistemas mais antigos, o CFS gerencia implicitamente as lícitas de tempo. Os processos são executados até que seu Vruntime indique que eles tiveram uma parte justa. O comprimento de um "tempo de tempo" é, portanto, dinâmico.
*
runqueue: Cada núcleo da CPU mantém seu próprio RunQueue, uma estrutura de dados que mantém os processos prontos para executar nesse núcleo.
*
Preempção: O CFS usa agendamento preventivo. Um processo de prioridade mais alta pode interromper um processo de prioridade a qualquer momento.
4. Interações com outros componentes do kernel: O agendador interage em estreita colaboração com outras partes do kernel, incluindo:
*
Manuseio de interrupção: As interrupções podem desencadear comutadores de contexto, alterando potencialmente o processo de execução atualmente.
*
Gerenciamento de memória: O agendador precisa saber sobre o status de memória dos processos para evitar processos de agendamento que são bloqueados à espera da memória.
*
Subsistema de E/O: Quando um processo executa operações de E/S (por exemplo, leitura de um disco), o agendador mudará para outro processo. O agendador também interage com o agendador de E/S para gerenciar a eficiência de E/S do disco.
5. Programação em tempo real: Para aplicações que requerem tempos de resposta garantidos (por exemplo, sistemas de controle industrial), o Linux fornece opções de agendamento em tempo real. Eles geralmente usam algoritmos diferentes (por exemplo, programação de prazo) que priorizam os processos em tempo real e garantam sua execução oportuna.
Em resumo, a programação de processos de compartilhamento de tempo da Linux é um sistema sofisticado que equilibra dinamicamente a justiça, a eficiência e a capacidade de resposta. O algoritmo CFS, juntamente com suas estruturas de dados e interações de suporte com outros componentes do kernel, fornece uma abordagem robusta e adaptativa para gerenciar vários processos simultaneamente. Compreender as nuances do CFS e outras políticas de agendamento é crucial para otimizar o desempenho e o uso de recursos nos sistemas Linux.