本文主要梳理优先级继承的基本原理,优先级继承主要是用来解决优先级反转,可以简单理解为
一个进程在当前进程拥有的锁上阻塞时,会继承另一个进程的优先级。举个例子说明,进程A、
B、C,其中A优先级最高,B次之,C最小,那么当 A 在 C 拥有的锁上阻塞时,C 将继承 A 的优先
级。因此,如果 B 变为可运行状态,它将不会抢占 C,因为此时 C 具有 A 的高优先级。一旦 C 释
放锁,它将失去继承的优先级,然后 A 可以继续使用 C 拥有的资源。
在linux源码实现中,位置:kernel/locking/rtmutex.c,主要涉及到两个重要步骤:
1、优先级调整;
2、PI(优先级继承)链遍历
优先级调整
该部分实现任务调整的函数分别是rt_mutex_adjust_prio和rt_mutex_setprio,其中
rt_mutex_setprio在rt_mutex_adjust_prio中被调用,rt_mutex_setprio的实现则实在
kernel/sched/core.c中。
static void rt_mutex_adjust_prio(struct task_struct *p)
{
st