Você está na página 1de 9

56

POLÍTICA DE ESCALONAMENTO DE PROCESSOS EM


LINUX
MARCOS VINÍCIUS DE MEIRA

Faculdade Integrado de Campo Mourão – Av. Irmãos Pereira, 670 - Cep: 87300-010
Campo Mourão – Paraná – Brasil. E-mail: mvmeira@grupointegrado.br

RESUMO

O problema básico de escalonamento em sistemas operacionais é como satisfazer simultaneamente


objetivos conflitantes: tempo de resposta rápido, bom throughput para processos background
(execução sem interação do usuário), evitar starvation, conciliar processos de alta prioridade com de
baixa prioridade. O conjunto de regras utilizado para determinar como, quando e qual processo
deverá ser executado é conhecido como política de escalonamento. Este artigo discute como o Linux
implementa seu escalonador e qual a política empregada para determinar quais processos recebem o
processador.

Palavras-Chave: Linux, Escalonamento, Processos

POLITIC OF PROCESSES SCHEDULING IN LINUX

ABSTRACT

The basic problem of scheduling in operational systems is as to satisfy objective simultaneously


conflicting: fast, good time of reply throughput for processes background, to prevent starvation, to
conciliate processes of high priority with of low priority. The set of rules used to determine as, when
and which process will have to be executed is known as scheduling politics. This article argues as the
Linux implements its scheduling and which the used politics to determine which processes receives
the processor.

Key-Words: Linux, Scheduling, Processes

INTRODUÇÃO oferecer um melhor tempo de resposta às


aplicações interativas. O escalonador do Linux
O problema básico de escalonamento em é baseado em time-sharing, ou seja, o tempo
sistemas operacionais é como satisfazer de processamento é dividido em fatias de
simultaneamente objetivos conflitantes: tempo tempo (quantum) as quais são alocadas aos
de resposta rápido, bom throughput para processos. Se, durante a execução de um
processos background, evitar starvation, processo o quantum é esgotado, um novo
conciliar processos de alta prioridade com de processo é selecionado para execução,
baixa prioridade. O conjunto de regras provocando então uma troca de contexto.
utilizado para determinar como, quando e qual Esse procedimento é completamente
processo deverá ser executado é conhecido transparente ao processo e baseia-se em
como política de escalonamento. interrupções de tempo. Esse comportamento
Tradicionalmente, os processos são divididos confere ao Linux em escalonamento do tipo
em três grandes classes: processos preemptivo. O algoritmo de escalonamento do
interativos, processos batch e processos de Linux divide o tempo de processamento em
tempo real. Em cada classe, os processos épocas. Cada processo, no momento de sua
podem ser ainda subdivididos em I/O bound criação, recebe um quantum calculado no
ou CPU bound de acordo com a proporção de início de sua época. Outra característica do
tempo que ficam esperando por operações de escalonador Linux é a existência de
entrada e saída ou utilizando o processador. O prioridades dinâmicas. O escalonador do Linux
escalonador do Linux não distingue processos monitora o comportamento de um processo e
interativos de processos batch, diferenciando- ajusta dinamicamente sua prioridade. Este
os apenas dos processos tempo real. Como artigo discute como o Linux implementa seu
todos os outros escalonadores UNIX, o escalonador e qual a política empregada para
escalonador Linux privilegia os processos I/O determinar quais processos recebem o
bound em relação aos CPU bound de forma a processador.

Campo Dig., Campo Mourão, v.1, n.2, p.56-64, jan/out. 2008


57

GERENCIAMENTO DE PROCESSO quando o núcleo tem de examinar todas as


