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.