Preemption (deutsch: Verdrängung, auch präemptives Scheduling) bezeichnet die Fähigkeit eines Betriebssystems, einen gerade laufenden Prozess zu unterbrechen, damit ein anderer Prozess die CPU erhält. Sie ist die Grundlage des präemptiven Multitasking, wie es alle modernen Betriebssysteme nutzen.

Kooperativ vs. präemptiv

Beim kooperativen Multitasking gibt ein Prozess die CPU freiwillig ab (Windows 3.x, klassisches Mac OS). Bricht ein Programm ab oder hängt es, bleibt das ganze System blockiert. Präemptives Multitasking dagegen erlaubt dem Scheduler, die CPU nach Ablauf der Zeitscheibe oder bei einem wichtigeren Ereignis zwangsweise zu entziehen — ein hängender Prozess kann das System nicht mehr lahmlegen.

Preemption-Ebenen im Linux-Kernel

  • Voluntary Preemption: Der Kernel lässt sich nur an definierten, sicheren Stellen unterbrechen (Standard bei Server-Kerneln, niedrige Latenz-Overheads).
  • Full Preemption: Der gesamte Kernel-Code ist unterbrechbar, auch innerhalb von Systemaufrufen — bessere Reaktionszeit, etwas mehr Overhead.
  • PREEMPT_RT: Der Echtzeit-Kernel (seit Kernel 6.12 im Hauptzweig) macht Linux als RTOS nutzbar; Interrupts laufen als Threads, Sperren sind präemptiv und prioritätsvererbend.

Warum ist Preemption wichtig?

Ohne Preemption könnte ein rechenintensiver Prozess alle anderen aushungern. Mit ihr bleiben interaktive Anwendungen reaktionsschnell, und Echtzeitanwendungen (Audio, Robotik, Industrie) bekommen garantierte Antwortzeiten. Der Preis ist ein Kontextwechsel-Overhead bei jeder Unterbrechung.

Verwandte Grundlagen: Prozess-Scheduling, Thread, Interrupt, Multikern-Prozessor.