Vous êtes sur la page 1sur 8

Exerccios de simulao para sistemas operacionais

Shivakant Mishra

Exerccio de simulao 1: simulao de gerenciamento de processos
Objetivo: Simular cinco funes do gerenciamento de processos: criar processo,
substituir a imagem atual do processo com uma imagem nova do processo, transio de
estado do processo, agendamento de processo e troca de contexto.
Voc utilizar chamadas de sistema de Linux como fork ( ), wait ( ), pipe ( ) e sleep ( ).
Leia as pginas dessas chamadas de sistema para detalhes.
Este exerccio de simulao consiste de trs tipos de processo em Linux: commander,
process manager e reporter. Existe um processo commander (esse o processo que
inicia a sua simulao), um processo process manager que criado pelo processo
commander e uma srie de processos reporter que so criados por process manager,
conforme necessrio.
Processo commander
O processo commander primeiro cria um pipe e depois um processo process manager.
Depois ele l comandos repetidamente (um comando por segundo) a partir da entrada
padro e passa-os para process manager atravs do pipe. Existem quatro tipos de
comandos:
1. Q: Fim de uma unidade de tempo.
2. U: Desbloqueia o primeiro processo simulado na fila bloqueada.
3. P: Imprime o estado atual do sistema.
4. T: Imprime o tempo mdio do ciclo e finaliza o sistema.
Comando T aparece exatamente uma vez, esse o ltimo comando.
Processo simulado
2 Simuladores

Pearson Education Inc.

A simulao de gerenciamento de processo gerencia a execuo de processos
simulados. Cada processo simulado composto de um programa que manipula
(define/atualiza) o valor de uma nica varivel inteira. Dessa forma, o estado de um
processo simulado, a qualquer momento, composto pelo valor da sua varivel inteira e
pelo valor do seu contador de programa. O programa de simulao de processo consiste
de uma sequncia de instrues. Existem sete tipos de instrues, conforme segue:
1. S n: Define o valor da varivel inteira para n, onde n um inteiro.
2. A n: Adiciona n ao valor da varivel inteira, onde n um inteiro.
3. D n: Subtrai n do valor da varivel inteira, onde n um inteiro.
4. B: Bloqueia esse processo simulado.
5. E: Termina esse processo simulado.
6. F n: Cria um novo processo simulado. O novo processo (simulado) uma cpia
exata do processo pai (simulado). O novo processo (simulado) executa a partir
da instruo, imediatamente aps essa instruo F, enquanto o processo pai
(simulado) continua a sua execuo n instrues, depois da prxima instruo.
7. R nome_do_arquivo: Substitui o programa do processo simulado pelo programa
no arquivo nome_do_arquivo e define o contador de programa para a primeira
instruo desse novo programa.
Um exemplo de um programa para um simulado mostrado a seguir:
///CDIGO///
Voc pode armazenar o programa de um processo simulado em um vetor, com cada
elemento do vetor contendo uma instruo.

Processo process manager
O processo process manager simula cinco funes de gerenciamento de processos: criar
um novo processo (simulado), substituir a imagem atual de um processo simulado por
Sistemas operacionais modernos, 3 ed.
Andrew S. Tanenbaum
3

uma imagem nova de processo, gerenciar a transio de estados do processo, agendar
processo e trocar contexto. Alm disso, ele inicia o processo reporter sempre que
precisa imprimir o estado do sistema.
Process manager cria o primeiro processo simulado (process id = 0). O programa para
esse processo lido a partir de um arquivo (nome_do_arquivo: init). Este o nico
processo simulado criado pelo process manager. Todos os outros processos simulados
so criados em resposta execuo da instruo F.
Process manager: estruturas de dados
Process manager mantm seis estruturas de dados: Time, Cpu, PcbTable, ReadyState,
BlockedState e RunningState. Time um valor inteiro inicializado para zero. Cpu
usado para simular a execuo de um processo simulado que est em estado de
execuo. Deve incluir membros de dados para armazenar um ponteiro para o vetor de
programa, valor atual de contador de programa, valor inteiro e fatia de tempo desse
processo simulado. Alm disso, ele deve guardar o nmero de unidades de tempo
usadas, at ento, na fatia de tempo atual.
PcbTable um vetor com uma entrada para cada processo simulado que ainda no
terminou a sua execuo. Cada entrada deve incluir membros de dados para armazenar
identificador do processo, identificador do processo pai, um ponteiro para o valor de
contador de programa (inicialmente 0), valor inteiro, prioridade, estado, tempo de incio
e tempo de CPU, usados, at ento.
ReadyState armazena todos os processos simulados (ndices de PcpTable) que esto
prontos para executar. Isso pode ser implementado usando uma estrutura de dados de
uma fila ou de uma fila de prioridades. BlockedState armazena todos os processos
(ndices de PcpTable) que esto bloqueados no momento. Isso pode ser implementado
com uma estrutura de dados de uma fila. Finalmente, RunningState armazena o ndice
de PcpTable do processo simulado, atualmente em execuo.
Process manager: processando comandos de entrada
Aps criar o primeiro processo e inicializar todas as suas estruturas de dados, process
manager recebe, repetidamente, e processa um comando por vez, a partir do processo
4 Simuladores

