锁和优先级反转
锁和优先级反转
当一个进程(比如进程p1)获得了一个资源的锁,然后由于中断或调度原因而让出CPU时,这个资源锁通常还是被进程p1所持有的,因为资源锁是在内核层级上进行管理和控制的。
具体来说,当进程p1获得资源锁时,内核会将这个信息记录在进程控制块(Process Control Block,PCB)或者类似的数据结构中。
优先级反转
当一个进程(比如进程p1)获得了一个资源的锁,然后由于中断或调度原因而让出CPU,这时由于p2的优先级比p1高,p2会被调度执行,但是p2需要访问p1持有的资源,这时就会发生优先级反转。发生死锁。
优先级反转的解决方案
- 优先级继承:将低优先级的进程的优先级提升到高优先级的进程的优先级,直到低优先级的进程释放资源锁为止。
- 优先级调度:在调度时考虑进程的优先级,优先调度优先级高的进程。
注意创建新进程时,要继承父进程的运行优先级,而不是调度优先级,避免优先级反转。因为调度优先级是动态变化的,可能因为加锁被临时提升,而运行优先级是固定的。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Haostart 的个人站点!
评论