4.2 Protokolle für Ressourcen-Zugriffe
235
blockiert durch
blockiert durch
erhält Priorität von
Priorität von 3
J
3
J
1
J
J
J
J
J
J
J
J
3
p
p
p
t
&
1
2
3
b
P(b)
P(b)
P(a)
b
b
b
a
V(a)
V(b)
V(b)
a
P(a)
a
V(a)
1
2
3
2
2
1
t 0
Abb. 4.9 Transitivität der Prioritätsvererbung
Prioritätsvererbung wird auch von Ada verwendet: während eines Rendez-Vous
wird die Priorität der betroffenen Codeobjekte auf deren Maximum gesetzt.
Prioritätsvererbung löste auch das Problem des Mars Pathfinder: das verwendete
VxWorks-Betriebssystem besitzt einen Booleschen Parameter für Aufrufe von MutexGrundfunktionen. Dieser Parameter erlaubt es, die Prioritätsvererbung zu nutzen. Im
Auslieferungszustand der Software war Prioritätsvererbung deaktiviert. Das Problem
auf dem Mars wurde beseitigt, indem dieser Parameter mittels der DebuggingFunktionalität von VxWorks modifiziert und die Prioritätsvererbung damit aktiviert
wurde, als der Pathfinder sich bereits auf dem Mars befand [276]. Prioritätsvererbung
kann mit Hilfe der levi-Simulationssoftware simuliert werden [497].
Prioritätsvererbung kann einige Problem lösen, aber bei Weitem nicht alle. So
könnte es eine große Anzahl von Jobs mit hoher Priorität geben. Auch kann es
Deadlocks geben, was anhand eines Beispiels gezeigt werden kann [81].
Beispiel 4.2: Angenommen, es gäbe zwei Jobs J 1 und J 2 . Für Job J 1 nehmen wir
eine Codesequenz der Form ...; P(a); P(b); V(b); V(a); ...; an. Für Job J 2 nehmen
wir eine Codesequenz der Form ...; P(b); P(a); V(a); V(b); ...; an. Eine mögliche
Ausführungsreihenfolge ist in Abb. 4.10 zu sehen. Wir nehmen an, dass die Priorität
von J 1 höher ist als die von J 2 . Daher verdrängt J 1 den Job J 2 zum Zeitpunkt t 1
J
J
t
t
t
t
t
t
t
0
1
2
3
4
P(b)
P(a)
P(b)
b
P(a)
a
b
1
2
Abb. 4.10 Prioritätsvererbung mit Deadlock
Précédent

- 255/485

Suivant