tarefas do sistema. A segunda é uma tabela
O subsistema de gerenciamento de processo hash. Quando uma tarefa é criada, recebe um
é essencial para fornecer multiprogramação identificador de processo (Process Identifier –
eficiente no Linux. Embora primordialmente PID) exclusivo. Identificadores de processos
responsável por alocar processos a são passados para uma função hash para
processadores, o subsistema de determinar sua localização na tabela de
gerenciamento de processo também deve processos. O método de hash fornece acesso
entregar sinais, carregar módulos de núcleo e rápido à estrutura de dados de uma tarefa
receber interrupções. O subsistema de específica quando o núcleo conhece o seu
gerenciamento de processo contém o PID. (Aivazian, 2001)
escalonador de processo que permite que Cada tarefa da tabela de processo é
processos tenham acesso a um processador representada por uma estrutura task_struct
em tempo razoável. que serve como descritor de processo ou
PCB. A estrutura task_struct armazena
ORGANIZAÇÃO DE PROCESSOS E variáveis e estruturas aninhadas que contém
THREADS informações que descrevem um processo.
Uma tarefa transita para o estado de execução
Em sistemas Linux, ambos, processos e quando é enviada para o processador,
theads, são denominados tarefas, conforme figura 1 (Deitel, 2005). Uma tarefa
internamente são representados por uma entra no estado adormecido quando bloqueia,
única estrutura de dados. O gerenciador de e no estado parado quando é suspensa. O
processos mantém uma lista de todas as estado zumbi indica que uma tarefa foi
tarefas usando duas estruturas de dados. A terminada, mas não eliminada do sistema.
primeira é uma lista circular, duplamente Ativo e expirado são estados de
encadeada, na qual cada entrada contém escalonamento de processo que não são
ponteiros para as tarefas anteriores e armazenados na variável state (estado).
posteriores da lista. Essa estrutura é acessada

Figura 1. Diagrama de transição de estado da tarefa (Deitel, 2005)

criação

insere na fila de execução

ativo
intervalo de desbloqueia
tempo expira, adormecido
tarefa interativa escalonado
sinal de
bloqueia
nova continuar
execução
época sinal de parada
intervalo de
tempo parado
expira
expirado
tarefa recebe sinal de sair
ou de matar

Estados ativados
parado

tarefa sai do sistema

morto

Campo Dig., Campo Mourão, v.1, n.2, p.56-64, jan/out. 2008


58

Outras importantes variáveis específicas de descritores de arquivo e controladores de


