Jump to content

Priority inheritance

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Lfstevens (talk | contribs) at 18:24, 11 May 2014 (ce, rem tag). 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.[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