The main data structure of the Mach scheduler includes 32 queues of runnable threads, called run queues. When a processor needs a new thread to run, it consults the run queues to get a thread according to a thread priority scheme. The priority of a thread is equal to its base priority plus an offset derived from recent processor usage. The system includes several provisions for fine-tuning the priority to adjust to special conditions. Each processor uses a round-robin scheduling scheme (with a time quantum) to minimize the number of context switches.
To achieve efficient synchronization and communication between threads, the Mach scheduler uses hints. Hints essentially help modulate (elevate as well as suppress) the priority and timing of execution of threads to maintain efficient communication and synchronization between the threads. Scheduling information specific to an application can be advantageously used to effectively carry out communication and synchronization among threads. The paper also discusses the results of two experiments on Encore Multimax, which show the performance benefits of hints.
The Mach kernel nicely isolates processor allocation policy and mechanism issues for a greater degree of flexibility. The kernel supports only processor allocation mechanisms; policy issues are relegated to a privileged server. This separation permits easy implementation of a wide array of processor allocation policies because the server can be configured easily as compared to the kernel.
I strongly recommend this paper for anyone who is interested in the details of the Mach scheduler. Black discusses implementation details of the mechanisms used in the Mach scheduler in depth. Although most of the paper is devoted to the Mach scheduler, it also discusses several general concepts such as programming models for parallel programming. The paper could have included more results of experiments with the Mach scheduler.