tarefas permitem que o escalonador determine sinais.( Walton, 1997)
quando uma tarefa deve executar em um A implementação de threads do Linux gerou
processador. Entre essas variáveis estão, as muita discussão no que diz respeito à
prioridades da tarefa, se a tarefa é de tempo definição de um thread. Embora clone crie
real ou não e, se for, qual algoritmo de threads, estes não estão necessariamente de
escalonamento de tempo real deve ser usado. acordo com a especificação de threads POSIX
(Rusling, 1999) (interface portável de sistema operacional).
Estruturas aninhadas dentro de uma Por exemplo, dois ou mais threads criados por
task_struct armazenam informações adicionais meio de uma chamada clone que especifica
sobre uma tarefa. Uma estrutura desse tipo, máximo compartilhamento de recursos, ainda
denominada mm_struct, descreve a memória mantêm diversas estruturas de dados que não
alocada a uma tarefa. Estruturas adicionais são compartilhadas com todos os threads do
aninhadas dentro de uma task_struct contêm processo, como direitos de
informações como valores de registradores acesso.(McCracken, 2002)
que armazenam o contexto de execução de Quando clone é chamado a partir de um
uma tarefa, controladores de sinal e os direitos processo de núcleo (um processo que execute
de acesso da tarefa.(SchlapBach, 2002) Essas código de núcleo), ela cria um thread de
estruturas são acessadas por vários núcleo que é diferente de outros threads no
subsistemas de núcleo, além do gerenciador sentido de que acessa diretamente o espaço
de processo. de endereçamento do núcleo. Diversos
Quando o núcleo é inicializado, normalmente daemons (processos que executam
carrega um processo denominado init que periodicamente para realizar serviços de
então usa o núcleo para criar todas as outras sistema) dentro do núcleo são implementados
tarefas. (Aivazian, 2001) Tarefas são criadas como threads de núcleo, esses daemons são
por meio da chamada ao sistema clone, serviços que ficam adormecidos até que sejam
quaisquer chamadas a fork ou vfork são despertados para realizar tarefas, como
convertidas a chamadas ao sistema clone na descarregar páginas para o armazenamento
hora da compilação. O propósito de fork é criar secundário e escalonar interrupções de
uma tarefa-filho cujo espaço de memória software. (Arcomano, 2002) Essas tarefas em
virtual é alocado usando copy-on-write para geral estão relacionadas com manutenção e
aprimorar o desempenho. Quando o processo- executam periodicamente.
filho ou o processo-pai tentam escrever para Há diversos benefícios na implementação de
uma página na memória, uma cópia da página threads Linux. Por exemplo, threads Linux
é alocada ao escritor. A copy-on-write pode simplificam código de núcleo e reduzem
levar o mau desempenho se um processo sobrecarga requisitando somente uma única
chamar execv para carregar um novo cópia das estruturas de dados de
programa imediatamente após a fork. O linux gerenciamento de tarefas.(Walton, 2002) Além
suporta a chamada vfork que melhora o disso, embora threads Linux sejam menos
desempenho quando processos-filho portáveis do que threads POSIX, permitem
chamarem execve. A chamada vfork suspende aos programadores flexibilidade para controlar
o processo-pai até que o filho chame execve rigorosamente recursos compartilhados entre
ou exit para garantir que o filho carregue suas tarefas.(Drepper, 2002)
novas páginas antes que o pai cause
quaisquer operações dispendiosas de copy- ESCALONAMENTO DE PROCESSO
on-write. A chamada vfork melhora ainda mais
o desempenho por não copiar as tabelas de A meta do escalonador de processos Linux é
páginas do pai para o filho, porque são criadas executar todas as tarefas em uma quantidade
entradas de tabela de página quando o filho razoável de tempo e, simultaneamente
chamar execve. respeitar prioridades de tarefas, manter alta
utilização e rendimento de recursos e reduzir a
THREADS LINUX E A CHAMADA AO sobrecarga de operações de escalonamento.
SISTEMA CLONE O escalonador de processo também aborda o
papel do Linux no mercado de sistemas
O Linux fornece suporte para threads usando avançados de computador, escalando para
a chamada ao sistema clone, que habilita o arquiteturas SMP (multiprocessamento
processo que está chamando a especificar se simétrico) e NUMA (acesso não uniforme à
o thread compartilha a memória virtual do memória) e fornecendo, ao mesmo tempo, alta
processo, informações de sistema de arquivo, afinidade de processador. Um dos
aprimoramentos mais significativos da

Campo Dig., Campo Mourão, v.1, n.2, p.56-64, jan/out. 2008


59

escalabilidade da versão 2.6 é que todas as tempo de tarefa e seleciona o processo


versões de escalonamento são operações de seguinte.
tempo constante, o que significa que o tempo
requerido para executar funções de FILAS DE EXECUÇÃO
escalonamento não depende do número de
tarefas do sistema.(Molnar, 2003) Uma vez criada uma tarefa por meio de clone,
A cada interrupção do temporizador do ela é colocada na fila de execução de um
sistema, o núcleo atualiza várias estruturas de processador que contém referências a todas
dados de contabilidade e realiza operações de as outras tarefas que competem por execução
escalonamento conforme necessário. Porque naquele processador. Filas de execução,
o escalonador é preemptivo, cada tarefa semelhantes a filas multiníveis de retorno,
executa até que seu quantum ou intervalo de designam níveis de prioridades às tarefas. O
tempo expire, um processo de prioridade mais arranjo de prioridades mantém ponteiros para
alta torne-se executável ou o processo cada nível da fila de execução. Cada entrada
bloqueie. O intervalo de tempo de cada tarefa do arranjo de prioridades aponta para uma
é calculado como uma função da prioridade do lista de tarefas, uma de prioridade i é colocada
processo quando há uma liberação do na i-ésima entrada de um arranjo de
processador. Para evitar que intervalos de prioridades da fila de execução, como visto na
tempo sejam demasiamente pequenos a ponto figura 2 (Deitel, 2005). O escalonador
de impedir trabalho produtivo, ou tão grandes seleciona a tarefa que está à frente da lista no
que aumentem os tempos de resposta, o nível mais alto do arranjo de prioridades. Se
escalonador assegura que o intervalo de houver mais de uma tarefa em um nível do
tempo designado para cada tarefa esteja entre arranjo de prioridades, as tarefas serão
10 e 200 intervalos de tempo. Quando uma selecionadas por meio de alternância circular.
tarefa sofre preempção, o escalonador salva o Quando uma tarefa entra no estado bloqueado
estado da tarefa em sua estrutura task_struct. ou adormecido (de espera) ou por qualquer
Se o intervalo de tempo do processo expirar, o outra razão é incapaz de executar, ela é
escalonador recalcula a prioridade do retirada da sua fila de execução.
processo, determina o próximo intervalo de

