Prioritätsscheduling
# Prioritätsscheduling

Das Prioritätsscheduling (auch PS – priority scheduling) ist ein in Betriebssystemen häufig verwendetes Zeitaufteilungs-Verfahren (sog. „Scheduling“), das jedem Prozess eine Priorität zuweist und jeweils den lauffähigen Prozess mit der höchsten Priorität zur Ausführung bringt.

## Hintergrund

In einem Computer kann ein Prozessorkern immer nur einen Prozess (gleichzeitig) bearbeiten. Um dennoch mehrere Prozesse quasi-gleichzeitig abarbeiten zu können, wechselt der Prozessorkern sehr schnell zwischen diesen – sie erhalten sog. „Zeitscheiben“ (i. A. haben die Zeitscheiben eine feste Dauer im Millisekunden-Bereich). Dabei kann ein höher priorisierter Prozess öfter „an die Reihe kommen“, ein niedriger priorisierter muss dafür länger auf eine Zeitscheibe warten.

## Arten und Verfahren

Die Prioritätenvergabe kann 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.

Auch die Einteilung von Prozessen in verschiedene Prioritätenklassen ist möglich. Innerhalb der 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.

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.

## Gefahr Prioritätsinversion

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 1970er 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).

