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