Exemplo n.º 1
0
/*
 * Get the next runnable thread from the run queue.
 * This is the scheduler.
 */
struct Kernel_Thread* Get_Next_Runnable(void)
{
    struct Kernel_Thread* best = 0;

    best = Find_Best(&s_runQueue);
    KASSERT(best != 0);
    Remove_Thread(&s_runQueue, best);

/*
 *    Print("Scheduling %x\n", best);
 */
    return best;
}
Exemplo n.º 2
0
/*
 * Wake up a single thread waiting on given wait queue
 * (if there are any threads waiting).  Chooses the highest priority thread.
 * Interrupts must be disabled!
 */
void Wake_Up_Thread(struct Thread_Queue* waitQueue, int pid)
{
  struct Kernel_Thread* thread = Lookup_Thread(pid);;

  KASSERT(!Interrupts_Enabled());
  
  
  if (thread != 0) {
    Remove_Thread(waitQueue, thread);
    Make_Runnable(thread);
	/*Print("Wake_Up_One: waking up %x from %x\n", best, g_currentThread); */
  }
}
Exemplo n.º 3
0
/*
 * Wake up a single thread waiting on given wait queue
 * (if there are any threads waiting).  Chooses the highest priority thread.
 * Interrupts must be disabled!
 */
void Wake_Up_One(struct Thread_Queue* waitQueue)
{
    struct Kernel_Thread* best;

    KASSERT(!Interrupts_Enabled());

    best = Find_Best(waitQueue);

    if (best != 0) {
	Remove_Thread(waitQueue, best);
	Make_Runnable(best);
	/*Print("Wake_Up_One: waking up %x from %x\n", best, g_currentThread); */
    }
}
Exemplo n.º 4
0
/*
 * Get the next runnable thread from the run queue.
 * This is the scheduler.
 */
struct Kernel_Thread* Get_Next_Runnable(void)
{
	struct Kernel_Thread* best = 0;
	int i;
	for(i = 0; i < MAX_QUEUE_LEVEL; i++)
	{
		best = Find_Best(&s_runQueue[i]);
		if(best != 0)
			break;
	}
	KASSERT(best != 0);
	Remove_Thread(&s_runQueue[i], best);
	
	//Print("Scheduling %x %x", best->pid, best->currentReadyQueue);

	return best;

}