Você está na página 1de 29

UNIVERSIDADE TÉCNICA DE MOÇAMBIQUE

FACULDADE DE CIÊNCIAS TECNOLÓGICAS


LICENCIATURA EM ENGENHARIA E GESTÃO DE TECNOLOGIAS DE
INFORMAÇÃO E COMUNICAÇÃO

Algoritmos de escalonamento

Trabalho investigativo apresentado em cumprimento dos requisitos exigidos para


aprovação na disciplina de Simulação e Modelação, administrada no curso de Licenciatura
em Engenharia e Gestão de Tecnologias de Informação e Comunicação na Universidade
Técnica de Moçambique

Maputo, Outubro de 2023

I
ALGORITMOS DE ESCALONAMENTO

Trabalho investigativo apresentado em cumprimento dos requisitos exigidos para aprovação


na disciplina Simulação e Modelação, administrada no curso de Licenciatura em Engenharia
e Gestão de Tecnologias de Informação e Comunicação na Universidade Técnica de
Moçambique

LICENCIATURA EM ENGENHARIA E GESTÃO DE TECNOLOGIAS DE


INFORMAÇÃO E COMUNICAÇÃO

FACULDADE DE CIÊNCIAS TECNOLÓGICAS

UNIVERSIDADE TÉCNICA DE MOÇAMBIQUE

Docente: Valentim Raposo

Discentes: Armenio Amalio

Isaura Muianga

Nelsa de Melo

Jeremias de France

Shelsio Frank

Maputo, Outubro de 2023

Lista de abreviaturas

II
RR: Round Robin

FCFS: First Come - First Served

SJF: Shortest Job First (menor tarefa primeiro)

SRTF: Short Remaining Time First (menor tempo restante primeiro)

PRIOc : Algoritmo por prioridade cooperativo

PRIOp : Escalonamento por prioridade preemptivo

PRIOd: Escalonamento por prioridades dinâmicas

FIFO: First In - First Out

CFS: Completely Fair Scheduler

EDF: Earliest Deadline First

Lista de Figuras

III
Figura 1: Tarefas na fila de prontas ...........................................................................................7
Figura 2: Escalonamento FCFS ................................................................................................8
Figura 3: Escalonamento Round-Robin ....................................................................................9
Figura 4: Evolução da fila de tarefas prontas no escalonamento Round-Robin......................10
Figura 5: Escalonamento SJF ..................................................................................................11
Figura 6: Escalonamento SRTF ..............................................................................................12
Figura 7: Escalonamento por prioridade cooperativo (PRIOc) ...............................................13
Figura 8: Escalonamento por prioridade preemptivo (PRIOp)................................................14
Figura 9: Escalonamento por prioridade preemptivo dinâmico (PRIOd)................................15
Figura 10: Escalonamento Round-Robin com prioridades fixas.............................................16
Figura 11: Escalonamento Round-Robin com prioridades dinâmicas.....................................16

Resumo

IV
O escalonamento desempenha um papel fundamental na alocação eficiente de tarefas aos
recursos computacionais de um sistema, visando atender a requisitos temporais e garantir o
desempenho adequado. O resultado desse processo é uma sequência que determina a ordem
de execução das tarefas e o acesso aos recursos. O escalonador, por sua vez, é o componente-
chave responsável pela gestão desses recursos.

Nos sistemas de tempo real, a busca por soluções de escalonamento. A integração desses
paradigmas oferece uma abordagem interessante para otimizar o escalonamento em
ambientes críticos. Essa abordagem tem sido objeto de estudo em diversos trabalhos recentes.

Neste contexto, este trabalho explora os fundamentos e desafios dos algoritmos de


escalonamento, com ênfase na busca por soluções híbridas. Aborda-se a importância de
alocar tarefas de maneira eficaz, satisfazendo requisitos temporais e otimizando o uso de
recursos computacionais. O escalonamento, como componente vital em sistemas
computacionais, desempenha um papel central na garantia de um desempenho eficiente e na
gestão adequada dos recursos, sendo de interesse tanto para a pesquisa acadêmica quanto para
a aplicação prática em sistemas de tempo real e ambientes críticos.

Palavra-chave: Algoritmos de Escalonamento, Eficiência de Recursos, Gestão de Tarefas.

Abstract

V
Scheduling plays a fundamental role in the efficient allocation of tasks to the computational
resources of a system, aiming to meet temporal requirements and ensure proper performance.
The outcome of this process is a sequence that determines the order of task execution and
resource access. The scheduler, in turn, is the key component responsible for managing these
resources.

In real-time systems, the quest for scheduling solutions is paramount. Integrating the best of
both time-triggered and event-triggered systems concerning scheduling has become an
intriguing focus of recent studies. This integration offers an interesting approach to
optimizing scheduling in critical environments and has been the subject of investigation in
numerous recent works.

Within this context, this research delves into the fundamentals and challenges of scheduling
algorithms, with a particular emphasis on the pursuit of hybrid solutions. The significance of
effectively allocating tasks while meeting temporal requirements and optimizing the
utilization of computational resources is addressed. Scheduling, as a vital component in
computer systems, holds a central role in ensuring efficient performance and proper resource
management. It is of interest not only to academic research but also to practical application in
real-time systems and critical environments.

Keywords: Scheduling Algorithms, Resource Efficiency, Task Management.

Índice

VI
Capitulo I....................................................................................................................................1
1.1 Introdução ...........................................................................................................................1
1.2.1 Objectivo Geral.................................................................................................................1
1.2.2 Objectivo específico..........................................................................................................1
1.3 Revisão da literatura Algoritmos de Escalonamento.........................................................2
1.4 Metodologia..........................................................................................................................2
1.5 Limitações na Pesquisa........................................................................................................3
Capitulo II..................................................................................................................................4
2.1 O Escalonamento .................................................................................................................4
2.2.1 Escalonamento de Tempo Real.........................................................................................5
2.2.2 Modelo de Tarefas ...........................................................................................................6
2.3 Restrições Temporais .........................................................................................................6
Capitulo III Algoritmos de escalonamento................................................................................7
3.1 First-Come, First Served (FCFS).........................................................................................8
3.2 Round-Robin (RR)...............................................................................................................9
3.3 Shortest Job First (SJF) .....................................................................................................10
3.4 Shortest Remaining Time First (SRTF).............................................................................11
3.5 Escalonamento por prioridades fixas (PRIOc, PRIOp)......................................................12
3.6 Escalonamento por prioridades dinâmicas (PRIOd) ........................................................14
Capitulo IV Definição de prioridades......................................................................................17
4.1 Fatores externos..................................................................................................................17
4.2 Fatores internos..................................................................................................................17
4.3 Comparação entre os algoritmos apresentados..................................................................18
4.4 Escalonadores reais............................................................................................................18
Capitulo V - Conclusões e Recomendações.............................................................................20
5.1 Conclusão .........................................................................................................................20
5.2 Recomendações .................................................................................................................21
Referencias bibliográficas........................................................................................................22

