Under nonpreemptive scheduling, once the CPU has allocated to a process, the process keeps the CPU until 1. It releases the CPU by terminating 2. It releases the CPU by switching to the waiting state 3. It releases the CPU by switching to the ready state 4. It releases the CPU by switching to the running state