Figura 2. Arranjo de prioridades do escalonador. (Deitel, 2005)

Fila de execução

-20 P1 P5 P16 P1

Tarefas em cada nível do arranjo


de prioridades são escalonadas
por alternância circular
Processador
Arranjo de .
prioridades .
.

P8 P10 ... P15

P4
19

Uma meta do escalonador é impedir considerados para tempo de processador


adiamento, estabelecendo um período de daqueles que devem esperar até a próxima
tempo denominado época durante o qual cada época, o escalonador define um estado ativo e
tarefa da fila de execução executará no um estado expirado. O escalonador seleciona
mínimo uma vez. Para distinguir processos somente processos que estão no estado ativo.

Campo Dig., Campo Mourão, v.1, n.2, p.56-64, jan/out. 2008


60

A duração de uma época é determinada pelo desempenho mais alto se forem


limite de inanição, um valor derivado consistentemente designada para um único
empiricamente que fornece tarefas de alta processador. Contudo, filas de execução por
prioridade com bons tempos de resposta e, ao processador correm o risco de desbalancear
mesmo tempo, assegura que tarefas de baixa cargas de processador resultando em redução
prioridade sejam selecionadas com freqüência do desempenho e do rendimento do sistema.
suficiente para realizar trabalho produtivo em
uma quantidade de tempo razoável. Por ESCALONAMENTO POR PRIORIDADE
default, o limite de inanição é estabelecido em
10n segundos, onde n é o número de tarefas No escalonador do Linux, a prioridade de uma
da fila de execução. Quando a época corrente tarefa afeta o tamanho de seu período de
durou mais do que o limite de inanição, o tempo e a ordem em que ele executa em um
escalonador transita cada tarefa ativa da fila processador. Quando são criadas, as tarefas
de execução para o estado expirado, recebem uma prioridade estática, também
permitindo que tarefas de baixa prioridade denominada valor bom. O escalonador
executem. Quando todas as tarefas da fila de reconhece 40 níveis distintos de prioridades
execução tiverem executado pelo menos uma que vão de -20 a 19. Seguindo a convenção
vez, todas estarão no estado expirado. Nesse UNIX, valores menores indicam prioridades
ponto, o escalonador transita todas as tarefas mais altas no algoritmo de escalonamento (ou
da fila de execução para o estado ativo e seja, -20 é a prioridade mais alta que um
começa uma nova época.(Cross-referecing processo pode atingir).
Linux) Uma meta do escalonador do Linux é fornecer
Para simplificar a transição do estado expirado um alto nível de interatividade no sistema.
para o estado ativo, ao final de uma época o Porque tarefas interativas comumente
escalonador do Linux mantém dois arranjos de bloqueiam para executar E/S ou dormir, o
prioridades para cada processador. O arranjo escalonador eleva dinamicamente a prioridade
de prioridades que contém tarefas no estado de uma tarefa (decrementando o valor da
ativo é denominado lista ativa. O arranjo de prioridade estática) que entregar seu
prioridades que armazena tarefas expiradas é processador antes de seu intervalo de seu
denominado lista inativa ou lista expirada. intervalo de tempo expirar. Isso é aceitável,
Quando uma tarefa transita do estado ativo pois processos I/O bound normalmente usam
para o estado expirado, é colocada no arranjo processadores apenas brevemente antes de
de prioridades da lista expirada no nível de gerar uma requisição de E/S. Assim atribuir
prioridade que tinha quando transitou para o prioridades altas a tarefas I/O bound tem
estado expirado. Ao final de uma época, todas pouco efeito sobre tarefas CPU bound, que
as tarefas estão localizadas no estado poderiam utilizar o processador durante horas
expirado e devem transitar para o estado por vez caso o sistema o disponibilizasse em
ativo. O escalonador executa essa operação base não preemptiva. O nível de prioridade
rapidamente apenas trocando (swapping) os modificado é denominado prioridade efetiva de
ponteiros da lista expirada e da lista ativa. Por uma tarefa, a qual é calculada quando uma
manter dois arranjos de prioridades por tarefa adormece ou consome seu intervalo de
processo, o escalonador pode transitar todas tempo. A prioridade efetiva de uma tarefa
as tarefas de uma fila de execução usando determina o nível do arranjo de prioridades no
uma única operação de troca, um qual ela é colocada. Por conseguinte, a tarefa
aprimoramento do desempenho que, em geral, cuja prioridade for promovida é colocada em
compensa a sobrecarga nominal de memória um nível mais baixo do arranjo de prioridades,
devido a essa operação.(Cross-referecing o que significa que executará antes de tarefas
Linux) que têm valores de prioridades efetivas mais
O escalonador Linux escala para sistemas de altos.
multiprocessadores mantendo uma fila de Para melhorar ainda mais a interatividade, o
execução para cada processador físico do escalonador penaliza uma tarefa CPU bound
sistema. Uma razão para filas de execução aumentado o valor de sua prioridade estática,
por processador é designar a execução de o que coloca uma tarefa CPU bound em um
tarefas em determinados processadores para nível mais alto do arranjo de prioridades, ou
explorar a afinidade de processador. Em seja, tarefas de prioridades efetivas menores
algumas arquiteturas de processadores, serão executadas antes dela. Novamente, em
processos atingem desempenho mais alto última análise, isso tem pouco efeito sobre
quando os dados de uma tarefa estão tarefas CPU bound porque tarefas interativas
armazenados na cache do processador. de prioridades mais altas executam apenas
Consequentemente, tarefas podem atingir brevemente antes de bloquear.

