Next: Especificações da saída do
Up: MAC 2301 Laboratório de
Previous: Descrição do modelo simplificado
Faça um programa em C que simule o funcionamento
desse sistema de multiprocessamento com as seguintes considerações:
- Tempo total da simulação: 1 hora.
- Ciclo de intervenção do sistema de timesharing:
100 milisegundos. Isto significa que a cada 100 milisegundos
o scheduler decide qual é o próximo processo que deverá ser
executado.
- O scheduler também deve decider qual é o próximo
processo que deverá ser executado imediatamente após o término da
execução de qualquer processo, mesmo que o término tenha ocorrido
antes de se completar um ciclo de intervenção (ou seja,
100 milisegundos).
- Tempo gasto pelo scheduler para decidir qual é o próximo
processo que deverá ser executado: 0.25 milisegundos.
- Velocidade das impressoras: 3000 linhas por minuto.
- Número máximo de processos na fila da CPU a cada instante: 7.
- Cada classe de processos tem permissões diferentes com relação ao
limite máximo de execução na CPU e ao número máximo de linhas a serem
impressas. Estas restrições estão descritas na tabela a abaixo:
Classe |
CPU (em segs.) |
Linhas impressas |
1 |
5 |
500 |
2 |
30 |
10000 |
Um novo processo deve ser ativado a cada 5 segundos, com probabilidade
0.7 que seja de Classe 1 e probabilidade 0.3 que seja da
Classe 2. Ao ativar um processo, gere aleatoriamente o tempo
de CPU e o número de linhas que esse processo irá imprimir (dentro
dos limites de sua classe). Atribua ainda um número de identificação a
cada processo.
- As filas da Classe 1 e Classe 2 devem ser
implementadas em listas lineares ligadas com cabeça-de-lista.
- A fila da CPU deve ser implementada numa lista circularmente
ligada (com ou sem cabeça-de-lista).
- Os processos na fila das impressoras estarão em duas filas ao
mesmo tempo: uma por ordem de ingresso na fila e outra pelo tempo de
permanência no sistema. Processos que estão no sistema a mais do
que 10 minutos têm prioridade para serem impressos. Estas filas devem
ser implementadas de modo a permitir que inserções em ambas as filas e
remoção do primeiro elemento de cada fila possam ser feitas em tempo
. Para isto, implemente a primeira fila utilizando uma
lista circular duplamente ligada com cabeça-de-lista, e para
representar a outra fila, utilize uma fila de prioridade implementada
num heap.
- As filas da Classe 1 e Classe 2, e a fila das
impressoras devem ser implementadas utilizando alocação dinâmica.
Mas, para a fila da CPU, implemente e utilize as rotinas de
manipulação de uma lista livre.
Next: Especificações da saída do
Up: MAC 2301 Laboratório de
Previous: Descrição do modelo simplificado
Alfredo Goldman
2002-04-11