Ebenfalls von den Autoren Sha, Rajkumar und Lehoczky (1990)[102] stammt das Priority Ceiling Protokoll (PCP). Es stellt eine Erweiterung des Priority Inheritance Protokolls dar, das geschaffen wurde, um Phänomene wie Chaining (verkettete Verzögerung) oder Deadlocks (Pattsituationen) auszuschließen.
An der originalen Definition von Sha et al.(1990) kann man sehr schön die verschiedenen 'Regelungstiefen' erkennen (das Wort 'Regelungstiefe' im folgenden Text ist nicht Bestandteil der ursprünglichen Definition. Ich habe es dazugesetzt, um die unterschiedlichen Komponenten der Definition klarer hervorheben zu können; ebenso ist in der ursprünglichen Definition die Abfolge genau umgekehrt):
Diese Definition folgt den unterschiedlichen Komplexitätsgraden, die man in der Praxis vorfinden kann. Im einfachsten Fall -Regelungstiefe 1- hat meine eine Taskmenge mit ausschließlich unabhängigen Tasks. Keiner muß eine Ressource mit einem anderen Task teilen. In diesem Fall genügt es für den Scheduler, die Tasks anhand ihrer nominellen Priorität zu organisieren.
Handelt es sich dagegen um eine abhängige Taskmenge, dann gibt es zwei interessante Zustände: ein Task hat schon die Kontrolle über eine Ressource oder er will die Kontrolle erst erlangen.
Im ersten Fall, wenn er die Kontrolle schon hat, dann wird die Idee des Priority Inheritance Protokolls übernommen -Regelungstiefe 2-Vererbung-: alle anfragenden Tasks müssen auf die Freigabe der Ressource durch den kontrollierenden Task
warten. Sofern einer der anfragenden Tasks eine höhere Priorität
als jene des kontrollierenden Tasks hat, übernimmt der kontrollierende Task diese höhere Priorität
für die Dauer der Abarbeitung als seine aktuale/ technische Priorität. Dies verkürzt im allgemeinen die Wartezeiten der höherwertigen Tasks. Nicht ausgeschlossen ist hiermit allerdings -siehe das vorausgehende Deadlock-Beispiel5.4- der Fall, daß ein anderer Task
mit höherer Priorität unterbrechen und eine Ressource beanspruchen kann, die im späteren Verlauf auch noch von dem gerade aktiven Task
benötigt werden wird. Hier greift nun die neue Erweiterung gegenüber dem PI-Protokoll.
Will nämlich ein Task mit höherer Priorität als der gerade aktive Task
auf eine Ressource zugreifen, die von dem aktiven Task
momentan noch nicht benutzt wird -Regelungstiefe 2-Zugriff auf Ressource-, dann wird jetzt verlangt, daß der anfordernde Task
eine Priorität besitzt, die höher ist als der Ceilingwert
-Definition siehe unten- der gewünschten noch nicht genutzten Ressource. Das Konzept des Ceilingwertes ist das neue Hilfsmittel, mit dem im Priority Ceiling Protokoll die Wechselwirkung zwischen den verschiedenen Tasks kontrolliert wird.
Def.: Priority Ceiling Gegeben sei eine Taskmenge und ein Semaphor S. Sei
jene Menge von Tasks, die den Semaphor S benutzen können. Sei
die Menge der Prioritäten der Tasks von
. Dann soll gelten:
Die Idee hinter dieser Regelung ist einfach: um zu verhindern, dass die Tasks der Taskmenge sich bei der Benutzung einer gemeinsamen Ressource gegenseitig blockieren, wird verlangt, daß ein Zugriff eines Task
auf eine aktuell noch freie Ressource S nur möglich ist, wenn die Priorität des anfragenden Tasks
höher ist als der Ceilingwert aller aktuell benutzten Semaphoren
. Denn, sollte der aktuell anfragende Task
später auch noch eine der jetzt schon kontrollierten Ressource benutzen wollen, dann würde dies zum Deadlock/ Gleichstand führen können, würde auch die Ressource S immer noch von
kontrolliert und einer der aktuell kontrollierenden Tasks
würde S anfragen. Die aktuell kontrollierenden Tasks
werden also dadurch geschützt, daß Tasks, die gemeinsame Ressourcen anfragen wollen, dies nicht können, da sie grundsätzlich keine höhere Priorität als den Ceilingwert der gemeinsamen Ressorcen besitzen. Dies sei am vorausgehenden Beispiel mit dem Deadlock/ Gleichstand illustriert.