Você está na página 1de 3

Escalonamento por prioridade no Linux

No escalonamento por prioridades, cada processo é atribuído uma prioridade que


determina sua posição na fila de processos a serem executados. Processos com prioridades
mais altas são colocados na frente da fila e executados primeiro, enquanto processos com
prioridades mais baixas são colocados no final da fila e executados por último. O escalonador
do Linux usa um intervalo de prioridades de 0 a 139, sendo 0 a prioridade mais alta e 139 a
mais baixa.

As prioridades dos processos podem ser ajustadas dinamicamente pelo sistema


operacional ou pelo usuário. Por exemplo, processos que requerem mais recursos podem ser
atribuídos uma prioridade mais alta para garantir que sejam executados com mais frequência.
Por outro lado, processos de baixa prioridade podem ser temporariamente suspensos ou
interrompidos para liberar recursos para processos de alta prioridade.

Existem várias políticas de escalonamento de prioridades disponíveis no Linux,


incluindo o escalonamento Round Robin, o escalonamento First-In-First-Out (FIFO) e o
escalonamento Completely Fair Scheduler (CFS). Cada política tem suas próprias
características e trade-offs em termos de equidade de tempo de CPU, latência e utilização de
recursos. O escalonamento por prioridades é uma técnica fundamental para garantir um
desempenho eficiente e justo do sistema em ambientes de múltiplos processos concorrentes.

O Linux usa um escalonador de processos baseado em prioridades chamado


Completely Fair Scheduler (CFS). O CFS é um escalonador de tempo real que se esforça para
distribuir a CPU de forma justa entre os processos em execução. Ele trata a CPU como um
recurso escasso que deve ser compartilhado de forma justa entre os processos que a
requisitam.

No CFS, cada processo é associado a um valor de peso que determina sua prioridade.
O peso é usado para calcular a fatia de tempo que cada processo receberá para executar na
CPU. Quanto maior o peso, maior será a fatia de tempo que o processo receberá. O peso
padrão para cada processo é 1024, mas pode ser ajustado pelo usuário para controlar a
prioridade do processo.
O CFS também usa uma árvore vermelha-preta para manter uma lista ordenada de
processos. Os processos com maior prioridade (ou peso) são colocados na raiz da árvore e
recebem a maior fatia de tempo na CPU. À medida que o tempo de execução de um processo
aumenta, ele é movido para o final da fila, permitindo que outros processos com prioridades
mais altas sejam executados.

O CFS é projetado para ser justo em relação à distribuição do tempo da CPU entre os
processos. Ele usa uma abordagem de feedback constante para ajustar as prioridades dos
processos com base em quanto tempo eles gastam na CPU. Isso garante que os processos que
são limitados pela CPU recebam a maior parte do tempo da CPU disponível, enquanto os
processos que usam menos tempo da CPU recebem menos tempo de CPU no futuro.

Em resumo, o escalonamento por prioridades no Linux é feito usando o CFS, que


atribui a cada processo um valor de peso que determina sua prioridade e usa uma árvore
vermelho-preta para manter uma lista ordenada de processos. O CFS é projetado para ser justo
na distribuição do tempo da CPU entre os processos e usa uma abordagem de feedback
constante para ajustar as prioridades dos processos com base em quanto tempo eles gastam na
CPU.

Completely Fair Scheduler (CFS)

O CFS foi introduzido no kernel do Linux 2.6.23 e é o escalonador de processos


padrão desde então. Ele substituiu o escalonador anterior, o O(1) scheduler, que tinha
limitações em relação à justiça da distribuição do tempo da CPU.

O Completely Fair Scheduler (CFS) é um escalonador de processos usado pelo kernel


do Linux. Ele foi projetado para fornecer uma distribuição de tempo de CPU justa e eficiente
para os processos em execução no sistema. O CFS é um escalonador baseado em prioridades
e é implementado usando uma estrutura de árvore vermelha-preta.

Uma das principais características do CFS é que ele garante uma distribuição de tempo
de CPU justa e proporcional aos valores de peso de cada processo, independentemente do
número de processos em execução. Isso significa que, se houver 10 processos em execução no
sistema e um processo tiver um valor de peso duas vezes maior do que os outros, ele receberá
duas vezes mais tempo de CPU do que os outros processos, independentemente do número de
processos em execução.

2
Outra característica importante do CFS é que ele é capaz de lidar com processos de
tamanhos variados de maneira eficiente. Isso ocorre porque o CFS divide o tempo de CPU
disponível em fatias pequenas e distribui essas fatias de acordo com o valor de peso de cada
processo. Isso garante que os processos menores não sejam bloqueados por processos maiores
que precisam de mais tempo de CPU.

O peso padrão de cada processo é de 1024, mas ele pode ser ajustado pelo usuário
usando o comando nice ou renice. O nice é um utilitário de linha de comando que permite que
os usuários ajustem a prioridade dos processos. Um valor de nice menor indica uma
prioridade mais alta, enquanto um valor de nice maior indica uma prioridade mais baixa.

O CFS também é capaz de lidar com processos de alta prioridade, como processos de
tempo real, usando uma técnica chamada "sched-nice". Isso permite que os processos de
tempo real sejam executados com prioridade máxima, independentemente de seus valores de
peso, garantindo que eles recebam a maior quantidade possível de tempo de CPU.

Além disso, o CFS usa uma técnica chamada de "aging" para garantir que os processos
que não usam a CPU por um longo período de tempo não monopolizem a CPU no futuro.
Essa técnica envolve aumentar o valor de peso de um processo se ele passar um longo período
de tempo sem usar a CPU, o que garante que o processo não monopolize a CPU no futuro.

Você também pode gostar