/*Called by Simulation code, informs that task is now in ready state */ void Ready(int pid, int CPUtimeUsed) { start_overhead(); task_t *t = __ready(pid, CPUtimeUsed); /*Ready timing already performed by NewProcess if t is null */ if(t != NULL){ ready_start(t); if(t->last_state == WAIT){ t->last_state = READY; } } stop_overhead(); }
Task * getNextTask(){ last_task = mt_curr_task; if(last_task != &main_task && last_task->state == CURRENT ) __ready(last_task, true); Task * next = NULL; if(ticks_to_run == 0){ next = getNextTaskRoundRobin(&ready_q); ticks_to_run = QUANTUM; } if(next != NULL){ mt_curr_task = next; mt_curr_task->state = CURRENT; mt_curr_task->count++; mt_dequeue(mt_curr_task); ready_q.iterations++; } return mt_curr_task; }