Campo Dig., Campo Mourão, v.1, n.2, p.56-64, jan/out. 2008


61

Para garantir que uma tarefa execute na lista ativa ou na lista inativa. O algoritmo que
prioridade que lhe foi designada inicialmente, determina isso foi derivado empiricamente
ou próximo dela, o escalonador de tarefas não para proporcionar bom desempenho, seus
permite que a diferença entre a prioridade fatores primários são as prioridades estáticas
efetiva de uma tarefa e sua prioridade estática e efetivas de uma tarefa.
seja maior do que cinco unidades. Nesse O resultado do algoritmo é apresentado na
sentido, o escalonador honra os níveis de Figura 3 (Linux kernel source code). O eixo y
prioridade designados a uma tarefa quando da figura indica valor da prioridade de uma
ela foi criada. tarefa. A região sombreada indica conjuntos
de valores de prioridades estáticas e ajustes
OPERAÇÕES DE ESCALONAMENTO de prioridade que fazem com que uma tarefa
seja reescalonada, significando que ela é
O escalonador elimina uma tarefa de um colocada no final de seu arranjo de prioridades
processador se ela for interrompida, sofrer correspondente na lista ativa. Em geral, se
preempção ou bloquear. Toda vez que uma uma tarefa for de alta prioridade ou se sua
tarefa é eliminada de um processador, o prioridade efetiva recebeu um bônus
escalonador calcula um novo período de significativo, será reescalonada, o que permite
tempo. Se a tarefa bloquear, ou se for incapaz que tarefas I/O bound e tarefas interativas
de executar por qualquer outra razão, ela será executem mais do que uma vez por época.
desativada, o que significa que será retirada Na região não sombreada, as tarefas que têm
da fila de execução até que fique pronta pra baixa prioridade ou receberam penalidades de
executar. Caso contrário, o escalonador prioridades são colocadas na lista expirada.
determinará se a tarefa deve ser colocada na

