It is important to distinguish preemptive from non-preemptive scheduling algorithms.
							   Preemption means the operating system moves a process from running to ready without the process requesting it.
												   Without preemption, the system implements ``run to completion (or yield or block)''.
									   The ``preempt'' arc in the diagram.
									   We do not consider yield (a solid arrow from running to ready).
									   Preemption needs a clock interrupt (or equivalent).
									   Preemption is needed to guarantee fairness.
									   Found in all modern general purpose operating systems.
									   Even non preemptive systems can be multiprogrammed (e.g., when processes block for I/O)"