


*Process Scheduling*
Process scheduling is the allocation of CPU time to processes. The OS scheduler selects a process from the ready queue and allocates the CPU to execute it.
*Scheduling Algorithms*
1. *First-Come-First-Served (FCFS)*: Processes are executed in the order they arrive in the ready queue.
2. *Shortest Job First (SJF)*: The shortest process is executed first.
3. *Priority Scheduling*: Processes are executed based on priority, with higher-priority processes running first.
4. *Round-Robin (RR)*: Each process is allocated a fixed time slice (time quantum) in a cyclic order.
5. *Multilevel Feedback Queue (MFQ)*: Multiple queues with different priorities; processes move between queues based on their behavior.
*Scheduling Criteria*
1. *CPU Utilization*: Maximize CPU usage to minimize idle time.
2. *Throughput*: Maximize the number of processes completed per unit time.
3. *Turnaround Time*: Minimize the time between process submission and completion.
4. *Response Time*: Minimize the time between process submission and first response.
5. *Fairness*: Ensure equal allocation of resources to processes.
*Scheduling Types*
1. *Preemptive Scheduling*: The OS can suspend a running process to allocate the CPU to another process.
2. *Non-Preemptive Scheduling*: The OS cannot suspend a running process; it must complete before another process runs.
*Scheduling Data Structures*
1. *Ready Queue*: Holds processes waiting for CPU allocation.
2. *Waiting Queue*: Holds processes waiting for I/O or other resources.
3. *Zombie Process*: A process that has completed execution but still holds system resources.
*Context Switching*
Context switching occurs when the OS switches the CPU from one process to another. It involves saving the current process's state and restoring the new process's state.