Beispiel #1
0
 /**
  * Simula o processador rodando o processo
  *
  * @param Processo $processo
  */
 private function cpu(Processo $processo)
 {
     printf('Tempo %d: Escolheu processo id: %d da fila %s' . QUEBRA, $this->time, $processo->get_id(), $processo->get_fila());
     $this->troca_status($processo, 'RUNNING');
     $quantum = $processo->get_fila() != 'FIFO' ? $processo->get_quantum() : $processo->get_n_cpu_burst();
     $quantum_i = 0;
     //Roda o processo enquanto ainda tiver creditos quantum e ainda estiver bursts no processo
     while ($quantum_i < $quantum && $processo->get_n_cpu_burst() > 0) {
         $this->time++;
         $quantum_i++;
         $processo->incrementa_time_in_cpu();
         $processo->decrementa_n_cpu_burst();
     }
     //Se terminar o cpu burst pega o proximo
     if ($processo->get_n_cpu_burst() <= 0) {
         //caso tenha io burst bloqueia
         if ($processo->get_n_io_burst() > 0) {
             $this->troca_status($processo, 'BLOCK');
         }
         $processo->prox_cpu_burst();
     }
     $processo->set_quantum($quantum - $quantum_i);
     return $quantum_i;
 }