The process scheduler selects an available process from Ready state for execution. Each CPU core can run one process at a time. To maximize the CPU utilization, the multicore system is used to run multiple process at all times.
If there are more processes than cores, excess processes will have to wait until a core is free and can be rescheduled. The number of processes currently in memory is known as the degree of multiprogramming.
Most processes can be described as either I/O bound or CPU bound. An I/O-bound process is one that spends more of its time doing I/O than it spends doing computations whereas a CPU bound process spends more of its time doing computations.
The processes are put into a Ready queue once they enter the system. The queue is stored as linked list which contains first PCB pointers.
When a process is allocated a CPU core, it executes for a while and eventually terminates, is interrupted, or waits for the occurrence of a particular event. The Processes that are waiting for a certain event to occur are placed in a wait queue.
The CPU scheduler selects the processes that are in the ready queue and allocate a CPU core to one of them. The CPU scheduler must select a new process for the CPU frequently.
Switching the CPU core to another process requires performing a state save of the current process and a state restore of a different process. This task is known as a context switch.