Figura 3. Valores de prioridades e seus níveis de interatividade correspondentes (Linux k.s.c.)

Prioridade estática
-20

-10
Ajuste de
0 prioridade
5 -5

10

Tarefas CPU-Bound Tarefas I/O-Bound


19

Recolocada na fila da lista ativa quando o


tempo expira

Enviada à lista expirada quando o


intervalo de tempo termina

Quando um processo usuário executa clone, compartilhe inicialmente seu intervalo de


pode parecer alocar a cada filho seu próprio tempo com seus filhos quando um processo
intervalo de tempo. Todavia, se uma tarefa executar clones. O escalonador impõe esse
gerar um grande número de tarefas e todos os requisito designado metade do intervalo de
seus filhos receberem seus próprios intervalos tempo original do pai para ambos, o processo-
de tempo, outras tarefas do sistema poderão pai e seu filho, que também gera filhos. Para
sofrer tempos de resposta ruins durante evitar que processos legítimos recebam baixos
aquela época. Para melhorar a distribuição, o níveis de serviços devido a filhos que geram
Linux requer que cada processo-pai processos, esse intervalo de tempo reduzido

Campo Dig., Campo Mourão, v.1, n.2, p.56-64, jan/out. 2008


62

aplica-se somente durante o restante da reduzir a sobrecarga, o balanceamento de