VII
Capitulo I

1.1 Introdução

No âmbito da computação e sistemas computacionais, a alocação eficiente de recursos e a


gestão de tarefas desempenham um papel crucial para garantir o funcionamento eficaz e
responsivo dos sistemas. Os algoritmos de escalonamento, nesse contexto, emergem como
componentes fundamentais para otimizar a utilização de recursos computacionais e garantir a
entrega eficiente de tarefas.

O escalonamento refere-se ao processo de determinar a ordem de execução de tarefas ou


processos em um sistema computacional, considerando diversos fatores, como prioridades,
requisitos temporais e disponibilidade de recursos. Esses algoritmos desempenham um papel
essencial em sistemas operacionais, servidores, data centers, sistemas embarcados e em uma
ampla gama de aplicações computacionais.

Neste trabalho, exploraremos em detalhes os conceitos fundamentais dos algoritmos de


escalonamento, abordando suas aplicações e investigando como esses algoritmos têm
evoluído para lidar com sistemas de tempo real. Além disso, examinaremos a importância da
combinação de simulação e modelagem com algoritmos de escalonamento, que permite a
tomada de decisões informadas em diversos domínios, incluindo sistemas embarcados,
centros de dados, redes de computadores e sistemas de tempo real. Os resultados da
simulação fornecem dados valiosos para a seleção e ajuste de algoritmos com base nas
necessidades específicas do sistema, contribuindo assim para a otimização e aprimoramento
contínuo dos sistemas computacionais.

1.2 Objectivos

1.2.1 Objectivo Geral

Investigar e analisar os algoritmos de escalonamento em sistemas computacionais, com


ênfase na otimização da alocação de recursos e no aprimoramento do desempenho. Pretende-
se compreender a relevância desses algoritmos em diversos contextos e examinar o
funcionamento deles para atender às demandas de sistemas de tempo real e ambientes
computacionais complexos.

1.2.2 Objectivos específicos

1. Analisar os Fundamentos dos Algoritmos de Escalonamento.

2. Explorar as Aplicações em Sistemas Computacionais.

3. Descrever os Algoritmos Mais Comuns

1
1.3 Revisão da literatura

Algoritmos de Escalonamento
Os algoritmos de escalonamento desempenham um papel crítico na gestão de recursos em
sistemas de computação. Eles são responsáveis por decidir como e quando as tarefas ou
processos devem ser executados, afetando diretamente o desempenho, a eficiência e a justiça
na alocação de recursos, especialmente na utilização da unidade central de processamento
(CPU). Este trabalho explora os fundamentos dos algoritmos de escalonamento em sistemas
computacionais e examina como eles são aplicados em diferentes contextos.

Capítulo 2: O Escalonamento

Neste capítulo, aprofundaremos nossa compreensão sobre o escalonamento, que é a prática de


alocar eficientemente recursos, com foco especial na CPU, em sistemas computacionais.
Abordaremos a importância do escalonamento em ambientes de tempo real, bem como os
modelos de tarefas e as restrições temporais que moldam o processo de escalonamento.

Capítulo 3: Algoritmos de Escalonamento

Este capítulo explora os principais algoritmos de escalonamento utilizados em sistemas


computacionais. Examina as características distintas de algoritmos como FCFS, RR, SJF,
SRTF, escalonamento por prioridades fixas e dinâmicas. Cada algoritmo é analisado quanto
aos seus efeitos no desempenho, eficiência e justiça na alocação de recursos.

Capítulo 4: Definição de Prioridades

A definição de prioridades é um aspecto fundamental do escalonamento. Neste capítulo,


discutiremos como as prioridades são determinadas, incluindo fatores externos, como prazos,
e fatores internos, como a importância da tarefa. Também faremos uma comparação entre os
algoritmos apresentados e exploraremos implementações reais de escalonadores em sistemas
operacionais.

Conclusão

A revisão abrangente da literatura apresentada neste trabalho fornece uma base sólida de
conhecimento sobre algoritmos de escalonamento. Ela destaca a importância de considerar
cuidadosamente os requisitos do sistema e das tarefas ao escolher o algoritmo de
escalonamento apropriado. Além disso, demonstra que o escalonamento desempenha um
papel fundamental na otimização do desempenho e da eficiência dos sistemas de computação
modernos, independentemente do contexto de uso.

1.4 Metodologia

Metodologia para Investigação sobre Algoritmos de Escalonamento.

Definição dos Objetivos da Pesquisa: Estabelecer claramente os objetivos da pesquisa, como

2
explorar algoritmos de escalonamento, analisar seu desempenho em cenários específicos ou
comparar diferentes algoritmos em termos de eficiência.

Seleção dos Algoritmos de Escalonamento: Escolher os algoritmos de escalonamento que


serão investigados no estudo. Esta seleção pode ser baseada em sua relevância para o
contexto da pesquisa ou em algoritmos comumente utilizados em sistemas computacionais.

Coleta de Dados: Coletar dados necessários para a análise dos algoritmos de escalonamento.
Isso pode incluir informações sobre cargas de trabalho, características das tarefas, métricas de
desempenho e restrições temporais, dependendo dos objetivos da pesquisa.

Comparação e Conclusões:Comparar os resultados obtidos com os diferentes algoritmos de


escalonamento. Formular conclusões com base nas análises realizadas e avaliar como cada
algoritmo se comporta em relação aos objetivos da pesquisa.

