sexta-feira, 9 de maio de 2014

CÁLCULO DE TEMPO DE ESPERA MÉDIO - ESCALONAMENTO SJF PREEMPTIVO

Vou postar um exemplo simples do algoritmo de escalonamento SJF preemptivo, pois tive muita dificuldade de achar uma referência que explicasse os exemplos que já estão prontos na internet.

O algoritmo SJF pode ser preemptivo ou não-preemptivo. No preemptivo, pode ser que no momento da execução de um processo, no estado do processo (veja quais são os estados do processo), apareça na fila de processos prontos, um processo com seu tempo de surto de CPU (também  conhecido como surto de CPU ou burst time), mais curto do que o tempo de surto do processo atual em execução. Neste momento o algoritmo SJF preemptivo interromperá o processo em execução no momento, enviando-o para fila de pronto/bloqueado, dando a vez para o processo com o menor surto, de ser executado.




Considere o exemplo abaixo, o tempo de execução (também  conhecido como surto de CPU ou burst time) como tempo em milissegundos:







É aqui que está a grande dificuldade de achar algum post que explique, até a referência do livro não mostra como foi calculado o tempo médio de espera.

VAMOS PARA O PASSO A PASSO:

Como não existia nenhum processo, chega P1 como próximo processo na fila de pronto, no tempo de chegada igual a 0.0, e vai para execução. Ele possui um tempo de execução  (também  conhecido como surto de CPU ou burst time) que irá utilizar a CPU, igual a 7 milissegundos. A CPU, executa P1 normalmente até o tempo de chegada igual a 2.0, que é o momento que aparece o P2 na fila de pronto que possui o tempo de execução menor que o atual processo (P1 agora com 5 milissegundos a executar, enquanto P2 chegou com 4milissegundos). A CPU interrompe P1, que executou dos seus 7 milissegundos, somente 2 milissegundos, coloca-o como bloqueado (processo pronto para executar mas que não tem a CPU) e passa a executar P2, que irá executar seus 4milisegundos. No tempo de chegada igual a 4, aparece o P3 que possui o tempo de execução igual a 1 (neste momento P2 executou 2milissegundos dos seus 4). Lembrando que, a CPU só da a vez para os processos que estão  chegando com seus respectivos tempo de execução, por serem menores que os atuais que estão sendo executados e por serem PREEMPTIVO, caso fossem não-preemptivo, a CPU executaria normalmente até acabar seus tempos de execução e passaria a vez para o próximo da fila de prontos, conforme algoritmo de escalonamento (FIFO ou SJF).

P3 executa até o tempo igual a 5, que coincide com o tempo de chegada do P4 com seu tempo de execução igual a 4, e encerra sua participação, porém, já existe um processo com tempo menor aguardando a CPU, é o caso do P2 que restou 2milissegundo a ser executado. O mesmo, executa até tempo 7 e encerra sua participação. Neste momento existe o P1 aguardando com 5milissegundo de tempo de execução restantes e P4 com 4milissegundo de tempo de execução que ainda não foram executados. A CPU escolhe o de menor tempo (por isso do SFJ, Small Job First), então o P4 executa seus 4 milissegundos e após P1 avança, terminando seus 5 milissegundos restantes.

CÁLCULO DO TEMPO DE ESPERA MÉDIO:

vamos começar por ordem dos processos de P1 ao P4.

P1 executa até tempo 2, após, somente no tempo 11. Como já tinha executado as 2 unidade de tempo, então fica o tempo 11 - (subtração) o tempo 2 - (subtração) o tempo de chegada 0.0. Ficando 11 - 2 - 0.0 = 9, que é o tempo médio de espera do processo P1 para ser executado.

TM P1 = 9

(9)


P2 executa do tempo 2 até tempo 4, executando 2 unidades de tempo, após, somente no tempo 5, ficando 2 unidades de tempo executadas - (subtração) o tempo 5 - (subtração) o tempo de chegada 2.0. Ficando 2  - 5 - 2.0 =1, que é o tempo médio de espera do processo P2 para ser executado.

TM P2 = 1

(9 + 1)

P3 executa no tempo 4, apenas uma unidade, acabando em seguida. Ficando o tempo 4 - (subtração) o tempo de chegada 4.0. Ficando 4 - 4.0 = 0, que é o tempo médio de espera do processo P3 para ser executado.

TM P3 = 0

(9 + 1 + 0)

P4 executa no tempo 7 as suas 4 unidades de tempo e, após, acaba. Ficando o tempo 7 - (subtração) o tempo de chegada 5.0. Ficando 7 - 5.0 = 2, que é o tempo médio de espera do processo P4 para ser executado.

TM P4 = 2

(9 + 1 + 0 + 2)

agora dividimos pelo total de processos. Ficando (9 + 1 + 0 + 2) / 4 = 3.


Referência:

SILBERSCHATZ, A., PETER G., GREG G. SISTEMA OPERACIONAIS - Conceitos e Aplicações






7 comentários:

  1. A conta é a seguinte: TEMPO MÉDIO == (T1+T2+T3+T4) / N (onde N é o num. de processos (4)).
    Os tempos individuais T(n) (T1, T2, T3 e T4) são calculados cada um pela seguinte fórmula: T(n) == (TF - TC - TE), onde (TF) é o tempo final que o processo foi executado, ( - ) o Tempo de chegada (TC) que está na tabela, - o Tempo de execução (TE) que também está na tabela. No exemplo, o Tempo de médio do P1 seria:: 16 - 0 - 7 == 9;
    O tempo de espera médio é então calculado por: TM = (T1+T2+T3+Tn)/n

    ResponderExcluir
  2. Parabéns pela explicação. muito 10!!!!!

    ResponderExcluir
  3. c) O algoritmo SJF, em geral, apresenta melhor desempenho, mas note que o
    processo P1 foi escolhido no tempo 0.0 porque não se tinha conhecimento que
    os próximos dois processos teriam um tempo menor de uso da CPU. Calcule
    qual seria o tempo médio de processamento se a CPU ficasse ociosa na primeira
    unidade de tempo, e então o algoritmo SJF fosse utilizado. Lembre que os
    processos P1 e P2 estão esperando durante esse período de ociosidade, então o
    seu tempo de espera pode aumentar. Esse algoritmo poderia ser chamado de
    algoritmo de conhecimento futuro (future-knowledge scheduling).

    ResponderExcluir