previous | start | next

Minix Scheduling Policy

The Minix scheduling policy is determined by the sched function:

    1   
    2   PRIVATE void sched(rp, queue, front)
    3        register struct proc *rp;/* process to be scheduled */
    4        int *queue;/* return: queue to use */
    5        int *front;/* return: front or back */
    6   {
    7   /* This function determines the scheduling policy.  It is called
    8         whenever a
    9    * process must be added to one of the scheduling queues to decide
   10         where to
   11    * insert it.  As a side-effect the process' priority may be updated.  
   12    */
   13    int time_left = (rp->p_ticks_left > 0);/* quantum fully consumed
   14         */
   15   
   16     /* Check whether the process has time left. Otherwise give a new
   17       quantum 
   18      * and lower the process' priority, unless the process already is in
   19       the 
   20      * lowest queue.  
   21      */
   22       if (! time_left) {/* quantum consumed ? */
   23         rp->p_ticks_left = rp->p_quantum_size; /* give new quantum */
   24       if (rp->p_priority < (IDLE_Q-1)) {   
   25         rp->p_priority += 1;/* lower priority */
   26       }
   27     }
   28   
   29     /* If there is time left, the process is added to the front of its
   30       queue, 
   31      * so that it can immediately run. The queue to use simply is always
   32       the
   33      * process' current priority. 
   34      */
   35     *queue = rp->p_priority;
   36     *front = time_left;
   37   }


previous | start | next