Discussão e Recomendação: Discutir as implicações práticas dos resultados e como os


algoritmos de escalonamento podem ser aplicados em cenários reais. Explorar possíveis
limitações do estudo e áreas para pesquisas futuras.

Documentação e Relatório: Escrever um relatório detalhado da pesquisa que inclua a


introdução, revisão da literatura, metodologia, resultados, conclusões e referências
bibliográficas.

Referências: Listar todas as fontes utilizadas na pesquisa de acordo com um estilo de citação
específico, como o estilo APA.

1.5 Limitações na Pesquisa

Complexidade dos Sistemas de Computação: Algoritmos de escalonamento são


frequentemente aplicados em ambientes computacionais complexos, envolvendo múltiplos
processos, recursos e variáveis. A complexidade inerente desses sistemas pode dificultar a
análise detalhada e a modelagem completa de todos os elementos relevantes.

Disponibilidade de Dados Realistas: A qualidade dos resultados obtidos em pesquisas sobre


algoritmos de escalonamento depende em grande parte da disponibilidade de dados realistas e
representativos. A obtenção de dados reais pode ser desafiadora, especialmente quando se
consideram sistemas específicos ou dados sensíveis.

Generalização dos Resultados: Os resultados obtidos ao investigar algoritmos de


escalonamento podem ser altamente dependentes das características específicas do sistema e
dos cenários de teste. Portanto, a generalização desses resultados para outros ambientes ou
sistemas requer cuidado e considerações adicionais.

Variações nas Implementações de Algoritmos: Algoritmos de escalonamento podem ser


implementados de maneira diferente em sistemas operacionais específicos ou em contextos
variados. Essas variações podem afetar os resultados e a comparabilidade entre diferentes
estudos.

3
Capitulo II

2.1 O Escalonamento

Escalonamento refere-se à atribuição de processos concorrentes a um ou mais processadores,


fato que é comum em sistemas operacionais multitarefa executando em computadores
pessoais. Geralmente, esse tipo de escalonamento é feito pelo sistema operacional, e baseia-
se no compartilhamento do processador através de técnicas de time-sharing, ou seja, o tempo
de uso do processador é dividido em pequenas fatias de tempo (time-slice) que são utilizadas
pelos diversos processos ordenadamente. Dessa maneira, permite-se uma utilização eficiente
e justa do processador disponível. Para garantir a imparcialidade, o sistema operacional cuida
da suspensão e ativação dos processos, através de uma técnica chamada de preempção

Casavant e Kuhl (1988) definem formalmente o problema do escalonamento enxergando-o


como um recurso para o gerenciamento de recursos. Dessa forma, pode-se dividir o problema
do escalonamento em três principais componentes:

 Consumidores (processos dos usuários e do sistema)

 Recursos (processadores, memória, redes de comunicação, etc.)

 Algoritmo de escalonamento

Os consumidores utilizam recursos computacionais, e o algoritmo de escalonamento é


responsável por distribuir os processos entre os processadores de acordo com as necessidades
e a disponibilidade de recursos.

Exemplos de possíveis objetivos são: diminuir o tempo de execução dos processos e


balancear a carga do sistema.

O escalonamento de processos é implementado através de um algoritmo de escalonamento,


que é organizado como um conjunto de componentes, permitindo uma visão modular do
algoritmo. Geralmente são divididos em políticas, que implementam diferentes partes do
processo de escalonamento, facilitando seu projeto e compreensão.

Quando se fala em escalonamento, processos são tradicionalmente classificados em "I/O-


bound" ou "CPU-bound". O primeiro faz grande uso de dispositivos de I/O e gasta muito
tempo esperando por operações de I/O terminarem; o segundo são aplicações numéricas que
gastam muito tempo de CPU.

Uma classificação alternativa apresenta três classes de processos:

Processos interativos

Esses interagem constantemente com usuários, e assim gastam muito tempo esperando por
operações do mouse e do teclado. Quando o dado é recebido, o processo deve acordar
rapidamente, ou o sistema parecerá lento. Tipicamente, o atraso médio deve cair entre 50 e
150 ms. Típicos programas interativos são editores de texto, aplicações gráficas.

4
Processos batch

Esses não precisam interagir com o usuário, e portanto geralmente rodam em background. Já
que esses processos não precisam interagir com o usuário, eles geralmente são penalizados
pelo escalonador. Típicos programas batch são compiladores, bancos de dados.

Processos tempo-real

Esses processos não devem ser nunca bloqueados por um processo de prioridade menor,
devem ter pequeno um tempo de resposta e, mais importante, esse tempo deve ter baixa
variação. Típicos programas tempo-real são aplicações multimedia, controladores de vídeo, e
programas que coletam dados de sensores físicos

2.2 Classificação dos Escalonamentos

O escalonamento pode ser estático ou dinâmico. No estático, o escalonamento é feito antes da


execução do processo e é definido explicitamente no código fonte ou durante a compilação
do programa a ser escalonado, não sendo modificado até o final de sua execução.

O escalonamento dinâmico é efetuado em tempo de execução, e pode ser modificado em


qualquer momento enquanto o processo estiver sendo executado. Os algoritmos de
escalonamento estático requerem que um grande número de informações sobre o processo a
ser executado esteja disponível antes de sua execução (por exemplo, tempo de execução do
processo, localização dos dados a serem utilizados, etc.), o que raramente acontece, visto que
a maioria dos problemas resolvidos computacionalmente não é determinística. Se a estimativa
da necessidade de recursos computacionais não corresponder à realidade, um escalonamento
estático fatalmente ocasionará a degradação do desempenho.

O escalonamento dinâmico possibilita uma maior flexibilidade através da utilização de


informações sobre o estado do sistema computacional para auxiliar nas suas decisões,
possibilitando um melhor desempenho. Também é possível modificar a distribuição dos
processos (através da migração de processos), permitindo a adequação do sistema em caso de
uma mudança brusca das cargas nos processadores. Uma desvantagem dessa abordagem é a
sobrecarga imposta no sistema pelo próprio algoritmo de escalonamento e pela necessidade
de possíveis migrações de processos.

