Você está na página 1de 7

Escalonamento em Sistemas Operacionais

Thomas dos Santos Fritsch

Eng. e Téc. da Informação - Faculdade de Desenvolvimento do Rio Grande do Sul


(FADERGS)

Endereço: R. Mal. Floriano Peixoto, 185 - Centro Histórico, Porto Alegre - RS,
90020-061

Abstract.This meta-article aims to describe the operation of scheduling in operating


systems, apply memory allocation algorithms, compare the operation of scheduling and
memory allocation with different methods.

Resumo. Este meta-artigo tem como finalidade descrever o funcionamento de


escalonamento em sistemas operacionais, aplicar algoritmos de alocação de memória,
comparar o funcionamento do escalonamento e da alocação de memória com métodos
diferentes.

1.O que é Escalonador de processos.

Um Escalonador de Processos é um subsistema do Sistema Operacional responsável por


decidir o momento em que cada processo obterá a CPU. É utilizado algoritmos de
escalonamento que estabelecem a lógica de tal decisão. Nesse momento de decidir qual
escalonador será utilizado no sistema operacional, cabe avaliar o cenário que o sistema
será utilizado.
Deve-se ter cuidado com algumas variáveis como em casos que necessitam de mais
processamento, ou seja, ação da CPU. Como com processos que necessitam de
processamento, ocuparão a CPU por um tempo maior e não precisarão, ou de pouca
intervenção do usuário. Por exemplo, programas de cálculo científico, que o usuário insere
parâmetros e executa o programa que demorará um determinado tempo para mostrar os
resultados, isso exige processamento da CPU, com entrada e saída de dados apenas no
momento inicial. Já processos que necessitam de mais entrada e saída de dados, ou seja, o
processo necessita de intervenção do usuário. Por exemplo, ao digitar um texto, há entrada
e saída de dados, logo, a resposta do ato de teclar e a resposta de aparecer isso na tela
exige que esse processo "entra e sai" da CPU inúmeras vezes e em um pequeno espaço de
tempo.
Acabamos de ver os dois diferentes comportamentos de processos. Aqueles orientados a
Entrada e Saída (IN/OUT bound) e aqueles orientados a orientados a CPU (CPU bound).
2.Quando escalonar.
Agora sim, estamos no momento em que o sistema operacional toma a decisão de intervir
ou não sobre qual processo ganhará a CPU. Apresentarei dois cenários de escalonamento:
O Escalonamento Não Preemptivo que ocorre apenas em situações que praticamente
obrigam que uma decisão seja tomada. Esse cenário tem as seguintes condições: Criação
de um novo processo; Término de um processo; Processo ser bloqueado; Após alguma
interrupção.
E o Escalonamento Preemptivo que escolhe um processo e lhe concede a CPU durante
certo tempo. Findado esse tempo, a CPU é de outro processo. Esse cenário tem as
seguintes condições: Criação de um novo processo; Término de um processo; Processo ser
bloqueado; Após alguma interrupção; Periodicamente, a cada k intervalos de relógio.

3.Categoria de Algoritmos de Escalonamento de Processos.

O Escalonamento de Processos pode envolver diferentes tipos de requisitos, seguindo


assim diferentes parâmetros e diferentes lógicas. É sugerida uma classificação segundo o
tipo de sistema, o tipo de aplicação onde o algoritmo estará atuando. Segue os sistemas e
seus objetivos:

Todos os sistemas possuem o objetivo geral de justiça, dar a cada processo uma porção
justa da CPU; aplicação da política do algoritmo, verificar se a política estabelecida está
sendo cumprida; equilíbrio, manter ocupada todas as partes do sistema.

3.1.Sistemas em Lote: possuem o objeto de vazão (throughput), maximizar o número de


Jobs por hora; tempo de retorno, minimizar o tempo entre a submissão e o término;
utilização de CPU, manter a CPU ocupada por todo tempo.

3.2.Sistemas Interativos: possuem o objetivo de tempo de resposta, responder


