/** * 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; }