Gabarito da Lista de Exercícios da Aula 9 Obs: na versão original da lista 9 havia 3 erros de digitação (questões 10, 11 e 12), nos quais a sigla SJF foi erradamente escrita JFS. Uma versão corrigida da lista foi atualizada na página. 1. É um escalonador que não interrompe um processo uma vez que este seja colocado no processador. Este tipo de escalonador age apenas quando os processos deixam o processador voluntariamente. 2. Escalonadores não preemptivos são, em geral, mais simples que os preemptivos. Isso tende a reduzir o overhead de processamento deles no sistema. 3. Quando um processo realiza esta, operação ele está voluntariamente abdicando do processador. 4. O escalonador FIFO é um escalonador não-preemptivo. A cada oportunidade de escalonamento, o FIFO seleciona o processo que está a mais tempo na fila de processos aptos. 5. A ordem de escalonamento do FIFO é baseada na ordem de chegada dos processos, algo que não é controlável pelo escalonador. Suas decisões, portanto, não se baseiam em um critério bem definido visando alcançar algum objetivo. 6. O diagrama fica da seguinte forma: 7. Suponha um conjunto de 3 processos, A, B e C, que chegam ao sistema nos instantes 0, 1 e 2 (respectivamente). Suponha que os processos tenham durações 5, 40 e 5 (respectivamente). O algoritmo FIFO realizaria o escalonamento A -> B -> C, que resulta em um tempo de resposta médio de (5 + 44 + 48) / 3 = 33. O melhor tempo de resposta, no entanto, seria obtido com o escalonamento A -> C -> B. O tempo de resposta médio, neste caso, passa a ser (5 + 8 + 49) / 3 = 20,6, uma redução de 37,6% em relação ao escalonamento FIFO. 8. Em geral, não. Isso porque os processos são atendidos na ordem em que chegam à fila de aptos do sistema. Então, eventualmente, todo processo terá sua chance de usar o processador. No entanto, pode ocorrer de um processo atualmente em execução, por algum motivo, entrar em loop, monopolizando indefinidamente o processador. 9. O escalonador FIFO é extremamente simples e rápido, introduzindo pouco overhead no sistema. 10. O SJF é um escalonador não-preemptivo. Em cada oportunidade de escalonamento ele seleciona o processo que tem o menor próximo ciclo de CPU. 11. O objetivo do SJF é minimizar o tempo médio de resposta do sistema. 12. Porque o SJF sempre coloca os menores processos para executar primeiro. Desta forma, o tempo médio de espera dos processos na fila de aptos é minimizado. Como o tempo médio de resposta é uma soma entre o tempo médio de execução e o tempo de espera na fila, o SJF obtém sempre o melhor resultado possível. 13. O diagrama fica da seguinte forma: 14. Neste caso, o processo D seria indefinidamente postergado. Ou seja, ele ficaria em um estado de starvation. 15. Sim. Um exemplo é dado na questão anterior. 16. Se o sistema em questão é bem controlado (apenas processos bem conhecidos são executados, sempre com tempos de execução próximos), é possível medir previamente os tempos de execução e armazená-los em uma tabela para o escalonador. Mesmo em sistemas genéricos, é possível utilizar o SJF aplicando algum método de estimativa da duração do próximo ciclo de CPU (como uma média movente exponencialmente ponderada, por exemplo). 17. Neste caso, o SJF utiliza o conceito de próximo ciclo de processamento. Ao invés de trabalhar com os tempos totais de execução dos processos, o SJF trabalha com os tempos de utilização do processador entre cada requisição de E/S. Desta forma, a cada oportunidade de escalonamento, o SJF seleciona o processo cujo próximo ciclo de processamento (até uma requisição de E/S ou até o término do processo) seja o mais curto.