Scheduler (deutsch: Ablaufplaner) ist die Komponente eines Betriebssystems, die entscheidet, welcher Prozess oder Thread als Nächstes auf einem CPU-Kern laufen darf. Er ist das Herzstück des Prozess-Scheduling und sorgt dafür, dass viele laufende Programme sich die wenigen Kerne fair teilen.

Aufgaben des Schedulers

  • Auswahl: Aus allen lauffähigen (runnable) Prozessen wählt er den nächsten aus, der die CPU erhält.
  • Zeitscheiben: Er vergibt jedem Prozess eine begrenzte Zeitscheibe, nach deren Ablauf er den nächsten Prozess an die Reihe lässt.
  • Priorität: Wichtige Aufgaben (z.B. Audio, Netzwerk) bekommen Vorrang vor Hintergrundarbeit.
  • Fairness: Kein Prozess soll verhungern (Starvation) oder die CPU dauerhaft blockieren.

Scheduling-Klassen in Linux

Der Linux-Scheduler unterscheidet mehrere Klassen: SCHED_OTHER für normale Prozesse (faire, gewichtete Verteilung über den nice-Wert), SCHED_BATCH für Stapelverarbeitung, SCHED_IDLE für Niedrigstpriorität sowie die Echtzeit-Klassen SCHED_FIFO, SCHED_RR und SCHED_DEADLINE, die strenge Priorität garantieren. Seit Kernel 6.6 verwendet Linux für die faire Klasse den EEVDF-Algorithmus (Earliest Eligible Virtual Deadline First) als Nachfolger des Completely Fair Scheduler (CFS).

Scheduler und Kontextwechsel

Jede Umschaltung zwischen zwei Prozessen ist ein Kontextwechsel. Ein guter Scheduler minimiert dessen Häufigkeit, weil er Rechenzeit kostet — zu kurze Zeitscheiben erzeugen mehr Overhead, zu lange verschlechtern die Reaktionszeit. Moderne Systeme kombinieren daher Zeitscheiben mit Preemption: Der Scheduler unterbricht einen laufenden Prozess auch mitten in seiner Zeitscheibe, wenn ein wichtigerer Prozess bereit wird.

Verwandte Grundlagen: Multitasking, Thread, Multikern-Prozessor, Nebenläufigkeit, Algorithmus.