image-20240420163459407

锁和优先级反转

当一个进程(比如进程p1)获得了一个资源的锁,然后由于中断或调度原因而让出CPU时,这个资源锁通常还是被进程p1所持有的,因为资源锁是在内核层级上进行管理和控制的。

具体来说,当进程p1获得资源锁时,内核会将这个信息记录在进程控制块(Process Control Block,PCB)或者类似的数据结构中。


优先级反转

当一个进程(比如进程p1)获得了一个资源的锁,然后由于中断或调度原因而让出CPU,这时由于p2的优先级比p1高,p2会被调度执行,但是p2需要访问p1持有的资源,这时就会发生优先级反转。发生死锁。

优先级反转的解决方案

  1. 优先级继承:将低优先级的进程的优先级提升到高优先级的进程的优先级,直到低优先级的进程释放资源锁为止。
  2. 优先级调度:在调度时考虑进程的优先级,优先调度优先级高的进程。

注意创建新进程时,要继承父进程的运行优先级,而不是调度优先级,避免优先级反转。因为调度优先级是动态变化的,可能因为加锁被临时提升,而运行优先级是固定的。