rapidamente às requisições; proporcionalidade, satisfazer as expectativas dos usuários.
3.3.Sistemas de Tempo Real: possuem o objetivo de cumprimento dos prazos, evitar a
perda de dados; previsibilidade, evitar a degradação da qualidade em sistemas multimídia.

4.Vejamos algumas forma de implementar

4.1. Escalonamento “Round-Robin”: Cada processo recebe um intervalo de tempo


(quantum) e se o processo ainda está rodando quando seu quantum terminar (ou se o
processo bloqueie ou termine antes de acabar), a UCP é tomada deste processo e o
escalonador seleciona um novo para rodar. O escalonador mantém uma lista de processos
executáveis (que estão prontos) e quando o quantum termina sem o processo terminar, o
mesmo é colocado no fim dessa lista. O escalonador sempre seleciona o primeiro processo
dessa lista para execução. O valor do quantum deve ser escolhido cuidadosamente, se o
valor do quantum for muito pequeno, teremos grande parte do tempo de execução da UCP
gasta com o processo de chaveamento, e se o valor for muito grande, isto gera um tempo
de resposta muito grande para usuários interativos. Processo com muita utilização da UCP
devem ganhar maior quantum, para reduzir o número de chaveamento executado nesse
processo. O grande problema aqui é o que o SO trata igualmente todos os processos, seja
ele de pouca importância ou de grande importância.

4.2. Escalonamento com Prioridade: a prioridade serve para oferecer um tratamento


distinto a processos diversos. No instante da criação de um processo ele recebe uma
prioridade. E o quando o escalonador tiver que escolher qual processo será executado,
escolherá o de mais alta prioridade. Cada vez que o processo é executado, o escalonador
decrementa sua prioridade e quando sua prioridade fica abaixo de um outro processo
pronto, ele é interrompido e o outro processo é executado. Temos duas maneiras de
associar prioridades a processos:

a) de forma estática: quando a prioridade é associada no momento da criação do processo.


Ex: quando se tem uma hierarquia.

b) de forma dinâmica: o escalonador decide o valor da prioridade de acordo com estatísticas


sobre a execução deste processo em quanta anteriores. Ex: quando o sistema percebe que
um processo efetua muita E/S, o escalonador aumenta sua prioridade (operações de E/S
são realizadas independentemente da UCP, pois o processo faz uma chamada para o SO e
fica bloqueado e enquanto isso a UCP pode estar alocada a outro processo que efetua
cálculos).

Resumo: quanto maior E/S (menor uso do processador), maior prioridade (prioridade = 0).

4.3. Filas Múltiplas: devemos estabelecer classes de prioridades. Os processos de classes


mais altas são escolhidos para execução mais freqüentemente que os de classe mais
baixas (recebem um número maior de quanta para processamento). Os processos da
classe mais alta existente recebem 1 quantum, a classe abaixo recebe 2, a outra 4 e assim
sucessivamente na potência de 2. Quando o processo utiliza todos os quanta que recebeu,
ele é abaixado de uma classe (fazendo com que seja escolhido menos freqüentemente,
mas execute durante mais tempo). Ex: num processo que necessita de 100 quanta para
executar, teremos execuções de 1, 2, 4, 8, 16, 32, 37 (totalizando 100), isto é, ele é
selecionado para execução 7 vezes (7 chaveamentos para este processo). Se fosse no
método Round-Robin ele seria selecionado 100 vezes até acabar. Surgiu um inconveniente:
se um processo começa com grande quantidade de cálculos, mas depois se torna interativo
(comunicação com o usuário), teríamos um tempo de resposta ruim. Para eliminar este
problema, foi implementado mais um método que seria o seguinte: cada vez que um é
teclado no terminal de um processo, este processo é transferido para a classe de prioridade
mais alta (pois se tornou interativo). Mas depois um usuário descobriu que durante a
execução de um processo grande, bastava teclar no terminal aleatoriamente para ter o
tempo de execução melhorado.

