Prioritätsgrenze
aus Wikipedia, der freien Enzyklopädie
Die Prioritätsgrenze, - engl. priority ceiling protocol - ist eine Methode zur Behebung des Problems der Prioritätsinversion, und der Vermeidung von Deadlocks. Sie ist eine Erweiterung der Prioritätsvererbung, kann aber im Gegensatz zu dieser eine Verklemmung ausschließen.
Die Prioritätsgrenze ist die Priorität des höchstprioren Prozesses, welcher die Ressource verwendet. Alle Ressourcen werden so einer Prioritätsgrenze (Ceiling - Priorität) zugeordnet. Verwendet nun ein niedrig priorisierter Prozess eine Ressource, können keine anderen Prozesse, deren Priorität niedriger ist als die Prioritätsgrenze der Ressourcen, Betriebsmittel belegen. Solange, bis der niedriger priorisierte Prozess alle Ressourcen freigibt, deren Prioritätsgrenze höher ist als die Priorität des Prozesses.
[Bearbeiten] Beispiel mit Semaphor
3 Semaphoren:
- S1
- S2
- S3
2 Prozesse:
- T1 mit Priorität 1 und verwendet die Ressourcen S1, S2
- T2 mit Priorität 2 und verwendet die Ressourcen S2, S3
Prioritätsgrenzen der Semaphoren:
- S1: Priorität 1 wegen T1
- S2: Priorität 1 wegen T1
- S3: Priorität 2 wegen T2
Ablauf:
- T2 fängt an zu arbeiten, er verwendet sofort S2.
- T1 startet und verdrängt T2.
- T1 versucht nun S1 zu belegen. Dies scheitert jedoch, weil ein anderer Prozess S2 bereits reserviert hat, welcher die selbe Priorität hat wie T1. (T1 kann zu diesem Zeitpunkt überhaupt keine Betriebsmittel reservieren, auch wenn sie die Priorität 0 hätten.)
- T2 Bekommt nun die Priorität von T1 auf Grund der Prioritätsvererbung.
- T2 belegt jetzt zusätzlich S3. Dies ist möglich, da T2 momentan ein Betriebsmittel mit der höchsten Priorität hat.
- T2 gibt S2 frei und bekommt wieder seine Ausgangspriorität
- T1 sichert sich nun S2
[Bearbeiten] Abwandlungen
[Bearbeiten] OSEK Priority Ceiling Protocol
auch Immediate Priority Ceiling Protocol (eng. "unverzügliches Prioritäts-Obergrenzen-Protokoll")
Bei diesem Protokoll erhält der belegende Thread sofort die Priorität der Prioritätsgrenze der Ressource.