A responsabilidade pelo escalonamento pode ser centralizada em um processador (não


distribuído) ou dividida entre vários processadores (distribuído). Se distribuído, o
escalonamento pode ser organizado de maneira cooperativa (quando as decisões de
Escalonamento de Processos em Sistemas Distribuídos escalonamento em cada processador
são tomadas levando em consideração uma visão global do sistema) ou de maneira não
cooperativa, quando cada processador decide baseado apenas em informações locais.

2.2.1 Escalonamento de Tempo Real

Em sistemas de tempo real que seguem a abordagem assíncrona os aspectos de


implementação estão presentes mesmo na fase de projeto. Na implementação de restrições

5
temporais, é de fundamental importância o conhecimento das propriedades temporais do
suporte de tempo de execução usado e da escolha de uma abordagem de escalonamento de
tempo real adequada à classe de problemas que o sistema deve tratar.

Em sistemas onde as noções de tempo e de concorrência são tratadas explicitamente,


conceitos e técnicas de escalonamento formam o ponto central na previsibilidade do
comportamento de sistemas de tempo real. Nos últimos anos, uma quantidade significativa de
novos algoritmos e de abordagens foi introduzida na literatura tratando de escalonamento de
tempo real. Infelizmente muitos desses trabalhos definem técnicas restritas e
consequentemente de uso limitado em aplicações reais.

O termo escalonamento (“scheduling”) identifica o procedimento de ordenar tarefas na fila de


Pronto. Uma escala de execução (“schedule”) é então uma ordenação ou lista que indica a
ordem de ocupação do processador por um conjunto de tarefas disponíveis na fila de Pronto.
O escalonador (“scheduler”) é o componente do sistema responsável em tempo de execução
pela gestão do processador.

Os algoritmos escalonadores são classificados quanto à forma de cálculo de ordenação das


tarefas. Os algoritmos são ditos preemptivos ou não preemptivos quando em qualquer
momento tarefas se executando podem ou não, respectivamente, ser interrompidas por outras
mais prioritárias. Algoritmos de escalonamento são identificados como estáticos quando o
cálculo da escala é feito tomando como base parâmetros atribuídos às tarefas do conjunto em
tempo de projeto (parâmetros fixos). Os dinâmicos, ao contrário, são baseados em parâmetros
que mudam em tempo de execução com a evolução do sistema.

2.2.2 Modelo de Tarefas

O conceito de tarefa é uma das abstrações básicas que fazem parte do que chamamos um
problema de escalonamento. Tarefas ou processos formam as unidades de processamento
seqüencial que concorrem sobre um ou mais recursos computacionais de um sistema. Uma
simples aplicação de tempo real é constituída tipicamente de várias tarefas.

Uma tarefa de tempo real, além da correção lógica (“correctness”), deve satisfazer seus
prazos e restrições temporais ou seja, apresentar também uma correção temporal
(“timeliness”).

As restrições temporais, as relações de precedência e de exclusão usualmente impostas sobre


tarefas são determinantes na definição de um modelo de tarefas que é parte integrante de um
problema de escalonamento.

2.3 Restrições Temporais

Aplicações de tempo real são caracterizadas por restrições temporais que devem ser
respeitadas para que se tenha o comportamento temporal ou necessário. Algumas dessas
restrições são:

Tempo de execução

6
Expressa o pior tempo de execução das tarefas. Isso é importante num sistema distribuído
quando o tempo de execução de uma tarefa pode ser diferente entre os nodos.

Deadline

Corresponde à capacidade de resposta requerida pelo sistema. Usualmente, existe apenas um


deadline explícito para uma cadeia de tarefas (end-to-end deadline) e não apenas para cada
tarefa individual. Uma abordagem comum é dividir esse end-to-end deadline em deadlines
menores que são atribuídos a cada tarefa.

Tempo de liberação

Estão geralmente relacionados aos períodos dos processos onde restringem o tempo de início
das tarefas. Muitos algoritmos escalonadores impoem tempos de liberação às tarefas como
uma maneira de obter exclusão mútua entre tarefas que acessam o mesmo recurso.

Tempo de chegada

É o instante em que o escalonador toma conhecimento de uma ativação de uma tarefa. Em


tarefas periódicas, o tempo de chegada coincide sempre com o início do período da ativação.

Tempo de início

Corresponde ao instante de início do processamento da tarefa em uma ativação.

Capitulo III Algoritmos de escalonamento

Esta secção descreve os algoritmos mais simples de escalonamento de tarefas encontrados na


literatura. Esses algoritmos raramente são usados, mas servem de base conceitual para a
construção dos escalonadores mais complexos que são usados em sistemas operacionais reais.
Para a descrição do funcionamento de cada algoritmo será considerado um sistema
monoprocessado e um conjunto hipotético de 4 tarefas (t1 · · · t5) na fila de prontas do
sistema operacional, descritas na Figura a seguir.

Figura 1: Tarefas na fila de prontas.

Para simplifificar a análise dos algoritmos, as tarefas t1 · · · t5 são orientadas a


processamento, ou seja, não param para realizar operações de entrada/saída. Cada tarefa tem
uma data de ingresso (instante em que entrou no sistema), uma duração (tempo de
processamento que necessita para realizar sua execução) e uma prioridade (usada nos
algoritmos PRIOc e PRIOp).

7
3.1 First-Come, First Served (FCFS)

A forma de escalonamento mais elementar consiste em simplesmente atender as tarefas em


sequência, à medida em que elas se tornam prontas (ou seja, conforme sua ordem de ingresso
na fila de tarefas prontas). Esse algoritmo é conhecido como FCFS – First Come - First
Served – e tem como principal vantagem sua simplicidade.

O diagrama da Figura 2 abaixo mostra o escalonamento das tarefas da Figura 1 usando o


algoritmo FCFS cooperativo (ou seja, sem quantum ou outras interrupções). Os quadros
sombreados representam o uso do processador (observe que em cada instante apenas uma
tarefa ocupa o processador). Os quadros brancos representam as tarefas que já ingressaram no
sistema e estão aguardando o processador (tarefas prontas).

Figura 2: Escalonamento FCFS