OBS: As estratégias 1, 2 e 3 são úteis para sistemas de time-sharing.

4.4. Menor Serviço Primeiro: é útil para sistemas de lotes (batch), pois muitas vezes o
usuário já sabe estimar o tempo de execução dos programas (pois os programas são
rodados constantemente). O escalonador escolhe para execução entre todos os jobs
disponíveis, aquele de menor tempo de execução. EX: Existem quatro jobs disponíveis (A,
B, C, D). O A demora 8 minutos para executar e os demais, 4 minutos cada. Se o job de 8
minutos for escolhido antes, teríamos:

● Tempo de resposta de A: 8 minutos


● Tempo de resposta de B: 8 + 4 minutos = 12 minutos
● Tempo de resposta de C: 8 + 4 + 4 minutos = 16 minutos
● Tempo de resposta de D: 8 + 4 + 4 + 4 minutos = 20 minutos
● Tempo médio de resposta = 56/4 = 14 minutos

Utilizando o método Menor Serviço Primeiro vamos ter um tempo médio de resposta igual a
11 minutos! Mesmo que os serviços não sejam todos conhecidos o tempo de resposta pode
não ser o mínimo mas é uma boa aproximação.

4.5. Escalonamento Dirigido a Política: Se existem ‘n’ usuários ativos, então, cada um
receberá aproximadamente 1/n do tempo de UCP. Para garantir isso devemos usar o
seguinte método:

● manter para cada usuário o valor do tempo de UCP que ele já utilizou desde
que entrou (tempo utilizado).
● contar quanto tempo já se passou desde que o usuário iniciou sua seção e
dividir pelo número de usuários gerando o tempo destinado ao processo
(tempo destinado)
● computar para cada usuário a razão entre o tempo utilizado e o tempo
destinado (razão)

Então escolhemos para execução aquele usuário que apresenta a menor razão. Ex:
Ia = 4 / (10/2) = 0,8 = 80%

Ib = 6 / (10/2) = 1,2 = 120 %

Devemos escolher o processo de menor porcentagem para colocar em execução.

(no caso, o A)
Ia = (( 4 / (10/2)) x 10 +

( 6 / (15/3) ) x 15 ) / 25 = 1,04

Ib = (( 6 / (10/2)) x 10 +

( 4 / (15/3)) x 15 ) / 25 = 0,96

Ic = (( 5/(15/3) x 15 ) / 15 = 1,0

Neste caso, o escolhido é o B

4.6. Escalonamento em Dois Níveis: Até aqui consideramos que todos os processos
executáveis estão na memória. Diferentemente, aqui precisamos manter parte dos
processos em disco (pois a memória principal dificilmente comportará todos os dados
necessários). O problema é que o tempo para ativar um processo que está em disco é
muito maior que o para ativar um que está na memória. A melhor solução para isto é a
utilização de um escalonador em dois níveis. Para isso um subconjunto dos processos
executáveis é mantido na memória e um outro subconjunto é mantido no disco. Um
escalonador (baixo nível) é utilizado para realizar o chaveamento (por qualquer método
descrito anteriormente) apenas entre os processos que estão na memória e outro
escalonador (alto nível) é utilizado para trocar periodicamente o conjunto de processos que
estão na memória (por aqueles que estavam em disco). Para escolher qual conjunto de
processos será colocado na memória, o escalonador de alto nível deve verificar: o tamanho
do processo, a prioridade do processo, o tempo de UCP do processo, quando tempo se
passou desde que o processo foi posto ou retirado

5.Referências.

FREITAS, Ricardo Luís de “Apostila de Sistemas Operacionais” utilizado no curso de


graduação em Engenharia de Computação da Pontifícia Universidade Católica de
Campinas na disciplina de Sistemas Operacionais I.

Modern Operating Systems - Andrew Stuart "Andy" Tanenbaum - third Edition.

Você também pode gostar