Operating System Design/Processes/Scheduling

Because only one process per CPU can run at any one time, multitasking operating systems use a concept called multiprogramming to schedule time for each process to run on a CPU. A scheduler is responsible for giving each process time on the CPU. When the current time slice expires, the scheduler puts the current process to sleep and the next process is given CPU time. Some scheduling systems include:
 * First Come First Served
 * Shortest Process Next
 * Shortest Remaining Time
 * Round Robin Scheduling
 * Pre-Emption
 * Priority Scheduling

Schedulers for early batch mainframe systems and many modern servers often focus on maximizing throughput. Schedulers for real-time operating systems often focus in minimizing latency and guaranteeing that deadlines are always met (see Embedded Control Systems Design/Real Time Operating systems. Schedulers for modern desktop operating systems try to balance fairness, throughput, and latency (see The Linux Kernel/Processing).