Pearson Education Inc.

commander (leitura atravs do pipe). Ao receber um comando Q, process manager
executa a prxima instruo do processo simulado, atualmente em execuo, incrementa
o valor do contador de programa (exceto para instrues F ou R), incrementa Time e
depois faz o agendamento. Observe que o agendamento pode envolver a troca de
contexto.
Ao receber um comando U, process manager move o primeiro processo simulado da
fila, bloqueada para a fila de estado pronto para executar. Ao receber um comando P,
process manager dispara um novo processo reporter. Ao receber um comando T,
process manager primeiro dispara um processo reporter e depois termina aps a
finalizao do processo reporter. Process manager garante que apenas um processo
reporter execute ao mesmo tempo.
Process manager: executando processos simulados
Process manager executa a prxima instruo do processo simulado, atualmente em
execuo, ao receber um comando Q, a partir do processo commander. Observe que
essa execuo totalmente cofinada estrutura de dados Cpu, isto , PcbTable no
acessada.
Instrues S, A e D atualizam o valor inteiro armazenado em Cpu. Instruo B move o
processo simulado, atualmente em execuo, para o estado bloqueado e move um
processo do estado pronto para o estado em execuo. Isso resultar em uma troca de
contexto. Instruo E finaliza o processo simulado, atualmente em execuo, libera toda
a memria (por exemplo, vetor de programa) associada a esse processo e atualiza
PcbTable. Um processo simulado movido do estado pronto para o estado em
execuo. Isso tambm resulta em uma troca de contexto.
Instruo F resulta em criao de um novo processo simulado. Um novo identificador
(nico) atribudo e o identificador do processo pai o identificador de processo do
processo pai simulado. Tempo de incio definido para tempo atual e o tempo de CPU
usado, at ento, ajustado para 0. O vetor de programa e o valor inteiro do novo
processo simulado so uma cpia do vetor de programa e do valor inteiro do processo
pai simulado. O novo processo simulado possui a mesma prioridade que a do processo
pai simulado. O valor do contador de programa do novo processo simulado ajustado
Sistemas operacionais modernos, 3 ed.
Andrew S. Tanenbaum
5

para a instruo imediatamente aps a instruo F, enquanto o valor de contador de
programa do processo pai simulado ajustado para n instrues, depois da prxima
instruo (instruo imediatamente depois da F). O novo processo simulado criado
com estado pronto.
Finalmente, a instruo R resulta em substituir a imagem do processo simulado,
atualmente em execuo. Seu vetor de programa sobrescrito pelo cdigo no arquivo
nome_do_arquivo, o valor de contador de programa definido para 0 e valor inteiro
indefinido. Observe que todas essas mudanas so feitas, apenas na estrutura de dados
Cpu. Identificador de processo, identificador de processo pai, tempo de incio, tempo de
CPU usado at ento, estado e prioridade permanecem inalterados.
Process manager: agendamento
Process manager tambm implementa uma poltica de agendamento. Voc pode fazer
experincias com poltica de agendamento de mltiplas filas com classes de prioridade.
Nessa poltica, o primeiro processo simulado (criado pelo process manager) inicia com
a prioridade 0 (prioridade mais alta). Existem no mximo quatro classes de prioridades.
Fatia de tempo (tamanho de quantum) para a classe de prioridade 0 uma unidade de
tempo; fatia de tempo para a classe de prioridade 1 so duas unidades de tempo; fatia de
tempo para a classe de prioridade 2 so quatro unidades de tempo; e fatia de tempo para
a classe de prioridade 3 so oito unidades de tempo. Se o processo em execuo usar a
sua fatia de tempo por completo, a sua prioridade diminuda. Se o processo for
bloqueado, antes de expirar seu quantum alocado, a sua prioridade aumentada.
Process manager: troca de contexto
Troca de contexto envolve copiar o estado do processo simulado, atualmente em
execuo, de Cpu para PcbTable (a no ser que esse processo tenha completado a sua
execuo) e copiar o estado do recm-agendado processo simulado de PcbTable para
Cpu.
Processo reporter
O processo reporter imprime o estado atual do sistema para sada padro e depois
finaliza. A sada do processo reporter semelhante a:
6 Simuladores

