Process scheduling is a fundamental operating system function that involves cycling processes between CPU execution and I/O wait. The goal of multi-programming and CPU scheduling is to maximize CPU utilization by switching the CPU among ready processes to keep some process running at all times. The CPU scheduler selects a process from the ready queue to run, while the dispatcher gives control of the CPU to the selected process, with some latency time between stopping one process and starting another.