next up previous
Next: Realtime Up: How The Linux Scheduler Previous: task_struct

schedule()

  Scheduling in the Linux kernel happens in the function schedule(). A call to schedule() is made when one of the following three conditions holds:
1.
The currently running task's need_resched is set and the task is returning from a system call.
2.
The currently running task's counter is at 0 and the 10 msec timer goes off.
3.
The currently running task blocks or yields.

Once a call to schedule() has been made, scheduling within schedule() proceeds as follows:

1.
Administrative stuff is done.
(a)
task queue stuff is handled All of the functions on the task queue are called.
(b)
bottom half stuff is handled
(c)
If the last task was a realtime round robin task, it is moved to the end of the task queue so that those processes at the same priority (also realtime round robin) get to run before it.

2.
The scheduler proper begins.
if the run queue is empty run the init task.
else
(a)
compute each runnable task's goodness via the algorithm in Figure 1.

(b)
if all tasks have goodness 0 (their counters have all expired)
  • reset all runnable tasks' counters to their respective prioritys and go back to 2.

else

  • find the task with the highest goodness value and choose it to run next.


  
Figure 1: Computing a task's goodness .
\begin{figure}
   \begin{enumerate}
   \item if \texttt{policy} indicates we're real...
   ...mps that have the
   same \texttt{mm})
   \end{itemize} \end{enumerate} \end{figure}


next up previous
Next: Realtime Up: How The Linux Scheduler Previous: task_struct
Brandon Sanders
12/17/1999