Please read below passage from 10th edition Operating System Concepts, pg. 202:
5.1.3 Preemptive and Nonpreemptive Scheduling
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. When scheduling takes place only under circumstances 1 and 4, we say that the scheduling scheme is nonpreemptive or cooperative.
My doubt for situation 3 is, Process will inevitably move to ready state once I/O operation is complete as last burst is always CPU burst, so how do we have choice for CPU-scheduling decisions to not take place for situation 3?