I'm reading Operating System Concepts by Silberschatz and in chapter 5, there is this text:
CPU-scheduling decisions may take place under the following four circumstances:
- When a process switches from the running state to the waiting state (for example, as the result of an I/O request or an invocation of wait() for the termination of a child process)
- When a process switches from the running state to the ready state (for example, when an interrupt occurs)
- When a process switches from the waiting state to the ready state (for example, at completion of I/O)
- When a process terminates
For situations 1 and 4, there is no choice in terms of scheduling. A new process (if one exists in the ready queue) must be selected for execution. There is a choice, however, for situations 2 and 3.
What does the author mean by choice? Does he mean that in situations 2 and 3, a new process might not be selected for execution when a process switches from the running to the ready state or from waiting to the ready state? Does that mean the CPU becomes idle? Is it preemptive scheduling?
When scheduling takes place only under circumstances 1 and 4, we say that the scheduling scheme is nonpreemptive or cooperative. Otherwise, it is preemptive. [...]Windows 95 introduced preemptivescheduling, and all subsequent versions of Windows operating systems have used preemptive scheduling. The Mac OS X operating system for the Macintosh also uses preemptive scheduling; previous versions of the Macintosh operating system relied on cooperative scheduling.
Does it mean that both newer versions of Windows and Mac OS X do not support situations 1 and 4 above as they are preemptive?