当前位置:网站首页>优先级反转与死锁
优先级反转与死锁
2022-07-06 09:16:00 【薇远镖局】
1、优先级反转
指资源被锁时低优先级任务抢占高优先级任务。
举例:任务A、B、C,优先级从低到高依次为1、2、3,所有任务都是完全抢占式,任务A和C共享资源R。
1.任务A运行,并对资源R加锁;
2.任务C被激活抢占任务A,并尝试对资源R加锁,因此C进入WAITING状态,A从被抢占的地方恢复;
3.任务B被激活并抢占任务A,任务B成功执行;
4.任务A恢复执行并释放资源R,任务A执行完成;
5.任务C恢复并对资源R加锁并完成执行。
我们观察到任务B优先级低于任务C却实际上抢占了任务C,这就是优先级反转。在实时要求较高的系统中这种高优先级的任务被意外延迟是难以接受的。更严重的是由于优先级反转,任务C的延迟时间是无法确定的,因为任何比任务A优先级高的任务都可以抢占任务A。
2、死锁
对资源加锁造成两个任务的冲突,每个任务都锁住了另一个任务需要的资源,使得每个任务都不能完成。
举例:任务A、B,共享两个资源R1、R2,其他情况与优先级反转中相同。
1.任务A对R1加锁;
2.任务B抢占A,并对R2加锁,之后尝试对R1加锁,由于R1已经被锁,所以任务B进入WAITING状态;
3.任务A恢复执行,尝试对R2加锁,由于R2已经被锁,所以任务A进入WAITING状态;
4.其他任务进入执行状态,而任务A和B永远无法继续执行。
死锁很可能在正常测试中不能被发现,而在交付客户后由于问题难以复现而更难被排查到。
解决优先级反转和死锁的方法很多,在OSEK中利用OS的优先级天花板协议(priority ceiling protocol)是最有效的方法。
RT-thread 互斥量中优先级继承机制
2018-11-01 13:23:58
三个线程分别是 H线程、M线程、L线程
1.三个线程的优先级顺序是:H线程 > M线程 > L线程;
2.正常运行的时候H线程可以打断M线程与L线程, M线程可以打断L线程;
3.假设系统有一个资源被保护了,此时该资源被L线程在使用,某一时刻H线程需要使用该资源,但L线程还未使用完,H线程申请不到而进入阻塞态,此时已出现优先级翻转现象;
没有优先级继承机制的时候:
如果L线程执行的时候,M线程刚好被唤醒了,由于M线程的优先级比较高,会打断L线程,抢占CPU使用权,直到M线程执行完成;
M线程将CPU的使用权给L线程,L线程继续执行,L执行完后释放该资源;
H线程得到该资源,从阻塞态解除;
这个过程,高优先级的H等待了M线程+L线程的时间,如果有更多线程的时候,那系统就崩溃了,等不起的!
有优先级继承机制的时候:
在H贤臣申请资源的时候由于申请不到资源进入阻塞态,系统会把当前使用资源的L线程的优先级临时提高到与H线程的优先级相同;
此时M线程被唤醒也不会打断L线程;
L线程执行完毕,释放资源,H线程获取资源被继续执行,H线程等待的时间只是L线程的执行时间。
原文:
OSEK study notes – 优先级反转与死锁
边栏推荐
- sklearn之feature_extraction.text.CountVectorizer / TfidVectorizer
- [mrctf2020] dolls
- Face recognition_ recognition
- Codeforces Round #753 (Div. 3)
- SQL time injection
- [Bluebridge cup 2021 preliminary] weight weighing
- Using LinkedHashMap to realize the caching of an LRU algorithm
- Basic use of pytest
- [NPUCTF2020]ReadlezPHP
- yarn安装与使用
猜你喜欢

sklearn之feature_extraction.text.CountVectorizer / TfidVectorizer

Kept VRRP script, preemptive delay, VIP unicast details

快来走进JVM吧

Case analysis of data inconsistency caused by Pt OSC table change

Vs2019 use wizard to generate an MFC Application

Word排版(小計)

Mtcnn face detection

B tree and b+ tree of MySQL index implementation
![[template] KMP string matching](/img/f9/cd8b6f8e2b0335c2ec0a76fc500c9b.jpg)
[template] KMP string matching

Face recognition_ recognition
随机推荐
Contiki source code + principle + function + programming + transplantation + drive + network (turn)
Those commonly used tool classes and methods in hutool
Kaggle竞赛-Two Sigma Connect: Rental Listing Inquiries
About string immutability
[Flink] cdh/cdp Flink on Yan log configuration
vs2019 桌面程序快速入门
Codeforces Round #771 (Div. 2)
4、安装部署Spark(Spark on Yarn模式)
Vs2019 use wizard to generate an MFC Application
互聯網協議詳解
Word排版(小計)
Wangeditor rich text reference and table usage
[Kerberos] deeply understand the Kerberos ticket life cycle
Correspondence between STM32 model and contex M
机器学习--线性回归(sklearn)
mysql实现读写分离
[MRCTF2020]套娃
Contiki源码+原理+功能+编程+移植+驱动+网络(转)
2019 Tencent summer intern formal written examination
Apprentissage automatique - - régression linéaire (sklearn)