操作系统优先级反转优先级继承优先级天花板

Posted Evan_ZGYF丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统优先级反转优先级继承优先级天花板相关的知识,希望对你有一定的参考价值。

目录

什么是优先级反转?

什么是优先级继承?

什么是优先级天花板?


什么是优先级反转?

高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。

举个栗子:

进程A,进程B,进程C。优先级依次递增。

进程C优先级最低,但进程C最先运行(占有锁),

此时进程B运行,因为优先级比C高,因此抢占运行,

过了一会进程A运行,原本进程A想要抢占进程B,但拿不到锁(被C占有锁),必须等待锁释放。但C又因为被进程B抢占,需要等待进程B结束...即使进程B结束后,C也会被A抢占,且A又等待C释放资源...出现死锁。


Ps:当发现高优先级的任务因为低优先级任务占用资源而阻塞时,就将低优先级任务的优先级提升到等待它所占有的资源的最高优先级任务的优先级。

这个过程叫做优先级反转。

Ps:如何解决优先级反转?

解决优先级反转方法有多种,包括禁止中断、禁止抢占、优先级继承、优先级天花板等。


什么是优先级继承?

优先级继承(priority inheritance)是指当高优先级进程(P1)请求一个已经被被低优先级(P3)占有的临界资源时,将低优先级进程(P3)的优先级临时提升到与高优先级进程一样的级别,使得低优先级进程能更快地运行,从而更快地释放临界资源。低优先级进程离开临界区后,其优先级恢复至原本的值。

继续上面那个栗子(如何解决优先级反转?):

进程C优先级最低,进程C运行时(占有锁),被进程B抢占。

此时进程A想要抢占进程B,(拿不到锁,等待锁释放),

可以先将进程C的优先级提高到和A一样的优先级,(此时进程C与进程A以时间分片进行调度),等待进程C运行并释放资源,进程A就可以继续运行了。


Ps:优先级天花板是指将申请某资源的任务的优先级提升到可能访问该资源的所有任务中最高优先级任务的优先级.(这个优先级称为该资源的优先级天花板)

低优先级进程离开临界区后,其优先级恢复至原本的值。

这个过程叫做优先级继承。

Ps:优先级继承是否存在隐患?

假如进程C的优先级和进程A优先级相同,两个进程按时间片轮转调度。

此时进程A等待进程C释放资源,进程C运行过程中如果又需要等待进程A释放资源...形成死锁。(此时两者优先级相同,优先级继承无效)


Ps:如何解决上述优先级继承的隐患?


什么是优先级天花板?

优先级天花板(priority ceiling)是指将申请某资源的任务的优先级提升到可能访问该资源的所有任务中最高优先级任务的优先级。

还是上面那个栗子(如何解决上述优先级继承的隐患?):

进程C优先级最低,进程C运行时(占有锁),被进程B抢占。

此时进程A想要抢占进程B,(拿不到锁,等待锁释放),

可以先将进程C的优先级提高到最高优先级,让C优先运行并释放资源,再运行进程A。

这个过程叫做优先级天花板。


优先级继承和优先级天花板的区别

优先级继承,只有一个任务访问资源时一切照旧,没有区别,只有当高优先级任务因为资源被低优先级占有而被阻塞时,才会提高占有资源任务的优先级

而优先级天花板,不论是否发生阻塞,都提升,即谁先拿到资源,就将这个任务提升到该资源的天花板优先级。


获取更多相关的笔试面试题,可收藏系列博文,持续更新中:
C语言|BSP开发|嵌入式软件|Linux驱动|笔试面试题汇总帖


参考:

信号量优先级反转(翻转)与优先级继承

优先级调度、优先级反转、优先级继承、优先级天花板

以上是关于操作系统优先级反转优先级继承优先级天花板的主要内容,如果未能解决你的问题,请参考以下文章

信号量优先级反转(翻转)与优先级继承

在优先级反转问题上,我们应该更改互斥锁或线程的属性吗?

什么是优先级反转?

Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)

STM32CubeIDE+FreeRTOS互斥量实验

线程调度的问题:Lock Convoy(锁封护)与Priority Inversion(优先级反转)