Prioritätsvererbung
Die Prioritätsvererbung (englisch: priority inheritance) ist neben der Prioritätsgrenze oder -schranke (Priority Ceiling) eine Methode zur Behebung des Problems der Prioritätsinversion.
Zu Prioritätsinversion kann es bei mindestens drei Tasks mit unterschiedlicher Priorität kommen. Fordert hier der niedrigst priorisierte eine freie Ressource an, wird sie ihm vom Prozess-Scheduler sofort zugeteilt. Fragt jetzt der Task höchster Priorität dieselbe Ressource an, wird sie ihm verwehrt, da die niedrig priorisierte einen exklusiven Zugriff hält. Der hoch priorisierte Task muss nun auf den niedrig priorisierten warten. Ein dritter Task mit mittlerer Priorität kann den Task mit niedriger Priorität verdrängen. Da der Task mit der höchsten Priorität auf den mit der niedrigen Priorität wartet, verdrängt nun der Task mit mittlerer Priorität indirekt den Task mit der höchsten Priorität. Die Prioritäten sind somit wirkungslos.
Um den Zustand der Prioritätsinversion wirkungsvoll zu verhindern, wird die Priorität des niedrig priorisierten Tasks angehoben. Dies geschieht genau dann, wenn der hoch priorisierte Task die Ressource nachfragen möchte, die vom niedrig priorisierten belegt ist. Der niedrig priorisierte Task erbt die Priorität des hoch priorisierten Tasks. Die beiden Tasks können jetzt nicht mehr vom ursprünglich mit mittlerer Priorität laufenden Task unterbrochen werden. Sobald der niedrig priorisierte Task die Ressource nicht mehr benötigt, erhält er wieder seine ursprüngliche Priorität.
Mittels Prioritätsvererbung wurde bei der Mars-Pathfinder-Mission im Jahre 1997 das Problem des totalen System-Resets behoben.[1]
Literatur
- L. Sha, R. Rajkumar, J.P. Lehoczky: Priority Inheritance Protocols: An Approach to Real-Time Synchronization, IEEE Transactions on Computers, pp. 1175–1185, September, 1990