Книга: Real-Time Concepts for Embedded Systems
16.4.1 Priority Inheritance Protocol
16.4.1 Priority Inheritance Protocol
The Priority Inheritance Protocol is a resource access control protocol that raises the priority of a task, if that task holds a resource being requested by a higher priority task, to the same priority level as the higher priority task. This access control protocol follows the rules in Table 16.1 when a task T requests a resource R.
Table 16.1: Priority Inheritance Protocol rules.
Rule # | Description |
---|---|
1 | If R is in use, T is blocked. |
2 | If R is free, R is allocated to T. |
3 | When a task of a higher priority requests the same resource, T's execution priority is raised to the requesting task's priority level. |
4 | The task returns to its previous priority when it releases R. |
This access control protocol is shown in Figure 16.8.
Figure 16.8: Priority inheritance protocol example.
With the priority inheritance protocol, when the LP-task blocks the HP-task at time t3, the execution priority is raised to that of the HP-task. This process ensures that unrelated medium-priority tasks cannot interfere while the LP-task executes, which results in the elimination of the unbounded priority inversion. When the LP-task releases control of the shared resource, the priority is immediately lowered to its previous level, which allows the HP-task to preempt its execution. This action ends the priority inversion at time t4. The HP-task continues its execution, however, even when it releases the resource at t5. This is the nature of the priority-based, preemptive scheduling scheme. The HP-task runs because it has the highest priority in the system.
The priority inheritance protocol is dynamic because a task does not have its priority raised until a higher-priority task makes a request on the shared resource. An unrelated higher-priority task can still preempt the task, which is the nature of the priority-based, preemptive scheduling scheme. The priority promotion for a task during priority inversion is transitive, which means the priority of a promoted task continues to rise even if higher-priority tasks make requests on the same shared resource while priority inversion is taking place, as shown in Figure 16.9.
Figure 16.9: Transitive priority promotion example.
In this example, three tasks with differing priorities share a resource. The LP-task acquires the resource first at time t1. At time t2, the MP-task preempts the LP-task and executes until t3 when it needs the resource. The MP-task is blocked. At that point, the LP-task inherits the priority from the MP-task and resumes execution at that level. The HP-task preempts the LP-task when it readies at t4. The HP-task is blocked at t5 when it also needs access to the shared resource. Once more, the LP-task inherits its priority from HP-task and resumes execution at the highest level. As soon as the LP-task completes at time t6, its priority is immediately lowered to the level originally assigned.
In this example, the MP-task can hold some additional resource required by the HP-task. The HP-task can also acquire some other resources needed by the MP-task before the HP-task blocks. When the LP-task releases the resource and the HP-task immediately gets to run, it is deadlocked with the MP-task. Therefore, priority inheritance protocol does not eliminate deadlock.
- 16.4.2 Ceiling Priority Protocol
- 16.4.3 Priority Ceiling Protocol
- 5.5.5 Priority-aware mutexes
- 5.5.5.1 Priority ceiling mutexes
- 5.5.5.2 Priority inheritance mutexes
- 8.1.4 Beware of priority inversion
- SERVER PRIORITY CLASS
- Complex protocols and connection tracking
- Using Priority Scheduling and Control
- Dynamic Host Configuration Protocol
- Understanding Point-to-Point Protocol over Ethernet
- Class Inheritance