Processos
Processos
Aline Rocha Leo, Renan Felipe Toshiaki Bieszczad Ikeda
Universidade Tecnolgica Federal do Paran UTFPR
COCIC Coordenao do Curso de Bacharelado em Cincia da Computao
Campo Mouro, Paran, Brasil
aline05_leao@hotmail.com
renanikeda@gmail.com
Resumo
O artigo a seguir apresenta todas as caractersticas
dos processos, assim como a teoria relacionada a
forma com que eles so gerenciados pelo Sistema
Operacional (SO) e tambm o relatrio referente ao
projeto do simulador de escalonamento que foi
desenvolvido.
2. Processos
Processos
3. Escalonamento
Um escalonador a parte do sistema operacional
onde se faz a escolha de qual processo ser executado
em determinado momento. O escalonamento uma
operao relativamente simples nos sistemas em lote,
basicamente nesse tipo de sistema, o processo
executado de maneira sequencial, sem a necessidade da
ocorrncia dos chaveamentos. J os sistemas
multiprogramados, os algoritmos de escalonamento so
mais complexos, visto que existe concorrncia pelo uso
da CPU.
O escalonamento de suma importncia em
situaes onde o desempenho da CPU importante,
como em servidores por exemplo. Entretanto, nos
computadores pessoais, pode-se dizer que o
Processos
-chaveamento circular:
Nesse algoritmo aplicado a cada processo um
intervalo de tempo, denominado quantum. Esse o
tempo permitido para o processo ser executado, assim
se o processo terminar nesse intervalo de tempo, a CPU
chaveada para outro processo, mas se o processo no
terminar durante o quantum, a CPU sofrer preempo
e ser fornecida a outro processo.
-Prioridades:
Nesse algoritmo, so selecionadas prioridades para
a realizao dos processos, assim o processo de mais
alta prioridade ser realizado primeiro.
-Filas mltiplas:
Nesse algoritmo, existem varias filas com
prioridades. Na primeira fila os processos de alta
prioridade recebem um certo quantum para ser
executado, se ao final do tempo ele no terminar, ele
passar para uma segunda fila. Nessa fila ele ter o
dobro do quantum e se, quando ele for executado
novamente, o tempo ainda no for o suficiente, ele
passar para uma terceira fila com um quantum 4 vezes
maior e assim por diante. Esse algoritmo usado para
um processo no ocupar muito tempo de execuo e
dar espao para outros.
-Escalonamento garantido:
O tempo destinado a cada processo deve ser
calculado pelo nmero de processos existentes, assim o
tempo destinado a cada um ser o mesmo.
-Escalonamento por loteria:
Os processos recebem bilhetes de loteria, sendo
que os prmios so recursos do sistema, como tempo
de CPU. Se o escalonamento for ocorrer, um bilhete
ser sorteado aleatoriamente e o processo que possuir
esse bilhete ser escalonado.
-Escalonamento por frao justa:
Uma frao da CPU alocada para cada usurio e o
escalonador escolhe os processos de modo que garanta
essa frao.
Escalonamento em lote:
Processos
int IN = 1;
if (procs == NULL){
printf("Erro ao abrir o arquivo
de testes");
return;
}
while(!feof(procs)){
prontos[i].id = i;
prontos[i].prioridade =
rand()%4; //define a prioridade de
forma aleatoria
prontos[i].tamJob = 0;
prontos[i].CP = 0;
prontos[i].tempoChegada = IN;
//definindo o tempo de chegada como a
variavel IN, que vai variar de 1 a 10
prontos[i].tempoEspera = 0;
prontos[i].tempoBloqMem = 0;
prontos[i].tempoBloqIO = 0;
fgets(prontos[i].bin,51,procs
); //lendo a sequencia de tarefas que
o processo pode executar e
armazenando em um vetor de char
i++;
IN++;
}
fclose(procs);
}
As informaes do arquivo foram armazenadas no
campo bin da struct. Os outros campos da struct foram
preenchidos com 0, com um valor aleatrio, como no
caso da prioridade, ou ento com uma varivel auxiliar
que era incrementada toda vez que existia uma quebra
de linha no arquivo. A varivel i foi utilizada para o
ndice do vetor e a varivel IN foi utilizada para
representar o tempo de chegada de cada processo no
vetor.
Com o vetor de bcp preenchido, iniciou-se a fase de
escalonar, a qual consistiu em ordenar os vetores de
acordo com o algoritmo desejado e aps isso, executar
o processo. O escalonamento foi feito atravs de 3
funes, cada uma delas para o tipo de algoritmo. O
prottipo das 3 funes pode ser observado a seguir e o
cdigo completo se encontra em anexo:
4. Resultados
Desenvolvimento do simulador
Um software que simula o escalonamento de
processos foi desenvolvido na linguagem C e os
algoritmos desenvolvidos foram o FIFO, o SJF e o
Prioridade.
Inicialmente um BCP, que o bloco que controla os
processos foi modelado por meio de uma struct. Sua
estrutura pode ser visualizada no trecho de cdigo a
seguir:
struct bcp {
int id;
char bin[50]; //simulacao de uma
sequencia de eventos de processo (1 executando, 2-bloqueado para memoria,
3-bloqueado para IO
int prioridade; //varia de 0 a 3,
quanto menor for o numero, maior a
prioridade
int tamJob; //tamanho da tarefa
int CP; //contador de programa
int tempoChegada, tempoBloqMem,
tempoBloqIO, tempoEspera; //tempos do
processo
};
A partir dessa struct um vetor foi criado, o qual foi
utilizado para auxiliar a simulao do escalonador. Os
algoritmos escolhidos para essa simulao foram o
FIFO, que o algoritmo onde o primeiro processo que
chega, o primeiro que sai, o SJF, que consiste em
verificar qual processo possui o menor tempo de
execuo e a partir disso escolher a ordem de execuo
dos processos (nesse algoritmo os processos que
possuem o menor tempo so executados primeiro). O
outro algoritmo implementado foi o prioridade, que
consiste em executar os processos de acordo com a sua
prioridade, ou seja, os processos com prioridade maior
so executados primeiro.
O vetor foi preenchido com o auxlio de um
arquivo, o qual possui uma sequncia de caracteres (1,
2, 3 e 0), os quais correspondem a uma tarefa do
processo, o 1 corresponde a parte de execuo, o 2 a
parte de bloqueado para memria, o 3 para bloqueio de
IO e o 0 indica que o processo acabou a execuo. Uma
cpia se encontra em anexo. O preenchimento do vetor
se encontra no cdigo a seguir:
void carregaProcesso(string
nome_arq){
FILE *procs;
procs = fopen(nome_arq, "r");
int i = 0;
n,
BCP
*prontos,
Processos
int main(){
carregaProcesso("teste.txt");
PRIORIDADE(10, prontos);
FIFO(10, prontos);
SJF(10, prontos);
}
Onde o carregaProcesso busca preencher o vetor e
as outras fazem o escalonamento desejado e geram um
relatrio com algumas estatsticas.
Os relatrios gerados se encontram em anexo neste
trabalho, juntamente com todo o cdigo fonte do
simulador e tambm com o arquivo com as sequncias
de tarefas que foram utilizados para preencher o vetor
bin da struct bcp.
Estatsticas
Como foi uma simulao, todos os tempos foram
medidos em ciclos para facilitar a implementao e
tambm para que no houvesse impreciso nas medidas
que poderiam vir a acontecer devido a execuo do
simulador.
A fim de comparar o desempenho dos algoritmos,
algumas variveis foram medidas durante a execuo
do simulador, o tempo de espera total, o tempo de
espera de cada processo e o tempo de espera mdio.
Os dados individuais de cada processo podem ser
visualizados nos relatrios presentes no anexo deste
trabalho.
Em relao ao tempo total de espera, o algoritmo
que apresentou melhor desempenho foi o SJF, que nas
condies propostas (tarefas descritas no arquivo
testes.txt e explicadas anteriormente), teve um tempo
total de espera de 1410 ciclos, j o FIFO foi o segundo
melhor nesse quesito com tempo total de espera de
1430 ciclos e o Prioridade foi o que apresentou pior
desempenho, com 1470 ciclos. Consequentemente, na
mdia de tempo de espera de cada processo, a ordem de
desempenho foi a mesma.
Com essas anlises foi possvel verificar que o SJF
apresenta o melhor desempenho dentre os trs que
foram desenvolvidos, porm o prioridade que foi o pior
entre eles no necessariamente o pior, pois no
prioridade que os processos mais importantes so
executados primeiro e consequentemente diminuem o
seu tempo de espera, o que em alguns casos pode ser
essencial para que determinada tarefa seja realizada.
Tempo de Espera
221 ciclos
0
0
5. Concluses
O estudo dos processos e todas as suas
caractersticas nos permite compreender de maneira
aprofundada o funcionamento de um dos setores
mais importantes do sistema operacional, que a
gerencia de processos. Os gerenciadores de processo
mudaram a forma com que os computadores trabalham,
diferentemente do que ocorria antigamente, quando s
era possvel executar uma aplicao de cada vez,
atualmente possvel trabalhar paralelamente em
diversas aplicaes.
Em paralelo ao estudo terico, importante que se
visualize as coisas na prtica e por isso a execuo do
projeto de um simulador de escalonamento de
processos permitiu que a teoria vista anteriormente
pudesse ser compreendida de maneira mais clara.
Dito isso, pode-se dizer que o estudo de processos
foi bem sucedido.
6. Referncias
TANENBAUM, A. S. Sistemas Operacionais Modernos. 3.
ed. So Paulo: Pearson Prentice Hall, 2009.
Processos
Anexos:
Processos
Processos
prontos[i].CP = 0;
prontos[i].tempoEspera = 0;
prontos[i].tempoBloqIO = 0;
prontos[i].tempoBloqMem = 0;
}
arq = fopen(LOG, "wt"); // Cria um arquivo texto para gravao
if (arq == NULL){ // Se no conseguiu criar
printf("Problemas na CRIACAO do arquivo\n");
return;
}
for (i=0; i<10; i++){
for (j=0; j<40; j++){
//partes comentadas mostram a atividade do processo em cada ciclo
if (prontos[i].bin[j]=='1'){ //verificando o tempo que o processo ficou executando
//printf("Tempo %d processo %d executando \n", tempo, prontos[i].id);
prontos[i].CP++;
aux++;
}
if (prontos[i].bin[j]=='2'){ //verificando o tempo que o processo ficou bloqueado
//printf("Tempo %d processo %d bloqueado para memoria \n", tempo, prontos[i].id);
prontos[i].tempoBloqMem++;
aux++;
}
if (prontos[i].bin[j]=='3'){
//printf("Tempo %d processo %d bloqueado para fazer IO \n", tempo, prontos[i].id);
prontos[i].tempoBloqIO++;
aux++;
}
if (prontos[i].bin[j]=='0'){
//printf("PROCESSO %d TERMINOU DE EXECUTAR \n", prontos[i].id);
//break;
}
tempo++;
}
fprintf(arq, "Processo %d com prioridade %d e que chegou no instante %d", prontos[i].id, prontos
[i].prioridade, prontos[i].tempoChegada);
fprintf(arq, "\n");
fprintf(arq, "Ficou executando por %d ciclos", prontos[i].CP);
fprintf(arq, "\n");
fprintf(arq, "Ficou bloqueado para memoria por %d ciclos", prontos[i].tempoBloqMem);
fprintf(arq, "\n");
fprintf(arq, "Ficou bloqueado para IO por %d ciclos", prontos[i].tempoBloqIO);
fprintf(arq, "\n");
fprintf(arq, "Ficou esperando por %d ciclos \n\n", prontos[i].tempoEspera);
prontos[i+1].tempoEspera = aux;
}
fprintf(arq, "O tempo, em ciclos, medio de espera para execuo foi de %f", media_tempoEspera(10,
prontos));
}
void FIFO (int n, BCP *prontos){
int i, j;
BCP aux;
//ordenando a fila/vetor por tempo de chegada
for(j=n-1; j>=1; j--){
for(i=0; i<j; i++){
if(prontos[i].tempoChegada>prontos[i+1].tempoChegada){
aux=prontos[i];
prontos[i]=prontos[i+1];
prontos[i+1]=aux;
}
}
}
executa(10, prontos, "LOG_FIFO.txt");
}
Processos
Arquivo teste.txt
111111111111111111222222221111000000000
111111111111111122222222222222222222200
111111111111111113333333333330000000000
111111111111111222222222222222220000000
111111111111111111111111111122222222220
111111111111111111122200000000000000000
111111111111111111111121110000000000000
111111111111122222222222222222000000000
111111111111111111222211100000000000000
111111111111111122222222223333333300000
Processos
Relatrio FIFO:
Processo 0 com prioridade 3 e que chegou no instante 1
Ficou executando por 22 ciclos
Ficou bloqueado para memoria por 8 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 0 ciclos
Processo 1 com prioridade 2 e que chegou no instante 2
Ficou executando por 16 ciclos
Ficou bloqueado para memoria por 21 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 30 ciclos
Processo 2 com prioridade 1 e que chegou no instante 3
Ficou executando por 17 ciclos
Ficou bloqueado para memoria por 0 ciclos
Ficou bloqueado para IO por 12 ciclos
Ficou esperando por 67 ciclos
Processo 3 com prioridade 3 e que chegou no instante 4
Ficou executando por 15 ciclos
Ficou bloqueado para memoria por 17 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 96 ciclos
Processo 4 com prioridade 1 e que chegou no instante 5
Ficou executando por 28 ciclos
Ficou bloqueado para memoria por 10 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 128 ciclos
Processo 5 com prioridade 3 e que chegou no instante 6
Ficou executando por 19 ciclos
Ficou bloqueado para memoria por 3 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 166 ciclos
Processo 6 com prioridade 2 e que chegou no instante 7
Ficou executando por 20 ciclos
Ficou bloqueado para memoria por 6 ciclos
Ficou bloqueado para IO por 7 ciclos
Ficou esperando por 188 ciclos
Processo 7 com prioridade 0 e que chegou no instante 8
Ficou executando por 13 ciclos
Ficou bloqueado para memoria por 17 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 221 ciclos
Processo 8 com prioridade 1 e que chegou no instante 9
Ficou executando por 29 ciclos
Ficou bloqueado para memoria por 4 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 251 ciclos
Processo 9 com prioridade 1 e que chegou no instante 10
Ficou executando por 16 ciclos
Ficou bloqueado para memoria por 10 ciclos
Ficou bloqueado para IO por 8 ciclos
Ficou esperando por 284 ciclos
O tempo, em ciclos, medio de espera para execuo foi de 143.000000
10
Processos
Relatrio Prioridade:
Processo 7 com prioridade 0 e que chegou no instante 8
Ficou executando por 13 ciclos
Ficou bloqueado para memoria por 17 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 0 ciclos
Processo 2 com prioridade 1 e que chegou no instante 3
Ficou executando por 17 ciclos
Ficou bloqueado para memoria por 0 ciclos
Ficou bloqueado para IO por 12 ciclos
Ficou esperando por 30 ciclos
Processo 4 com prioridade 1 e que chegou no instante 5
Ficou executando por 28 ciclos
Ficou bloqueado para memoria por 10 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 59 ciclos
Processo 8 com prioridade 1 e que chegou no instante 9
Ficou executando por 29 ciclos
Ficou bloqueado para memoria por 4 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 97 ciclos
Processo 9 com prioridade 1 e que chegou no instante 10
Ficou executando por 16 ciclos
Ficou bloqueado para memoria por 10 ciclos
Ficou bloqueado para IO por 8 ciclos
Ficou esperando por 130 ciclos
Processo 1 com prioridade 2 e que chegou no instante 2
Ficou executando por 16 ciclos
Ficou bloqueado para memoria por 21 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 164 ciclos
Processo 6 com prioridade 2 e que chegou no instante 7
Ficou executando por 20 ciclos
Ficou bloqueado para memoria por 6 ciclos
Ficou bloqueado para IO por 7 ciclos
Ficou esperando por 201 ciclos
Processo 0 com prioridade 3 e que chegou no instante 1
Ficou executando por 22 ciclos
Ficou bloqueado para memoria por 8 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 234 ciclos
Processo 3 com prioridade 3 e que chegou no instante 4
Ficou executando por 15 ciclos
Ficou bloqueado para memoria por 17 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 264 ciclos
Processo 5 com prioridade 3 e que chegou no instante 6
Ficou executando por 19 ciclos
Ficou bloqueado para memoria por 3 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 296 ciclos
O tempo, em ciclos, medio de espera para execuo foi de 147.000000
11
Processos
Relatrio SJF:
Processo 7 com prioridade 0 e que chegou no instante 8
Ficou executando por 13 ciclos
Ficou bloqueado para memoria por 17 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 0 ciclos
Processo 3 com prioridade 3 e que chegou no instante 4
Ficou executando por 15 ciclos
Ficou bloqueado para memoria por 17 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 30 ciclos
Processo 1 com prioridade 2 e que chegou no instante 2
Ficou executando por 16 ciclos
Ficou bloqueado para memoria por 21 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 62 ciclos
Processo 9 com prioridade 1 e que chegou no instante 10
Ficou executando por 16 ciclos
Ficou bloqueado para memoria por 10 ciclos
Ficou bloqueado para IO por 8 ciclos
Ficou esperando por 99 ciclos
Processo 2 com prioridade 1 e que chegou no instante 3
Ficou executando por 17 ciclos
Ficou bloqueado para memoria por 0 ciclos
Ficou bloqueado para IO por 12 ciclos
Ficou esperando por 133 ciclos
Processo 5 com prioridade 3 e que chegou no instante 6
Ficou executando por 19 ciclos
Ficou bloqueado para memoria por 3 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 162 ciclos
Processo 6 com prioridade 2 e que chegou no instante 7
Ficou executando por 20 ciclos
Ficou bloqueado para memoria por 6 ciclos
Ficou bloqueado para IO por 7 ciclos
Ficou esperando por 184 ciclos
Processo 0 com prioridade 3 e que chegou no instante 1
Ficou executando por 22 ciclos
Ficou bloqueado para memoria por 8 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 217 ciclos
Processo 4 com prioridade 1 e que chegou no instante 5
Ficou executando por 28 ciclos
Ficou bloqueado para memoria por 10 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 247 ciclos
Processo 8 com prioridade 1 e que chegou no instante 9
Ficou executando por 29 ciclos
Ficou bloqueado para memoria por 4 ciclos
Ficou bloqueado para IO por 0 ciclos
Ficou esperando por 285 ciclos
O tempo, em ciclos, medio de espera para execuo foi de 141.000000
12