Calculando o tempo médio de execução (Tt , a média de tt(ti)) e o tempo médio de espera
(Tw, a média de tw(ti)) para a execução da Figura 2, temos:

8
3.2 Round-Robin (RR)

A adição da preempção por tempo ao escalonamento FCFS dá origem a outro algoritmo de


escalonamento bastante popular, conhecido como escalonamento por revezamento, ou
Round-Robin. Considerando as tarefas definidas na tabela anterior e um quantum tq = 2s,
seria obtida a sequência de escalonamento apresentada na Figura

Figura 3: Escalonamento Round-Robin

Na Figura 3, é importante observar que a execução das tarefas não obedece uma sequência
óbvia como t1 → t2 → t3 → t4 → t5 → t1 → t2 → . . ., mas uma sequência bem mais
complexa: t1 → t2 → t3 → t1 → t4 → t5 → . . .. Isso ocorre por causa da ordem das tarefas
na fila de tarefas prontas. Por exemplo, a tarefa t1 para de executar e volta à fila de tarefas
prontas no instante t = 2, antes de t4 ter entrado no sistema (em t = 3). Por isso, t1 retorna ao
processador antes de t4 (em t = 6). A Figura 4 detalha a evolução da fila de tarefas prontas ao
longo do tempo, para esse exemplo. Calculando o tempo médio de execução Tt e o tempo
médio de espera Tw para a execução da Figura 3, temos:

Observa-se o aumento nos tempos Tt e Tw em relação ao algoritmo FCFS simples, o que


mostra que o algoritmo Round-Robin é menos efificiente para a execução de tarefas em lote.
Entretanto, por distribuir melhor o uso do processador entre as tarefas ao longo do tempo, ele
proporciona tempos de resposta bem melhores às aplicações interativas.

Outro problema deste escalonador é o aumento no número de trocas de contexto, que,

9
Figura 4: Evolução da fila de tarefas prontas no escalonamento Round-Robin.

Deve-se observar que os algoritmos de escalonamento FCFS e RR não levam em conta a


importância das tarefas nem seu comportamento em relação ao uso dos recursos.

Por exemplo, nesses algoritmos as tarefas orientadas a entrada/saída irão receber menos
tempo de processador que as tarefas orientadas a processamento (pois as primeiras
geralmente não usam integralmente seus quanta de tempo), o que pode ser prejudicial para
aplicações interativas.

3.3 Shortest Job First (SJF)

O algoritmo de escalonamento conhecido como menor tarefa primeiro (SJF - Shortest Job
First) consiste em atribuir o processador à menor (mais curta) tarefa da fifila de tarefas
prontas. Esse algoritmo (e sua versão preemptiva, SRTF) proporciona os menores tempos
médios de espera das tarefas. Aplicando-se este algoritmo às tarefas da Figura 1, obtém-se o
escalonamento apresentado na Figura 5.

Calculando o tempo médio de execução Tt e o tempo médio de espera Tw para a execução da


Figura 5, temos:

10
Figura 5: Escalonamento SJF.

A maior dificuldade no uso do algoritmo SJF consiste em estimar a priori a duração de cada
tarefa, antes de sua execução. Com exceção de algumas tarefas em lote ou de tempo real, essa
estimativa é inviável; por exemplo, como estimar por quanto tempo um editor de textos irá
ser utilizado? Por causa desse problema, o algoritmo SJF puro é pouco utilizado. No entanto,
ao associarmos o algoritmo SJF ao algoritmo RR, esse algoritmo pode ser de grande valia,
sobretudo para tarefas orientadas a entrada/saída.

Supondo uma tarefa orientada a entrada/saída em um sistema preemptivo com tq = 10ms. Nas
últimas 3 vezes em que recebeu o processador, essa tarefa utilizou 3ms, 4ms e 4, 5ms de cada
quantum recebido. Com base nesses dados históricos, é possível estimar qual a utilização de
quantum provável da tarefa na próxima vez em que receber o processador. Essa estimativa
pode ser feita por média simples (cálculo mais rápido) ou por extrapolação (cálculo mais
complexo, podendo influenciar o tempo de troca de contexto ttc).

A estimativa de uso do próximo quantum assim obtida pode ser usada como base para a
aplicação do algoritmo SJF, o que irá benefificiar as tarefas orientadas a entrada/saída, que
usam menos o processador. Obviamente, uma tarefa pode mudar de comportamento
repentinamente, passando de uma fase de entrada/saída para uma fase de processamento, ou
vice-versa. Nesse caso, a estimativa de uso do próximo quantum será incorreta durante alguns
ciclos, mas logo voltará a refletir o comportamento atual da tarefa. Por essa razão, apenas a
história recente da tarefa deve ser considerada (3 a 5 últimas ativações).

Outro problema associado ao escalonamento SJF é a possibilidade de inanição (starvation)


das tarefas mais longas. Caso o fluxo de tarefas curtas chegando ao sistema seja elevado, as
tarefas mais longas nunca serão escolhidas para receber o processador e vão literalmente
“morrer de fome”, esperando na fifila sem poder executar. Esse problema pode ser resolvido
através de técnicas de envelhecimento de tarefas.

3.4 Shortest Remaining Time First (SRTF)

O algoritmo SJF é cooperativo, ou seja, uma vez que uma tarefa recebe o processador, ela
executa até encerrar (ou liberá-lo explicitamente). Em uma variante preemptiva, o
escalonador deve comparar a duração prevista de cada nova tarefa que ingressa no sistema

11
com o tempo de processamento restante das demais tarefas presentes, inclusive aquela que
está executando no momento. Caso a nova tarefa tenha um tempo restante menor, ela recebe
o processador. Essa abordagem é denominada

O algoritmo SJF é cooperativo, ou seja, uma vez que uma tarefa recebe o processador, ela
executa até encerrar (ou liberá-lo explicitamente). Em uma variante preemptiva, o
escalonador deve comparar a duração prevista de cada nova tarefa que ingressa no sistema
com o tempo de processamento restante das demais tarefas presentes, inclusive aquela que
está executando no momento. Caso a nova tarefa tenha um tempo restante menor, ela recebe
o processador. Essa abordagem é denominada

Figura 6: Escalonamento SRTF

