Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
so:algoritmos_de_escalonamento [2010/02/08 16:46] – maziero | so:algoritmos_de_escalonamento [2011/05/25 11:11] (atual) – maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Algoritmos de escalonamento ====== | ||
+ | |||
+ | O objetivo deste projeto é escrever um programa para simular o escalonamento de um conjunto de tarefas usando os algoritmos de escalonamento de processador mais conhecidos. O programa deverá suportar os seguintes algoritmos: | ||
+ | |||
+ | * FCFS (//First Come, First Served//) | ||
+ | * //Shortest Job First// | ||
+ | * < | ||
+ | * Por prioridade, sem preempção | ||
+ | * Por prioridade, com preempção por prioridade | ||
+ | * // | ||
+ | * < | ||
+ | * Round-robin com prioridade e envelhecimento (t< | ||
+ | |||
+ | No caso dos escalonamentos // | ||
+ | |||
+ | O programa deverá ler os dados dos processos da entrada padrão (// | ||
+ | |||
+ | * data de criação | ||
+ | * duração em segundos | ||
+ | * prioridade estática (escala de prioridades positiva) | ||
+ | |||
+ | Um exemplo de entrada para o simulador poderia ser: | ||
+ | |||
+ | <code tasks1.dat> | ||
+ | 0 5 2 | ||
+ | 0 2 3 | ||
+ | 1 4 1 | ||
+ | 3 3 4 | ||
+ | </ | ||
+ | |||
+ | Nesse exemplo de entrada, o processo P1 tem data de criação 0, sua execução dura 5 segundos e sua prioridade é 2. Esse formato de entrada deverá ser respeitado, pois o professor pode testar seu simulador com outros dados de entrada. Observe que essa listagem não precisa necessariamente estar ordenada por data de criação de cada processo. | ||
+ | |||
+ | Para cada algoritmo, o simulador deverá produzir as seguintes informações em sua saída padrão (// | ||
+ | |||
+ | * tempo médio de vida | ||
+ | * tempo médio de espera | ||
+ | * número de trocas de contexto | ||
+ | * diagrama de tempo da execução | ||
+ | |||
+ | Para simplificar, | ||
+ | |||
+ | < | ||
+ | tempo | ||
+ | 0- 1 ## | ||
+ | 1- 2 ## | ||
+ | 2- 3 | ||
+ | 3- 4 | ||
+ | 4- 5 | ||
+ | 5- 6 | ||
+ | 6- 7 ## | ||
+ | 7- 8 ## | ||
+ | 8- 9 | ||
+ | | ||
+ | 10-11 | ||
+ | 11-12 | ||
+ | 12-13 ## | ||
+ | 13-14 ## | ||
+ | </ | ||
+ | |||
+ | **Deve ser entregue ao professor o código-fonte em C do simulador, devidamente comentado**. | ||
+ | |||
+ | Sugestão de implementação (pseudo-código que deve ser ajustado para cada política): | ||
+ | |||
+ | < | ||
+ | início | ||
+ | lê dados das tarefas da entrada padrão | ||
+ | imprime cabeçalho do diagrama | ||
+ | | ||
+ | t = 0 | ||
+ | enquanto t < tmax | ||
+ | |||
+ | se há uma tarefa rodando | ||
+ | se a tarefa rodando chegou ao fim da execução | ||
+ | migra a tarefa para o estado terminado | ||
+ | libera o processador | ||
+ | senão | ||
+ | se a tarefa rodando chegou ao fim de seu quantum | ||
+ | migra a tarefa para a fila de prontos | ||
+ | libera o processador | ||
+ | fim se | ||
+ | fim se | ||
+ | |||
+ | para cada tarefa i | ||
+ | se a tarefa i inicia agora (em t) | ||
+ | coloca a tarefa na fila de prontos | ||
+ | fim se | ||
+ | fim para | ||
+ | |||
+ | se o processador estiver livre | ||
+ | se houver tarefa na fila de prontas | ||
+ | escolhe uma tarefa da fila de prontas | ||
+ | migra essa tarefa para o estado " | ||
+ | fim se | ||
+ | fim se | ||
+ | |||
+ | imprime linha do diagrama com o estado de cada tarefa | ||
+ | |||
+ | incrementa o tempo (t++) | ||
+ | incrementa contadores da tarefa corrente (tempo de vida e de quantum) | ||
+ | |||
+ | fim enquanto | ||
+ | |||
+ | calcula e imprime tempos médios | ||
+ | fim | ||
+ | </ | ||
+ | |||
+ | Sugere-se definir para cada tarefa: | ||
+ | * identificador | ||
+ | * datas de inicio e de conclusão | ||
+ | * duração (tempo necessário no processador) | ||
+ | * prioridades estática e dinâmica | ||
+ | * estado atual (nova, pronta, rodando, terminada, ...) | ||
+ | * tempo já executado (total e no quantum atual) | ||
+ | * ... (outros campos podem ser necessários para algumas políticas) | ||