- Prioritäts-Scheduling
-
Das Prioritätsscheduling (auch PS – priority scheduling) ist ein in Betriebssystemen häufig verwendetes Scheduling-Verfahren.
Das Prinzip ist einfach: Jedem Prozess wird eine Priorität zugewiesen und nur der lauffähige Prozess mit höchster Priorität wird zur Ausführung gebracht. Dabei kann die Prioritätenvergabe statisch oder dynamisch erfolgen. In Echtzeitsystemen wird häufig eine statische Prioritätenvergabe verwendet, während andere Systeme oftmals dynamische Prioritäten nutzen. Bei dynamischer Prioritätenvergabe wird die Priorität mit jedem Timertick verringert, bis ein anderer Prozess eine höhere Priorität als der aktuell lauffähige besitzt.
Mittels intelligenter Algorithmen zur Prioritätenvergabe können verschiedene Systemziele erreicht werden. So ist es möglich, Prozessprioritäten bei Prozessen mit starkem I/O dynamisch zu vergrößern, um die Interaktivität des Systems zu verbessern.
Auch die Einteilung von Prozessen in verschiedene Prioritätenklassen ist möglich. Zwischen den einzelnen Prioritätenklassen wird typischerweise ein Round-Robin-Scheduling verwendet. Ein Beispiel für einen Scheduler mit dynamisch verwalteten Prioritätsklassen ist der Multilevel Feedback Queue Scheduler.
Es besteht die Gefahr der Prioritätsinversion, die auftritt, wenn ein Prozess mit niedriger Priorität eine Ressource mit Hilfe einer Semaphorvariablen exklusiv belegt hat (p()-Operation), die von einem Prozess mit hoher Priorität benötigt wird.
Obwohl der hochpriore Prozess eigentlich ausgeführt werden sollte, muss er warten, bis der niederpriore Prozess die Ressource mit einer v()-Operation wieder freigibt. Dieses Problem kann durch einen Prozess mittlerer Priorität verschärft werden, da dieser sowohl den hoch- wie niederprioren Prozess nun beliebig lange verdrängen kann.
Ein berühmter Absturz, der auf diesen Fehler zurückgeführt wurde, ist der Beinahe-Verlust der Pathfinder-Marssonde.
Obwohl das Problem seit den 70er Jahren bekannt ist, ist noch keine optimale Lösung gefunden worden. Zwei bekannte Lösungsansätze sind die Prioritätsgrenze oder -schranke (Priority Ceiling) und die Prioritätsvererbung (Priority Inheritance).
Wikimedia Foundation.