O presente trabalho da cadeira de Sistemas Operativos tem como questes ligadas com o
tema Escalonamento de Processos, um CPU quando entra em funcionamento ocorrem
vrios processos, processos estes em cujo ele o ato de realizar o chaveamento dos
processos ativos, de acordo com regras bem estabelecidas, de forma que todos os
processos tenham chance de utilizar a UCP.
Objetivos Especficos
Otimizar o rendimento dos recursos durante o exerccio de Escalonamento;
Priorizar o acesso aos recursos disponveis durante o processo de Escalonamento.
Objetivo Geral
Conhecer o que escalonamento de processos e como ela ocorre.
Escalonamento de processos
O Processo: conceito, definies, estados e comportamento Um obstculo discusso de
sistemas operacionais que existe dificuldade em denominar todas asatividades da UCP.
Um sistema em lote (bach) executa jobs , Enquantoque um sistema de tempo compartilhado
executa programas de usurio ou tarefas. Mesmo em um sistema monousurio, como o
Microsoft Windows ou o Macintosh OS, um usurio pode executar vrios programas de uma
vez: um processador de textos, um navegador Web e um pacote de email. Mesmo se usurio
spuder executarum programa decada vez, o sistema operacional poder precisar dar suporte a
suas prprias atividades internas programadas, comogerncia de memria. Em muitos aspectos,
todas essasatividades so semelhantes, de modo que podem ser todas denominadas de processos
(SILBERSCHATZ, A.; GALIN, P.; GAGNE,G., 2000, p. 63).
O termo processo no contexto de sistemas operacionais foi usado pela primeira vez pelos
projetistas do sistema Multics na dcada de 1960 (DALEY; DENNIS, 1967 apud DEITEL, H.
M.; DEITEL,P.J.;CHOFFNES,DR.,2005,p.66).
Desde aquela poca o termo processo, de certo modo usado intercambiavelmente como tarefa,
ganhou muitas definies como: um programa emexecuo; uma atividade assncrona; o
esprito animado de um procedimento; o locus De controle de um procedimento em
execuo; aquilo que manifestado pela existnci de uma estrutura de dados denominada
descritor De processo ou bloco De controle de processo (BCP) No sistema operacional;
aquela entidade s quais os processadores so designados; e a unidade dedespacho(DEITEL,
H.M.;DEITEL,P. J.;CHOFFNES, D. R., 2005,p 66).
O escalonamento de processos ou Gerncia do Processador (em ingls scheduling) uma
atividade organizacional feita pelo escalonador (scheduler) da CPU ou de um sistema distribudo,
possibilitando executar os processos mais viveis e concorrentes, priorizando determinados tipos
de processos, como os de I/O Bound e os CPU Bound. O escalonador de processos de 2 nveis
escolhe o processo que tem mais prioridade e menos tempo e coloca-o na memria principal,
ficando os outros alocados em disco; com essa execuo o processador evita ficar ocioso.
estabelecem a lgica de tal deciso. Nesse momento de decidir qual escalonador ser utilizado no
sistema operacional, cabe avaliar o cenrio que o sistema ser utilizado.
O escalonador do SO utiliza alguns critrios de escalonamento, como: a taxa de utilizao de
CPU, que a frao de tempo durante a qual ela est sendo ocupada; throughput que so
nmeros de processos terminados por unidade de tempo; turnaround que o tempo transcorrido
desde o momento em que o software entra e o instante em que termina sua execuo; tempo de
resposta: intervalo entre a chegada ao sistema e inicio de sua execuo; tempo de espera: soma
dos perodos em que o programa estava no seu estado pronto.
Responsveis por essa tarefa so algoritmos que so entendidos mais facilmente, estudados
separadamente, mas na pratica os sistemas operacionais utilizam combinaes deles para melhor
escalonar os processos.
Objetivos do Escalonamento
O projeto de um escalonador adequado deve levar em conta uma srie de diferentes
necessidades, ou seja, o projeto de uma poltica de escalonamento deve contemplar os seguintes
objetivos
Ser justo: Todos os processos devem ser tratados igualmente, tendo possibilidades
idnticas de uso do processador, devendo ser evitado o adiamento indefinido.
Ser previsvel: Uma tarefa deveria ser sempre executada com aproximadamente o mesmo
tempo e custo computacional.
Como pode ser visto facilmente, alguns destes objetivos so contraditrios, pois dado que a
quantidade de tempo disponvel de processamento (tempo do processador) finita, assim como
os demais recursos computacionais, para que um proceso seja favorecido outro deve ser
prejudicado. O maior problema existente no projeto de algoritmos de escalonamento est
associado natureza imprevisvel dos processos, pois no possvel prevermos se um dado
processo utilizar intensamente o processador, ou se precisar grandes quantidades de memria
ou se necessitar numerosos acessos aos dispositivos e E/S.
Qualidade do Escalonamento
Existem vrios critrios que permitem a avaliao da qualidade do servio oferecido por um
algoritmo de escalonamento. So eles: uso do processador, tempo de resposta e tempo de
permanncia. O tempo de permanncia, tempo de retorno ou turnaround time, um critrio
simples dado pela soma do tempo de espera com o tempo de servio ou tempo de execuo. Em
geral deseja- se que o tempo de permanncia seja o menor possvel.
Uma outra forma de avaliar a qualidade do escalonamento utilizando-se do tempo de
permanncia normalizado, ou seja, a razo entre o tempo de permanncia e o tempo de servio.
Algoritmos escalonadores
Existem os algoritmos preemptivos e os no preemptivos. Os preemptivos so algoritmos que
permitem que um processo seja interrompido durante sua execuo, quer seja por fora de uma
FIFO (First in, first out) ou FCFS (First come, first served): Onde como seu prprio nome
j diz, o primeiro que chega ser o primeiro a ser executado;
SJF (Shortest Job First): Onde o menor processo ganhar a CPU e atrs do mesmo formar
uma fila de processos por ordem crescente de tempo de execuo;
SRT (Shortest Remaining Time): Neste algoritmo escolhido o processo que possua o
menor tempo restante, mesmo que esse processo chegue metade de uma operao, se o
processo novo for menor ele ser executado primeiro;
Mltiplas Filas: So usadas vrias filas de processos prontos para executar, cada processo
e colocado em uma fila, e cada fila tem uma poltica de escalonamento prpria e outra
entre filas.
Round robin;
Filas Mltiplas.
Escalonamento Garantido.
O escalonamento round robin muito simples de implementar. Tudo que o escalonador precisa
fazer manter uma lista de processos prontos para rodar. Quando o quantum de um processo se
esgota, ele colocado no fim da fila de prontos. A nica coisa que pode dar um pouco de
trabalho na implementao deste algoritmo a determinao do tamanho do quantum. Um
quantum muito pequeno causa sucessivas trocas de contexto, troca do processador entre
processos, baixando a eficincia do processador, enquanto faz-lo muito grande leva a um tempo
de resposta no aceitvel para usurios interativos.
Escalonamento Com Prioridade
Ao contrrio do round robin, neste algoritmo fatores externos so considerados para a escolha do
prximo processo a ganhar o processador.A idia bsica muito simples: a cada processo
associada uma prioridade, e o processo pronto com maior prioridade ser aquele que vai rodar
primeiro. Para evitar que processos com alta prioridade monopolizem o processador, o
escalonador decrementa a prioridade do processo que est rodando, a cada interrupo de tempo.
Se tal ao fizer com que a prioridade do processo corrente torne-se mais baixa que a do de mais
alta prioridade da fila de prontos, deve ocorrer uma troca de contexto.
Filas Mltiplas
Devido ao problema de comutao do processador entre processos ser muito lenta,
principalmente em computadores antigos que s podiam armazenar um nico processo na
memria, necessitou-se de um outro algoritmo de escaloanmento que dividi-se os processos em
classes de prioridade.
Os processos da classe mais prioritria rodavam com quantum 1.
Aqueles que estivessem na classe seguinte rodariam com quantum 2. Na prxima quantum 4, e
assim por diante.
Como exemplo, considere um processo que precise rodar continuamente por um tempo
equivalente a 12 quanta. Inicialmente, ele receber 1 quantum, e aps decorrido este tempo ele
ser suspenso. Da prxima vez, ele receber 2 quanta; aps isto ele ser suspenso novamente.
Nas rodadas seguintes este processo receber sucessivamente quanta de 4 e 8, usando somente 5
das 8 entregues ele.
Observe que s foram necessrios quatro passos para que o processo executasse seu
priocessamento, em vez de doze que seriam necessrios usando o round robin puro. Observe
tambm que quando usamos filas mltiplas, medida que o processo vai caindo em filas de
prioridade mais baixa, ele ser escolhido para rodar com menos freqncia, favorecendo os
processos interativos, normalmente pequenos.
At agora temos assumido que todos os processos esto na memria principal. Se no houver
memria disponvel para todos, alguns de tais processos devem ser mantidos em disco.
Trocas de contexto envolvendo o disco algumas ordens de magnitude maior do que quando
ambos os processos esto na memria principal.
Uma forma mais prtica de tratar com o swapping de processos usando um escalonador de dois
nveis, onde um subconjunto dos processos prontos carregado inicialmente na memria
principal.
Inicialmente, o escalonador de baixo nvel escolhe um entre esses processos. Periodicamente, o
escalonador de alto nvel posto para rodar movimentando processos entre a memria principal
e o disco.
Seguem-se alguns critrios que o escalonador de alto nvel pode usar nas suas tomadas de
deciso:
1. Quanto tempo se passou desde que o processo foi colocado no disco ou na
memria principal?
2. Quanto tempo de processador o processo usou recentemente?
3. Qual o tamanho do processo?
4. Qual a prioridade do processo?
5. Qual o estado do processo?
O escalonador de alto nvel pode usar qualquer algoritmo de escalonamento.
A maioria dos algoritmos acima foi projetado para sistemas iterativos. Vamos analisar a seguir
um tipo de escalonamento apropriado para sistemas que rodam jobs em batch, nos quais o tempo
de processamento de cada job conhecido com antecedncia. Nesta poltica, quando vrios jobs
igualmente importantes estiverem esperando vez numa fila, o escalonador usa a poltica de alocar
o procesador ao menor dos jobs da fila.
Escalonamento Garantido
Uma forma completamente diferente de tratar a questo do escalonamento fazer certas
promessas ao usurio a respeito da performance, e cumpri-las de alguma forma.
Uma promessa bem realista e muito fcil de cumprir a de que se houver N usurios ativos na
rede, cada um vai receber em torno de 1/N da capacidade de processamento que um usurio usou
para todos os seus processos desde o momento em que tal usurio tornou-se ativo.
Como o tempo que cada usurio gastou at o momento conhecido, fcil calcular a razo entre
o tempo realmente concedido ao usurio e o tempo prometido.
A idia do algoritmo por para rodar o processo com razes mais baixas, diminuindo, em
conseqncia, as razes mais altas.
Linha ou Encadeamento de execuo uma forma de um processo dividir a si mesmo em
duas ou mais tarefas que podem ser executadas concorrencialmente. O suporte thread
fornecido pelo prprio sistema operacional, no caso da linha de execuo ao nvel do ncleo
Uma thread permite, por exemplo, que o usurio de um programa utilize uma funcionalidade do
ambiente enquanto outras linhas de execuo realizam outros clculos e operaes.
Em hardwares equipados com uma nica CPU, cada thread processada de forma aparentemente
simultnea, pois a mudana entre uma thread e outra feita de forma to rpida que para o
utilizador, isso est acontecendo paralelamente. Em hardwares com mltiplos CPUs ou multicores, as threads so realizadas realmente de forma simultnea.
Os sistemas que suportam uma nica thread (em real execuo) so chamados de monothread
enquanto que os sistemas que suportam mltiplas threads so chamados de multithread.
Particularidades
Cada thread tem o mesmo contexto de software e compartilha o mesmo espao de memria
(endereado a um mesmo processo-pai), porm o contexto de hardware diferente. Sendo assim
o overhead causado pelo escalonamento de uma thread muito menor do que o escalonamento
de processos. Entretanto, algumas linguagens (C, por exemplo) no fornecem acesso protegido
memria nativa (sua implementao fica a cargo do programador ou de uma biblioteca externa)
devido ao compartilhamento do espao de memria.
Um dos benefcios do uso das threads advm do fato do processo poder ser dividido em vrias
threads; quando uma thread est espera de determinado dispositivo de entrada/sada ou
qualquer outro recurso do sistema, o processo como um todo no fica parado, pois quando uma
thread entra no estado de 'bloqueio', uma outra thread aguarda na fila de prontos para executar.
Uma thread possui um conjunto de comportamentos padro, normalmente encontrados em
qualquer implementao ou sistema operativo.
Uma thread pode:
criar outra da mesma forma que um processo, atravs do mtodo thread-create, onde a
thread retorna um ID como primeiro argumento (resultado da funo de criao);
ULT e KLT
Usualmente as threads so divididas em duas categorias: thread ao nvel do utilizador (em ingls:
User-Level Thread (ULT)), e thread ao nvel do ncleo (em ingls: Kernel-Level Thread (KLT)).
Thread em modo usurio
Basicamente uma thread pode criar outra(s), sendo que depois essas mesmas threads so
executas 'simultaneamente'. A thread criadora a thread-me e a thread criada a thread-filho.
Threads includas na funo main quando executadas podem criar threads-filho. No diagrama a
seguir h a thread A que executa inicialmente. Mais tarde criada a thread B indicada no ponto
amarelo. Depois de criadas, a thread A e thread B executam simultaneamente. Em seguida a
thread A pode criar uma ou mais threads (por exemplo uma thread C). Depois de criada a thread
C, h trs threads executando simultaneamente e todas disputam o uso da CPU. Entretanto, a
thread que pode ser executada a qualquer momento no de conhecimento da CPU.
Terminar (thread termination)
Para maioria dos casos, as threads no so criadas e executadas eternamente. Depois de
terminado o seu objectivo, a thread termina. No facto, a thread que criou estas duas threads-filho
termina tambm, porque sua tarefa atribuda se completa. Na matrix de multiplicao (matrix
multiplication), uma vez que o valor de C[i,j] computado, a thread correspondente termina. Em
geral quando a tarefa atribuda a thread completa, a thread pode ser terminada. Alm disso, se a
thread-me terminar, todas as threads filho terminam tambm. Porque isso importante? Isso
importante porque as threads-filho compartilham recursos com a thread-me, incluindo variveis.
Quando a thread-me termina, todas as variveis so perdidas e a thread-filho no poder aceder
aos recursos que a thread-me possua. Assim, se a thread-me terminar mais cedo que a threadfilho haver um problema! Uma thread pode terminar das seguintes maneiras:
Sincronizar(Thread Join)
Imagine a seguinte situao: Voc est estudando para uma prova. Ento voc pede o seu irmo
mais novo para comprar uma pizza. Neste caso voc a thread principal e seu irmo a thread-
filho. Uma vez que voc deu a ordem, voc e seu irmo comeam a executar uma tarefa
simultaneamente. Agora h dois casos a se considerar: Primeiro: Seu irmo traz a pizza e termina
enquanto voc estuda. Nesse caso voc pode parar de estudar e comer a pizza. Segundo: Voc
acaba de estudar mais cedo e dorme e depois a pizza chegar.
A juno de threads (thread join) destinada para resolver este problema. A thread pode executar
o thread join e aguardar at a outra thread terminar. No caso acima, voc a thread principal
(thread main) e deve executar o thread joinaguardando o seu irmo (thread-filho) terminar. Em
geral o thread join utilizado para a thread-me se sincronizar com uma das threads-filho.
Rendimento da thread (Thread Yield)
Suponha que voc executa um certo nmero de programas o tempo todo no computador. Isso
possvel devido a CPU escalonar pouco a pouco outros ciclos da CPU, assim outros programas
podem ser executados. Isso pode ser um problema de poltica de planeamento do Sistema
Operativo. Entretanto, quando escrevemos programas com mltiplas threads, temos que fazer
correctamente para que algumas threads no ocupem a CPU eternamente, ou por um tempo
muito longo sem abandon-lo. Seno terminar na situao acima quando uma ou duas threads
executam enquanto outras simplesmente esperam para retornar. Liberamos espao na memria
graas a thread yield. Quando a thread executa o thread yield, a execuo da thread suspensa e
a CPU passa para uma outra thread em execuo. Essa thread aguardar at a CPU tornar-se
disponvel novamente.
Escalonamento
Da mesma forma que os processos sofrem escalonamento, as threads tambm tm a mesma
necessidade. Quando vrios processos so executados em uma CPU, eles do a impresso que
esto sendo executados simultaneamente. Com as threads ocorre o mesmo, elas esperam at
serem executadas. Como esta alternncia muito rpida, h impresso de que todas as threads
so executadas paralelamente.
Linha de execuo ao nvel do usurio
As ULT so escalonadas pelo programador, tendo a grande vantagem de cada processo usar um
algoritmo de escalonamento que melhor se adapte a situao, o sistema operacional neste tipo de
thread no faz o escalonamento, em geral ele no sabe que elas existem. Neste modo o
programador responsvel por criar, executar, escalonar e destruir a thread. Um exemplo prtico
de processo chamado P1 que contm tais threads: P1T1, P1T2 e P1T3, quando o sistema
operacinal da a CPU para o processo P1 cabe a ele destinar qual thread ser executada, caso esta
thread use todo processo do quantum, o sistema operacional chamar outro processo, e quando o
processo P1 voltar a executar, P1T1 voltar a ser executada e continuar executando at seu
trmino ou interveno de P1, este comportamento no afetar outros processos pois o sistema
continua escalonando os processos normalmente.
Linha de execuo ao nvel do ncleo
Comparao entre linha de execuo e Processo
Um sistema baseado em linha de execuo diferente de um sistema operacional multi-tarefa
tradicional, em que processos so tipicamente independentes, carregam considervel estado da
informao, tem endereo de memria separado e interagem somente atravs de mecanismos de
inter-processos de comunicao. As threads, por outro lado, compartilham o estado da
informao de processos nicos, e compartilham memria e outros recursos diretamente.
A troca de contexto atravs de linha de execuo num mesmo processo tipicamente mais rpida
que a troca de contexto entre processos diferentes. Sistemas como o Windows NT e o OS/2 so
feitos para ter linha de execuo "baratas" e processos "caros", enquanto em outros sistemas
operacionais no h grandes diferenas.
O multithreading um modelo de programao popular que permite a execuo de mltiplas
linha de execuo dentro de um contexto simples, compartilhando recursos do processo, e
capazes de executar de forma independente. O modelo de programao em linha de execuo
fornece ao desenvolvedor uma execuo simultnea. Entretanto, a aplicao mais interessante da
tecnologia ocorre quando ela utilizada em um processo simples permitindo uma execuo
paralela em sistemas multi-processados.
Criar um processo pode ser caro em termos de tempo, memria, e sincronizao entre
processos.
O trabalho de criar uma linha de execuo pode ser feito no espao do usurio.
O tempo gasto para troca de linha de execuo menor, em parte por que no h
necessidade de troca de espao de endereamento.
Cancelamento
O cancelamento de threads corresponde tarefa de terminar um thread antes que se complete.
Por exemplo, se mltiplos threads esto pesquisando concorrentemente em um banco de dados e
um thread retorna o resultado, os threads que ainda esto sendo executados podem ser
cancelados. Uma outra situao pode ocorrer quando um usurio pressionar um boto em um
navegador da Web. Com frequncia, uma pgina da Web carregada em um thread separado.
Quando um usurio pressionar o boto stop, o thread que estava carregando a pgina
cancelado. Um thread que est para ser cancelado frequntemente denominado thread-alvo.
Exemplo
import java.io.*;
public class Example implements Runnable
{
static Thread threadCalculate; // Cria o thread.
static Thread threadListen;
long totalPrimesFound = 0;
public static void main (String[] args)
{
Example e = new Example();
threadCalculate = new Thread(e);
threadListen = new Thread(e);
threadCalculate.start();
threadListen.start();
if (currentThread == threadCalculate)
calculatePrimes();
else if (currentThread == threadListen)
listenForStop();
break;
if (isPrime)
{
totalPrimesFound++;
System.out.println(n);
}
}
private void listenForStop()
{
BufferedReader input = new BufferedReader(new
InputStreamReader(System.in));
String line = "";
while (!line.equals("stop"))
{
try
{
line = input.readLine();
}
catch (IOException exception) {}
}
Concluso
Referncias Bibliograficas
SILBERSCHATZ, Abraham; GALVIN, Peter Baer; GAGNE, Greg. Fundamentos de sistemas
operacionais. 6. ed. Rio de Janeiro: LTC, 2004 p.580.
DEITEL, Harvey M.; DEITEL, Paul J.; CHOFFNES, David R. Sistemal Operacional. 3ed. So
Paulo: Pearson Prentice Hall, 2005.
LAUDON, KennethC.LAUDON, Jane P. Sistemas de Informao Gerenciais: administrando a
empresa digital. 5ed. SoPaulo: Pearson Prentice Hall,2004.
SILBERSCHATZ, Abraham; GALIN, Peter; GAGNE, Greg. Sistemas operacional: conceitos e
aplicaes. 5tiragem. Rio de Janeiro: Campus,2000.
TANENBAUM Andrew S. Sistemas operacionais modernos.2ed.SoPaulo:Pearson Prentice
Hall, 2003.
TANENBAUM Andrew S.; WOODHULL, Albert S. Sistemas operacional: Projeto e
implementao2ed.PortoAlegre:Bookman, 2000.
http://www.oficinadanet.com.br/post/12781-sistemas-operacionais-o-que-e-escalonamentode-processos
http://www.ic.unicamp.br/~islene/1s2008-mc514/sched/sched.pdf