MAC 324 Estruturas de Dados para Engenharia

Departamento de Ciência da Computação - USP

PROFESSOR: RONALDO FUMIO HASHIMOTO

SEGUNDA FASE DO PROJETO

PRAZO DE ENTREGA: ATé 15/05/2000

Multiprogramação - Fila da CPU

1  Descrição do modelo simplificado a ser simulado nesta fase

Na primeira fase do projeto, notamos que algumas vezes a CPU ficava ocupada com um processo ``grande'', criando congestionamentos nas filas dos processos. Em sistemas reais de multiprocessamento isso não pode ocorrer. Uma solução encontrada é criar ciclos de execução da CPU.

A utilização da CPU agora é dividida em intervalos de tempo (o chamado ciclo de intervenção do sistema timesharing que é igual a um QUANTA) com duração máxima fixada. No início de cada ciclo, a CPU passa a executar o processo que está no início de sua fila. Se, ao término do atual ciclo, a execução desse processo não for completada, ele retorna para o fim da fila da CPU. Se a execução de um processo terminar durante um ciclo, esse ciclo termina e a CPU passa a executar o processo que está no início de sua fila. Em outras palavras, cada processo pode permanecer apenas um determinado tempo rodando na CPU. Quando esse tempo é ultrapassado, ele é suspenso e retorna para a última posição da fila da CPU. Com isso, um processo com grande tempo de execução necessita de vários ciclos da CPU para ser executado.

Nessa simulação, a fila da CPU continuará comportando no máximo 7 processos. O ciclo da CPU será de 100 milisegundos. A fila da CPU deverá ser implementada como uma lista circularmente ligada com ou sem cabeça de lista.

Continue gerando os processos aleatoriamente como descrito na primeira fase do projeto, e imprima as mesmas informações pedidas na primeira fase. Valem as mesmas observações quanto a qualidade da saída e documentação de seu programa. Na Figura 1, mostramos o novo fluxo dos projetos no seu sistema. Faça uma análise do ganho de performance obtido com esta alteração.
 


Figure 1: Ilustração do sistema das filas de processos e da fila da CPU.

2  Especificações da implementação do modelo

Faça um programa em C que simule o funcionamento desse sistema de multiprocessamento com as seguintes considerações:
  1. 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.
  2. O scheduler também deve decidir 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).
  3. A fila da CPU deve ser implementada numa lista circularmente ligada (com ou sem cabeça-de-lista).

3  Especificações da saída do programa

  1. Sempre que terminar a execução de um processo, imprima as seguintes informações:
    1.  
    2. características do processo (número de identificação, classe, tempo de CPU e número de linhas impressas);
    3. tempo total de permanência no sistema;
    4. tempo gasto em cada uma das filas;
    5. razão entre o tempo útil (tempo de execução na CPU, ou seja, running time) e tempo total de permanência no sistema (ou seja, elapsed time).
       
  2. Ao término da simulação, imprima o número total de processos executados, assim como a média dos itens (b), (c) e (d) para cada classe.
  3. Além disso, imprima periodicamente (digamos, a cada 100 segundos - a escolha deste número fica a seu critério) o estado de cada uma das filas:
    1.  
    2. Fila das classes. Imprima para cada processo o seu número e o tempo que está na fila.
    3. Fila da CPU. Imprima para cada processo o seu número, tempo de CPU, e tempo restante de execução.

    4.  
  4. Se você achar conveniente imprimir mais informações está ótimo. A saída do programa deve, principalmente, ajudá-lo a verificar se a simulação (ou seja, o seu programa) está correta.

On 9 Apr 2000, 21:45.