época na qual o filho foi gerado. carga não é executado a menos que a fila de
execução cuja carga seja mais pesada
ESCALONAMENTO DE contenha 25% mais tarefas do que a fila de
MULTIPROCESSADOR execução do processador que está realizando
o balanceamento de carga. (Deitel, 2005)
Pelo fato do escalonador de processos manter Quando o escalonador seleciona tarefas para
as tarefas em uma fila de execução por balanceamento, tenta escolher aquelas cujos
processo, estas em geral exibirão alta desempenhos serão menos afetados por
afinidade de processador. Isso significa que passarem de um processador para outro. Em
uma tarefa provavelmente será selecionada geral, a tarefa menos recentemente ativa de
para o mesmo processador em cada um de um processador é a que terá mais
seus intervalos de tempo, o que pode probabilidade de estar fria em relação ao
aumentar o desempenho quando os dados e cache do processador, uma tarefa fria em
instruções de uma tarefa estiverem localizados relação ao cache não contém muitos (ou
nos caches de um processador. Entretanto, nenhum) dos dados da tarefa no cache do seu
um esquema desse tipo poderia permitir que processador, ao passo que uma tarefa quente
um ou diversos processadores de um sistema em relação ao cache contém a maioria ou
ficassem ociosos até mesmo durante um todos os dados da tarefa no cache do
período de carga pesada do sistema. Para processador. Portanto, o escalonador escolhe
evitar tal situação, se o escalonador detectar migrar tarefas que provavelmente são mais
que um processador esteja ocioso, executará frias em relação ao cache.
balanceamento de carga para migrar tarefas
de um processador para outro de modo que ESCALONAMENTO DE TEMPO REAL
melhore a utilização de recursos. Se o sistema
tiver apenas um processador, as rotinas de O escalonador suporta escalonamento de
balanceamento são eliminadas do núcleo tempo real tentando minimizar o tempo
quando este é compilado. durante o qual uma tarefa de tempo real
O escalonador determina se o núcleo deve espera para ser selecionada para um
realizar rotinas de balanceamento de carga processador. Diferentemente de uma tarefa
após cada interrupção do temporizador. Se o normal, que é eventualmente colocada na lista
processador que emitiu a interrupção do expirada para impedir que tarefas de baixa
temporizador estiver ocioso, o escalonador prioridade sejam indefinidamente adiadas,
tentará migrar tarefas do processador que tiver uma tarefa de tempo real é sempre colocada
carga mais pesada, ou seja, o que tiver o na lista ativa depois que seu quantum expirar.
maior número de processos em sua fila de Além disso, tarefas de tempo real sempre
execução, para o processador ocioso. Para executam com prioridades mais altas do que
reduzir a sobrecarga de balanceamento de tarefas normais. Porque o escalonador sempre
carga, se o processador que acionou a seleciona uma tarefa da fila de maior
interrupção não estiver ocioso, o escalonador prioridade da lista ativa, tarefas normais não
tentará transferir tarefas para aquele podem provocar a preempção de tarefas de
processador a cada 200 interrupções do tempo real.
tempo em vez de após cada interrupção do O escalonador obedece à especificação
temporizador. (Linux kernel source code) POSIX para processos de tempo real,
O escalonador determina a carga do permitindo que tarefas de tempo real sejam
processador usando o tamanho médio de escalonadas por meio do algoritmo de
cada fila de execução nas últimas várias escalonamento de alternância circular ou
interrupções de temporizador para minimizar o FIFO. Se uma tarefa especificar
efeito de variações de cargas do processador escalonamento por alternância circular e seu
sobre o algoritmo de balanceamento de carga. intervalo de tempo tiver expirado, receberá um
Pelo fato de as cargas de processadores novo intervalo de tempo e entrará no final da
tenderem a mudar rapidamente, a meta do fila de seu arranjo de prioridades da lista ativa.
balanceamento de carga não é ajustar o Se a tarefa especificar escalonamento FIFO,
tamanho de duas filas de execução até que não receberá um intervalo de tempo e,
fiquem com o mesmo tamanho, mas reduzir o portanto, executará em um processador até
desequilíbrio entre o número de tarefas de sair, adormecer, bloquear ou ser interrompida.
cada fila de execução. O objetivo é que tarefas Processos de tempo real podem adiar
sejam removidas da maior fila de execução indefinidamente outros processos caso sejam
até que a diferença de tamanho entre as duas codificados inadequadamente, resultando em
filas de execução se reduza à metade. Para tempos de resposta ruins. Para evitar

Campo Dig., Campo Mourão, v.1, n.2, p.56-64, jan/out. 2008


63

utilização imprópria, acidental ou mal- mínimo uma vez, impedindo que ocorra o
intencionada de tarefas de tempo real, apenas starvation. O reescalonamento permite que
usuários com privilégios de root tarefas I/O bound e tarefas interativas
(administrador) podem criá-las. executem mais do que uma vez por época,
evitando uma espera de tempo. Para evitar a
CONSIDERAÇÕES FINAIS situação de ociosidade em
multiprocessadores, se o escalonador detectar
A política de escalonamento em Linux procura que um processador esteja ocioso, executará
satisfazer os objetivos conflitantes que surgem balanceamento de carga para migrar tarefas
em todos os sistemas operacionais, ou seja, de um processador para outro de modo que
oferece um tempo de resposta rápido, procura melhore a utilização de recursos. Se o sistema
executar o maior número de tarefas no menor tiver apenas um processador, as rotinas de
espaço de tempo e concilia processos de alta balanceamento são eliminadas do núcleo
prioridade com os de baixa prioridade. Por quando este é compilado. Em escalonamento
tratar processos e threads como tarefas, de tempo real, tarefas de tempo real sempre
internamente ambos são representados por executam com prioridades mais altas do que
uma única tarefa, assim, threads simplificam o tarefas normais. Porque o escalonador sempre
código do núcleo e reduzem carga seleciona uma tarefa da fila de maior
requisitando somente uma cópia das prioridade da lista ativa, tarefas normais não
estruturas de dados de gerenciamento de podem provocar a preempção de tarefas de
tarefas. Por usar o escalonamento por tempo real. Finalizando, a política de
preempção, o Linux garante uma boa parte de escalonamento de processos em Linux, reúne
tempo para cada processo, garantido assim todos os métodos de escalonamento, levando
uma distribuição de tempo uniforme. em consideração, o escalonamento por
Uma meta interessante do escalonador é múltiplas filas com realimentação, onde a
impedir adiamento, estabelecendo um período prioridade dos processos é reavaliada,
de tempo denominado época durante o qual beneficiando todos os processos.
cada tarefa da fila de execução executará no

