Eine Strategie, um Priority Inversion zu verhindern, ist durch das Priority Inheritance (PI) Protokoll von Sha, Rajkumar und Lehoczky (1990)[102] gegeben. Die Grundidee dieses Protokolls läßt sich wie folgt beschreiben:
- PREEMPTION:
- Wenn ein Task
die höchste Priorität hat und er ist nicht blockiert, dann gelangt er zur Ausführung. Ein eventuell anderer aktuell laufender Task
wird ausgesetzt (preempted).
- LOCKING/BLOCKING:
- Wenn ein Task
sich in der Ausführung befindet und er kommt zu einer kritischen Sektion
, dann wird er den nächsten Semaphor
anfordern. Ist dieser noch frei, dann wird dieser Semaphor gelocked; andernfalls wird Task
blockiert.
- UNLOCKING/ PRIORITY NORMALIZATION:
- Wenn ein Task
eine kritische Sektion
verläßt, dann wird der zuvor gelockte Semaphor
unlocked. Zugleich werden alle aktuellen Prioritäten, die durch wartende Tasks mit höherer Priorität erzeugt worden sind, wieder normalisiert.
- PRIORITY INHERITANCE:
- Wenn ein Task
sich in der Ausführung einer kritischen Sektion
befindet und er wird von einem anderen Task
mit einer höheren Priorität angefordert, dann übernimmt der Task
die höhere Priorität von Task
als seine neue aktuelle Priorität
. Dadurch kann er seine Abarbeitung fortsetzen und Task
ist blockiert.
Subsections
Gerd Doeben-Henisch
2013-01-16