Calculando o tempo médio de execução Tt e o tempo médio de espera Tw para a execução da


Figura 6, temos:

Pode-se observar que os tempos médios de execução Tt e de espera Tw são os menores


observados até aqui. De fato, SRTF é o algoritmo de escalonamento que permite obter os
mínimos valores de Tt e Tw. Ele torna o processamento de tarefas curtas muito efificiente,
todavia com o risco de inanição das tarefas mais longas.

3.5 Escalonamento por prioridades fixas (PRIOc, PRIOp)

Vários critérios podem ser usados para ordenar a fifila de tarefas prontas e escolher a próxima
tarefa a executar; a data de ingresso da tarefa (usada no FCFS) e sua duração prevista (usada
no SJF) são apenas dois deles. Inúmeros outros critérios podem ser especificados, como o
comportamento da tarefa (em lote, interativa ou de tempo real), seu proprietário
(administrador, gerente, estagiário), seu grau de interatividade, etc.

12
No escalonamento por prioridade, a cada tarefa é associada uma prioridade, geralmente na
forma de um número inteiro, que representa sua importância no sistema.

Os valores de prioridade são então usados para defifinir a ordem de execução das tarefas.

O algoritmo de escalonamento por prioridade defifine um modelo mais genérico de


escalonamento, que permite modelar várias abordagens, entre as quais o FCFS e o SJF.

O escalonamento por prioridade pode ser cooperativo ou preemptivo. O diagrama da Figura 7


mostra o escalonamento das tarefas da Figura 1 usando o algoritmo por prioridade
cooperativo, ou PRIOc. Neste exemplo, os valores de prioridade são considerados em uma
escala de prioridade positiva, ou seja, valores numéricos maiores indicam maior prioridade.

Calculando o tempo médio de execução Tt e o tempo médio de espera Tw para a execução da


Figura 7, temos:

Figura 7: Escalonamento por prioridade cooperativo (PRIOc).

No escalonamento por prioridade preemptivo (PRIOp), quando uma tarefa de maior


prioridade se torna disponível para execução, o escalonador entrega o processador a ela,
trazendo a tarefa atualmente em execução de volta para a fifila de prontas. Em outras
palavras, a tarefa em execução pode ser “preemptada” por uma nova tarefa mais prioritária.
Esse comportamento é apresentado na Figura 8 (observe que, quando t4 ingressa no sistema,
ela recebe o processador e t1 volta a esperar na fifila de prontas).

13
Figura 8: Escalonamento por prioridade preemptivo (PRIOp).

Calculando o tempo médio de execução Tt e o tempo médio de espera Tw para a execução da


Figura 8, temos:

3.6 Escalonamento por prioridades dinâmicas (PRIOd)

No escalonamento por prioridades fifixas apresentado na seção anterior, as tarefas de menor


prioridade só recebem o processador na ausência de tarefas de maior prioridade. Caso
existam tarefas de maior prioridade frequentemente ativas, as de menor prioridade podem
“morrer de fome” por nunca conseguir chegar ao processador.

Esse fenômeno se denomina inanição (do inglês starvation).

Para evitar a inanição das tarefas de menor prioridade, um fator interno denominado
envelhecimento (aging) deve ser definido. O envelhecimento aumenta a prioridade da tarefa
proporcionalmente ao tempo que ela está aguardando o processador.

Dessa forma, o envelhecimento define um esquema de prioridades dinâmicas, que permite a


elas executar periodicamente e assim evitar a inanição.

Uma forma de implementar o envelhecimento de tarefas está indicada no algoritmo a seguir,


que associa duas prioridades a cada tarefa ti : a prioridade estática ou fixa pei , definida por
fatores externos, e a prioridade dinâmica pdi , que evolui ao longo da execução (considera-se
uma escala de prioridades positiva).

14
O funcionamento é simples: a cada turno o escalonador escolhe como próxima tarefa (tprox)
aquela que tiver a maior prioridade dinâmica (pd). A prioridade dinâmica das demais tarefas
é aumentada de uma constante α, conhecida como fator de envelhecimento (ou seja, essas
tarefas “envelhecem” um pouco e no próximo turno terão mais chances de ser escolhidas).
Por sua vez, a tarefa escolhida (tprox) “rejuvenesce”, tendo sua prioridade dinâmica ajustada
de volta para o valor de sua prioridade estática (pdprox ← peprox).

Aplicando o escalonamento com prioridades dinâmicas com envelhecimento, a execução das


tarefas da Figura 1 pode ser observada na Figura 9.

Calculando o tempo médio de execução Tt e o tempo médio de espera Tw para a execução da


Figura 9, temos:

Figura 9: Escalonamento por prioridade preemptivo dinâmico (PRIOd).

15
As prioridades dinâmicas resolvem um problema importante em sistemas de tempo
compartilhado. Nesses sistemas, as prioridades definidas pelo usuário estão intuitivamente
relacionadas à proporcionalidade desejada na divisão do tempo de processamento. Por
exemplo, caso um sistema de tempo compartilhado receba três tarefas: t1 com prioridade 1, t2
com prioridade 3 e t3 com prioridade 6, espera-se que t3 receba mais o processador que t2, e
esta mais que t1 (assumindo uma escala de prioridades positiva).

Contudo, se associarmos apenas prioridades fifixas a um escalonador RoundRobin, as tarefas


irão executar de forma sequencial, sem a distribuição proporcional do processador. Esse
resultado indesejável ocorre porque, a cada fim de quantum, sempre a tarefa mais prioritária é
escolhida. Essa situação está ilustrada na Figura 10.

Figura 10: Escalonamento Round-Robin com prioridades fixas.

Usando o algoritmo de envelhecimento, a divisão do processador entre as tarefas se torna


proporcional às suas prioridades estáticas. A Figura 11 ilustra a proporcionalidade obtida:
percebe-se que todas as três tarefas recebem o processador periodicamente, mas que t3 recebe
mais tempo de processador que t2, e que t2 recebe mais que t1.

Figura 11: Escalonamento Round-Robin com prioridades dinâmicas.

16
Capitulo IV Definição de prioridades

A definição da prioridade de uma tarefa é influenciada por diversos fatores, que podem ser
classificados em dois grandes grupos:

