Jump to content

Priority inheritance

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by 84.195.126.139 (talk) at 12:32, 20 April 2014 (Added requests for citations). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

In real-time computing, priority inheritance is a method for eliminating priority inversion problems[citation needed]. Using this programming method, a process scheduling algorithm will increase the priority of a process to the maximum priority of any process waiting for any resource on which the process 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 the highest priority level over all the jobs it blocks[citation needed]. After executing its critical section, the job 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 the (high) priority of H. 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 now inherits the priority of H. When L exits its critical section, it regains its original (low) priority and awakens H (which was blocked by L). H, having high priority, immediately preempts L and runs to completion. This enables M and L to resume in succession and run to completion[citation needed].

References

See also