Priority inheritance
In real-time computing, priority inheritance is a method for eliminating priority inversion.[citation needed] Using this programming method, a process scheduling algorithm increases the priority of a process (A) to the maximum priority of any other process waiting for any resource on which A has a resource lock.[citation needed]
The basic idea of the priority inheritance protocol is that when a job blocks one or more high-priority jobs,[citation needed] it ignores its original priority assignment and executes its critical section at an elevated priority level.[citation needed]. After executing its critical section and releasing its locks, the process returns to its original priority level.[citation needed]
Example
Consider three jobs:
Job Name | Priority |
---|---|
H | High |
M | Medium |
L | Low |
Suppose H is blocked by L for some shared resource. The priority inheritance protocol requires that L executes its critical section at H's (high) priority. As a result, M will be unable to preempt L and will be blocked. That is, the higher-priority job M must wait for the critical section of the lower priority job L to be executed, because L has inherited H's priority. When L exits its critical section, it regains its original (low) priority and awakens H (which was blocked by L). H, having high priority, preempts L and runs to completion. This enables M and L to resume in succession and run to completion.[citation needed]
References
See also
External links
- "Priority Inheritance: The Real Story" by Doug Locke
- "Against Priority Inheritance" by Victor Yodaiken
- "Implementing Concurrency Control With Priority Inheritance in Real-Time CORBA" by Steven Wohlever, Victor Fay Wolfe and Russell Johnston
- "Priority Inheritance Spin Locks for Multiprocessor Real-Time Systems" by Cai-Dong Wang, Hiroaki Takada and Ken Sakamura
- "Hardware Support for Priority Inheritance" by Bilge E. S. Akgul, Vincent J. Mooney, Henrik Thane and Pramote Kuacharoen