Process scheduling is the act of assign CPU to different processes in a multiprogrammed OS. We can do it following two politics: preemptive and non-preemptive scheduling. The first means that a process in the system can be halted also if it could logically continue. Non-preemptive scheduling means that the only way the process can be halted is that it's logically stopped, in example for an I/O operation, because the process is terminated, because it's blocked by a semaphore that time it with other resources in the system ... The choice of one way or another in the scheduling system is made usually keeping these points in mind: 1) throughput : is the number of processes that the OS can handle 2) CPU occupation 3) fairness : are we interested in different priority to handle the system or not ? 4) turnaround : is the maximum time we want a process can be in our system 5) interaction : we usually want that all processes in our system will respond as soon as possible We can have different ways to handle scheduling: round-robin, priority systems, event-driven systems, ... webmaster@scastagnoli.net