Pearson Education Inc.


///CDIGO///

Exerccio de Simulao 2: alocao de memria principal
Objetivo: Simular e avaliar diferentes tcnicas de alocao/desalocao de memria,
first fit, next fit, best fit e worst fit, quando uma lista de ligao usada para manter
registro de uso de memria.
Suponha que a memria seja de 256 KB e que esteja dividida em unidades de 2 KB
cada. Um processo pode requisitar entre trs e dez unidades de memria. A sua
simulao consiste de trs componentes: componente de memria que implementa uma
tcnica especfica de alocao/desalocao; componente de gerao de requisio que
gera requisies de alocao/desalocao; e componente de relatrios estatsticos que
imprime as estatsticas relevantes. Componente de memria fornece as seguintes
funes:
1. int allocate_mem (int process_id, int num_units): aloca
num_units unidades de memria para o processo, cujo identificador
process_id. Se for bem-sucedida, a funo retorna o nmero de ns
atravessados na lista de ligao, caso contrrio retorna -1.
2. int deallocate_mem (int process_id): desaloca a memria
alocada para o processo, cujo identificador process_id. Se bem-sucedida,
retorna 1, caso contrrio, retorna -1.
3. int fragment_count(): retorna o nmero de buracos (fragmentos de
tamanho de uma ou duas unidades).
Voc ir implementar um componente de memria separado para cada tcnica de
alocao/desalocao de memria. O componente de gerao de requisio gera
requisies de alocao e desalocao. Para requisies de alocao, o componente
especifica o identificador de processo do processo para o qual a memria est sendo
requisitada, assim como o nmero de unidades de memria sendo requisitadas. Para
Sistemas operacionais modernos, 3 ed.
Andrew S. Tanenbaum
7

essa simulao, suponha que a memria requisitada para cada processo, apenas uma
vez. Para requisies de desalocao, o componente especifica o identificador de
processo do processo, cuja memria deve ser desalocada. Para essa simulao, suponha
que toda a memria alocada para o processo desalocada durante uma requisio de
desalocao. Voc pode gerar essas requisies com base em algum critrio especfico,
por exemplo, de forma aleatria ou a partir de alguma marcao de
alocao/desalocao de memria de alguma fonte.
Existem trs parmetros de desempenho que a sua simulao deve calcular para todas as
quatro tcnicas: nmero mdio de fragmentos externos, tempo mdio de alocao em
termos de nmero mdio de ns, atravessados na alocao, e o percentual de vezes que
uma requisio de alocao negada.
Gere 10 mil requisies, usando o componente de gerao de requisies, e para cada
requisio invoque a funo apropriada do componente de memria para cada uma das
tcnicas de alocao/desalocao de memria. Aps cada requisio, atualize os trs
parmetros de desempenho para cada uma das tcnicas.
O componente de relatrios estatsticos imprime o valor dos trs parmetros para todas
as quatro tcnicas no final.

Exerccio de simulao 3: simulao de memria virtual
Objetivo: Simular e avaliar um sistema de memria virtual e experimentar diferentes
algoritmos de substituio de pgina. Voc precisar de pacote de threads, por exemplo,
o pacote pThreads.
Suponha que voc tenha um espao de endereo de 16 bits, 16 KB de memria principal
e 2 KB de tamanho da pgina. A simulao de memria virtual consiste de trs
componentes: componente para gerar endereo virtual, componente de traduo de
endereo e componente de relatrios estatsticos. Implemente cada componente em uma
thread separada.
8 Simuladores

Pearson Education Inc.

O componente para gerar endereo virtual gera uma sequncia de endereos virtuais de
16 bits e os armazena em buffer de inteiros inBuffer de tamanho 10. Escreve uma
funo getNextVirtualAddress() para gerar endereos virtuais. Essa funo pode gerar
endereos virtuais de forma aleatria ou a partir de uma definio obtida de alguma
fonte.
O componente de traduo de endereos implementa traduo de endereos virtuais
para endereos fsicos, usando um algoritmo de substituio de pgina. Esse
componente l o prximo endereo virtual a partir de inBuffer e traduz esse endereo
para um endereo fsico. Ele imprime o endereo virtual e o endereo fsico
correspondente em um arquivo. Ele tambm incrementa uma varivel inteira
(numberOfPageFaults) para cada falha de pgina. Utilize operaes bits apropriadas
(<<, >>, ~, |, & etc.) para implementar essa traduo de endereos. Implemente uma
verso separada desse componente para cada algoritmo de substituio de pgina que
deseja testar.
O componente de relatrios estatsticos imprime o nmero total de falhas de pgina
(numberOfPageFaults) no final.

Vous aimerez peut-être aussi