previous | start | next

Minix pick_proc

The pick_proc function simply selects the highest priority process to run:

    1   
    2   PRIVATE void pick_proc()
    3   {
    4   /* Decide who to run now.  A new process is selected by setting
    5         'next_ptr'.
    6    * When a billable process is selected, record it in 'bill_ptr', so
    7         that the 
    8    * clock task can tell who to bill for system time.
    9    */
   10    register struct proc *rp;/* process to run */
   11    int q;/* iterate over queues */
   12   
   13     /* Check each of the scheduling queues for ready processes. The
   14       number of
   15      * queues is defined in proc.h, and priorities are set in the task
   16       table.
   17      * The lowest queue contains IDLE, which is always ready.
   18      */
   19      for (q=0; q < NR_SCHED_QUEUES; q++) {
   20         if ( (rp = rdy_head[q]) != NIL_PROC) {
   21            next_ptr = rp;/* run process 'rp' next */
   22            if (priv(rp)->s_flags & BILLABLE) 
   23                bill_ptr = rp;/* bill for system time */
   24            return; 
   25         }
   26     }
   27   }


previous | start | next