CSS Optional — Paper-II, Section-A · P-II.III · Listed as a standalone topic in the CS-for-CSS book's OS chapter (asked directly in 2016, 6 marks; and again as a queue-flowchart question in 2019). The full Gantt-chart numericals for both live on [CPU Scheduling Algorithms — Deep Dive & Solved Numericals]; this page is the comparison answer itself, written the way the examiner wants it.

1. The One-Line Difference

Multilevel Queue (MLQ): a process is assigned to a queue permanently at creation — it can never move.

Multilevel Feedback Queue (MLFQ): a process can be promoted or demoted between queues at runtime based on its observed CPU behaviour.

Everything else — the strengths, the weaknesses, the starvation story — follows from that one structural difference. Open any answer with this sentence.

2. Multilevel Queue (MLQ)

The ready queue is split into several separate, permanent queues. Each queue holds one class of process and runs its own scheduling algorithm internally:

graph TD
    A["New process"] --> B{"Classified once,<br>by type"}
    B --> Q0["Q0: System (highest)"]
    B --> Q1["Q1: Interactive - RR"]
    B --> Q2["Q2: Batch - FCFS (lowest)"]
    Q0 --> CPU["CPU"]
    Q1 --> CPU
    Q2 --> CPU

Scheduling between queues is done one of two ways:

  1. Fixed-priority preemptive — a lower queue runs only when every higher queue is empty (the common textbook assumption, and the one that causes starvation).
  2. Time-slicing between queues — each queue gets a fixed share of CPU time (e.g. 80% foreground, 20% background), which bounds starvation but is less responsive.

Key property: classification is permanent. A batch job that turns out to be short still cannot be moved up; an interactive job that turns out to be CPU-hungry still cannot be moved down.

3. Multilevel Feedback Queue (MLFQ)

Same multi-queue structure, but with feedback — the scheduler watches how each process behaves and moves it: