The second big topic I want to cover in this chapter is scheduling. The Linux scheduler has a queue of threads that are ready to run and its job is to schedule them on CPUs as they become available. Each thread has a scheduling policy which may be timeshared or real-time. The timeshared threads have a niceness value which increases or reduces their entitlement to CPU time. The real-time threads have a priority such that a higher priority thread will preempt a lower one. The scheduler works with threads, not processes. Each thread is scheduled regardless of which process it is running in.
The scheduler runs when:
A thread blocks by calling
sleep()
or in a blocking I/O callA timeshare thread exhausts its time slice
An interrupt causes a thread to be unblocked, for example, because of I/O completing
For background information on the Linux scheduler, I recommend reading the chapter on process scheduling in Linux Kernel Development, 3rd edition by Robert Love, Addison-Wesley Professional...