Starvation (deutsch: Aushungerung) bezeichnet in Betriebssystemen und verteilten Systemen den Zustand, in dem ein Prozess oder Thread trotz Laufbereitschaft unbegrenzt auf eine Ressource wartet, weil andere Prozesse stets bevorzugt werden. Der Prozess ist nicht blockiert — er kommt nur nie an die Reihe.

Ursachen

  • Prioritäts-Scheduling ohne Aging: ständig neu ankommende höherpriore Prozesse verdrängen einen niederprioren dauerhaft.
  • SJF-Varianten: kurze Jobs werden immer zuerst ausgeführt, ein sehr langer Job hungert.
  • Unfaire Synchronisationsmechanismen: ein Thread, der eine Sperre nie erhält, weil andere sie im Wechsel bekommen.

Abgrenzung zu Deadlock

Beim Deadlock warten mehrere Prozesse zyklisch aufeinander und keiner kommt voran. Bei Starvation dagegen schreitet das System insgesamt voran — nur ein einzelner Prozess hungert. Eine Sonderform ist der Livelock, bei dem Prozesse aktiv arbeiten, aber keinen Fortschritt erzielen.

Gegenmittel

  • Aging: Die Priorität eines wartenden Prozesses wird schrittweise erhöht, bis er ausgeführt wird.
  • Priority Boost: Die Multilevel Feedback Queue hebt periodisch alle Prozesse in die oberste Warteschlange an.
  • Fairness-Garantien: Verfahren wie Round Robin oder proportionale Fair-Share-Scheduler sichern jedem Prozess einen Mindestanteil zu.

Starvation tritt auch außerhalb der CPU-Planung auf, etwa bei Netzwerk-Scheduling (Pakete eines Datenstroms werden verdrängt), bei Thread-Pools oder bei verteilten Lock-Diensten.

Verwandte Grundlagen: Prioritätswarteschlange, Zeitscheibe, Prozess-Scheduling, Nebenläufigkeit.