4.1 Fatores externos


Informações providas pelo usuário ou o administrador do sistema, que o escalonador não
conseguiria estimar sozinho. Os fatores externos mais comuns são a classe do usuário
(administrador, diretor, estagiário) o valor pago pelo uso do sistema (serviço básico, serviço
premium) e a importância da tarefa em si (um detector de intrusão, um script de
reconfiguração emergencial, etc.).

4.2 Fatores internos


Informações que podem ser obtidas ou estimadas pelo próprio escalonador, com base em
dados disponíveis no sistema operacional. Os fatores internos mais utilizados são a idade da
tarefa, sua duração estimada, sua interatividade, seu uso de memória ou de outros recursos,
seu envelhecimento, etc. Os fatores internos mudam continuamente e devem ser recalculados
periodicamente pelo escalonador.

Os fatores externos são usualmente sintetizados em um valor inteiro denominado prioridade


estática (ou prioridade de base), que resume a “opinião” do usuário ou administrador sobre a
importância daquela tarefa. Em geral, cada família de sistemas operacionais defifine sua
própria escala de prioridades estáticas. Alguns exemplos de escalas comuns são:

Windows (2000 em diante): processos e threads são associados a classes de prioridade (6


classes para processos e 7 classes para threads); a prioridade fifinal de uma thread depende de
sua prioridade de sua própria classe de prioridade e da classe de prioridade do processo ao
qual está associada, assumindo valores entre 0 e 31. As prioridades do processos,
apresentadas aos usuários no Gerenciador de Tarefas, apresentam os seguintes valores
default:

 24: tempo real

 13: alta

 10: acima do normal

 8: normal

 6: abaixo do normal

 4: baixa ou ociosa

Além disso, geralmente a prioridade da tarefa responsável pela janela ativa recebe um
incremento de prioridade: +1 ou +2, conforme a configuração do sistema (essa informação é
considerada um fator interno de prioridade).

Linux (núcleo 2.4 em diante): considera duas escalas de prioridade separadas:

17
Tarefas de tempo real: usam uma escala de 1 a 99 positiva (valores maiores indicam maior
prioridade). Somente o núcleo ou o administrador (root) podem lançar tarefas de tempo real.

Demais tarefas: usam uma escala que vai de −20 a +19, negativa (valores maiores indicam
menor prioridade). Esta escala, denominada nice level, é padronizada em todos os sistemas
UNIX-like. A prioridade das tarefas de usuário pode ser ajustada através dos comandos nice e
renice.

4.3 Comparação entre os algoritmos apresentados

A Tabela 6.2 traz uma comparação sucinta entres os algoritmos apresentados nesta seção.
Pode-se observar que os algoritmos preemptivos (RR, SRTF e PRIOp) possuem um número
de trocas de contexto maior que seus correspondentes cooperativos, o que era de se esperar.
Também pode-se constatar que o algoritmo SRTF proporciona os melhores tempos médios de
execução Tt e de espera Tw, enquanto os piores tempos são providos pelo algoritmo RR (que,
no entanto, oferece um melhor tempo de resposta a aplicações interativas).

Observa-se também que o tempo total de processamento é constante, pois ele só depende da
carga de processamento de cada tarefa e não da ordem em que são executadas. Contudo, esse
tempo pode ser influenciado pelo número de trocas de contexto, caso seja muito elevado.

4.4 Escalonadores reais

Sistemas operacionais de mercado como Windows, Linux e MacOS são feitos para executar
tarefas de diversos tipos, como jogos, editores de texto, conversores de vídeo, backups, etc.
Para lidar com essa grande diversidade de tarefas, os escalonadores desses sistemas
implementam algoritmos complexos, combinando mais de uma política de escalonamento.

No Linux, as tarefas são divididas em diversas classes de escalonamento, de acordo com suas
demandas de processamento. Cada classe possui sua própria fifila de tarefas, em um esquema
conhecido como Multiple Feedback Queues [Arpaci-Dusseau and Arpaci-Dusseau, 2014]. As
classes defifinidas no escalonador atual (núcleo 4.16, em 2018) são:

Classe SCHED_DEADLINE: classe específifica para tarefas de tempo real que devem
executar periodicamente e respeitar prazos deadlines predefifinidos. A fifila de tarefas desta
classe é organizada por um algoritmo chamado Earliest Deadline First (EDF), usual em
sistemas de tempo real [Farines et al., 2000].

Classe SCHED_FIFO: tarefas nesta classe são escalonadas usando uma política com
prioridade fixa preemptiva, sem envelhecimento nem quantum. Portanto, uma tarefa nesta
classe executa até bloquear por recursos, liberar explicitamente o processador (através da
chamada de sistema sched_yield()) ou ser interrompida por outra tarefa de maior prioridade
nesta mesma classe.

18
Classe SCHED_RR: esta classe implementa uma política similar à SCHED_FIFO, com a
inclusão da preempção por tempo (Round-Robin). O valor do quantum é proporcional à
prioridade de cada tarefa, variando de 10ms a 200ms.

Classe SCHED_NORMAL ou SCHED_OTHER: é a classe padrão, que suporta as tarefas


interativas dos usuários. As tarefas são escalonadas por uma política baseada em prioridades
dinâmicas (envelhecimento) e Round-Robin com quantum variável.

Classe SCHED_BATCH: similar à classe SCHED_NORMAL, mas pressupõe que as tarefas


são orientadas a processamento (CPU-bound) e portanto são ativadas menos frequentemente
que as tarefas em SCHED_NORMAL.

Classe SCHED_IDLE: classe com a menor prioridade de escalonamento; tarefas nesta


classe só recebem processador caso não exista nenhuma outra tarefa ativa no sistema.

As tarefas são ativadas de acordo com sua classe, sendo SCHED_DEADLINE >
SCHED_FIFO > SCHED_RR > SCHED_NORMAL/BATCH/IDLE. Assim, tarefas nas
chamadas classes interativas (SCHED_NORMAL/BATCH/IDLE) só executam se não
houverem tarefas ativas nas classes denominadas de tempo real
(SCHED_DEADLINE/FIFO/RR).

