Operating System Concepts says
CPU-scheduling decisions may take place under the following four circum- stances:
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. Otherwise, it is preemptive.
What does "choice in terms of scheduling" mean?
Why is there no choice for cooperative scheduling, and there may be for preemptive scheduling?
I think that whether scheduling is preemptive or not,
the running process always gives up the CPU (so no choice), and
there is always a choice to make to select one process from the ready queue to run.