REFERÊNCIAS Toledo, Marcelo. Gerenciamento de


Processos no Linux. 2005
Deitel, H.M. Sistemas Operacionais, 3ª
edição, Pearson Education do Brasil, 2005. Fávero, André Luiz. Suporte a
processadores simétricos (SMP) em kernel
Oliveira, R.S., Carissimi, A.S., Toscani, S.S., Linux. UFGRS.
Sistemas Operacionais, 3ª edição, Sagra
Luzzato, 2004 Starke, Márcio. Maziero, Márcio. Jamhour,
Edgard. Controle Dinâmico de Recursos em
Machado, F.B., Maia, L.P., Arquitetura de Sistemas Operacionais. PUC-PR
Sistemas Operacionais, 2ª edição, LTC,
T. Aivazian, Linux kernel 2.4 internals, 2001,
Tanenbaum, A.S, Sistemas Operacionais disponível em: www.tldp.org/ldp/lki/lki.htlm
Modernos, 2ª edição, Pearson Education do
Brasil, 2003 D. Rusling, The Linux kernel, 1999,
disponível em: www.tldp.org/ldp/tlk/tlk.html
Open Source Development Labs, Inc., Linux
Process Scheduler Improvements in A. SchlapBach, Linux process scheduling,
Version 2.6.0, Disponível em 2000, disponível em:
http://developer.osdl.org/craiger/hackbench/. www.unibe.ch/sdutenten/schlbch/linuxscheduli
ng/linuxscheduling.htm
Rick Lindsley, What's New in the 2.6
Scheduler, Disponível em S.Walton, Linux threads frequently asked
http://www.linuxjournal.com/article.e.php?sid=7 questions, 1997, disponível em:
178 www.tldp.org.com/faq/threads-faq

Real, L.C.V., Damasio, F., Escalonamento D. McCracken, POSIX threads amd the
interativo no kernel Linux, Universidade do Linux kernel, proceedings of the Ottawa Linux
Vale do Rio dos Sinos Centro de Ciências Symposium, 2002
Exatas e Tecnológicas

Campo Dig., Campo Mourão, v.1, n.2, p.56-64, jan/out. 2008


64

R. Arcomano, Kernel Analysis Howto, 2002, Cross-referecing Linux, disponível em:


disponível em: http://lxr.linux.no/source/kernel/sched.c?v=2.5.
www.tldp.org/howto/kernelanalysis-howto.html 56

S. Walton, Linux threads frequently asked Linux kernel source code, versão 2.6.0-
questions, 2002, disponível em: test2, disponível em: http://
www.linas.org/linux/threads-faq.html .linux.no/source/kernel/sched.c?v=2.6.0-test2

U. Drepper e I. Molnar, The native POSIX Linux kernel source code, versão 2.5.75,
threads library for Linux, 2003, disponível disponível em:
em: http://people.redhat.com/drepper/nptl- http://lxr.linux.no/source/kernel/sched.c?v=2.5.
design.pdf 75
I. Molnar, Announcenment to Linux mailling
list, 2003, disponível em:
http://lwn.net/2002/0110/a/scheduler.php3
Recebido: 10/08/2008
Aceito: 14/10/2008

Campo Dig., Campo Mourão, v.1, n.2, p.56-64, jan/out. 2008