O núcleo Linux usa escalas de prioridade e algoritmos distintos para as várias classes de
escalonamento. Para as tarefas interativas (SCHED_NORMAL/BATCH/IDLE) é usado o
Completely Fair Scheduler (CFS), baseado no conceito de escalonadores justos [Kay and
Lauder, 1988], com prioridades entre -20 e +19.

O CFS mantém a lista de tarefas prontas em uma árvore rubro-negra ordenada por tempos de
processamento realizado, o que confere uma boa escalabilidade (os custos de busca, inserção
e remoção nessa árvore são da ordem de O(log n)). Por outro lado, as tarefas nas classes de
tempo real têm prioridades entre 1 e 99 e são escalonadas por algoritmos específicos, como
EDF (Earliest Deadline First) para SCHED_DEADLINE, o PRIOp para SCHED_FIFO e o
PRIOp+RR para SCHED_RR.

19
Capitulo V - Conclusões e Recomendações

5.1 Conclusão

Ao investigar e analisar os algoritmos de escalonamento em sistemas computacionais com


foco na otimização da alocação de recursos e no aprimoramento do desempenho, nossa
pesquisa revelou a extrema importância desses algoritmos em uma variedade de contextos.
Constatamos que os algoritmos de escalonamento desempenham um papel fundamental na
eficiência operacional de sistemas de computação, garantindo a alocação justa e eficaz de
recursos, ao mesmo tempo em que atendem às demandas de sistemas de tempo real e
ambientes computacionais complexos.

Através desta investigação, pudemos explorar a diversidade de algoritmos de escalonamento,


desde os mais simples até os mais complexos, e entender como eles são aplicados em
cenários diversos. A análise minuciosa nos permitiu compreender que a escolha do algoritmo
de escalonamento deve ser feita com base nas características específicas do sistema, na carga
de trabalho e nos objetivos desejados. Além disso, a constante evolução da tecnologia e a
crescente complexidade dos ambientes computacionais continuam a desafiar os
desenvolvedores e administradores de sistemas a adaptar e aprimorar os algoritmos de
escalonamento para atender às demandas em constante mudança.

Em última análise, nossa pesquisa demonstrou que os algoritmos de escalonamento são peças
cruciais para a otimização e eficácia do uso de recursos em sistemas computacionais. A
compreensão profunda desses algoritmos é essencial para garantir o desempenho adequado, a
confiabilidade e a satisfação dos usuários em uma ampla gama de aplicações. Portanto,
continuaremos a explorar e aprimorar essas estratégias de escalonamento, buscando atender
às crescentes demandas da computação moderna e garantir o funcionamento eficiente dos
sistemas computacionais em um mundo cada vez mais dependente da tecnologia.

20
5.2 Recomendações

5.2.1 Âmbito Acadêmico

Revisão Bibliográfica Completa: Iniciar o trabalho de pesquisa realizando uma revisão


bibliográfica completa e atualizada sobre algoritmos de escalonamento. Isso ajudará a
compreender os avanços recentes na área e a identificar lacunas no conhecimento existente.

Abordagem Multidisciplinar: Considerar abordar o tema de escalonamento de forma


multidisciplinar, explorando não apenas a teoria dos algoritmos, mas também aspectos
relacionados à computação, matemática, estatística, dependendo do contexto de uso.

Experimentação Prática: Realizar experimentos práticos para avaliar o desempenho de


diferentes algoritmos de escalonamento em cenários reais. Use ferramentas de simulação ou
sistemas computacionais para coletar dados empíricos que possam enriquecer sua pesquisa.

Contribuição Original: Procurar contribuir com novas ideias, algoritmos ou melhorias em


algoritmos existentes. Uma pesquisa acadêmica valiosa muitas vezes está associada a
inovações ou a uma abordagem única para problemas de escalonamento.

5.2.2 Âmbito Social

Relevância para a Sociedade: Certifique-se de destacar a relevância dos algoritmos de


escalonamento na vida cotidiana das pessoas. Explique como esses algoritmos impactam a
eficiência de sistemas de transporte, agendamento de serviços, entre outros, e como podem
melhorar a qualidade de vida.

Transparência e Ética: Analisar e discutir as implicações éticas dos algoritmos de


escalonamento, especialmente quando aplicados a sistemas que afetam diretamente as
pessoas. Aborde questões como justiça, equidade e privacidade.

Comunicação Acessível: Apresentar suas descobertas de forma acessível e compreensível


para o público em geral. Isso pode envolver o uso de visualizações, exemplos práticos e
linguagem simples para tornar a pesquisa mais acessível.

5.2.3 Âmbito Econômico:

Custos e Benefícios: Analisar os custos e benefícios associados à implementação de


algoritmos de escalonamento em diferentes setores econômicos. Destaque como esses
algoritmos podem economizar recursos, reduzir custos operacionais ou aumentar a eficiência.

Impacto no Mercado de Trabalho: Considerar o impacto dos algoritmos de escalonamento na


força de trabalho. Como eles podem afetar o emprego, a automação de tarefas ou a criação de
novas oportunidades de trabalho?

Viabilidade de Implementação: Avaliar a viabilidade prática da implementação de algoritmos


de escalonamento em diferentes indústrias e organizações. Discuta as barreiras tecnológicas,
regulatórias ou culturais que podem surgir.

21
Referencias bibliográficas

Casavant, T., & Kuhl, J. (1988). A Taxonomy of Scheduling in General-Purpose Distributed


Computing Systems. IEEE Transactions on Software Engineering, 14, 141-154.

Kay, A., & Lauder, P. (1988). A fair share scheduler. Communications of the ACM, 31(1),
44-55.

Farines, J. da Silva Fraga, & Oliveira, R. S. de (2000). Sistemas de Tempo Real – 12¯a
Escola de Computação da SBC. Sociedade Brasileira de Computação. Recuperado de
http://www.das.ufsc.br/gtr/livro.

Arpaci-Dusseau, R. H., & Arpaci-Dusseau, A. (2014). Multi-level Feedback Queue (Capítulo


8). Em Arpaci-Dusseau Books. Recuperado de http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-
sched-mlfq.pdf.

22

Você também pode gostar