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