日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通过1997年拓荒者号飞行器事件理解优先级反转

發(fā)布時間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过1997年拓荒者号飞行器事件理解优先级反转 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??? 拓荒者號飛行器在1997年7月4日登陸火星,并開始收集星球上的數(shù)據(jù),并將數(shù)據(jù)傳送回地球。但是在任務(wù)開始幾天后,飛行器就開始經(jīng)歷重置整個系統(tǒng)的bug。這導(dǎo)致了大量珍貴的采集數(shù)據(jù)的丟失。在經(jīng)歷了制作團(tuán)隊(Jet Propulsion Laboratory)巨大的努力排查之后,發(fā)現(xiàn)問題的根源在于系統(tǒng)調(diào)度中的優(yōu)先級翻轉(zhuǎn)問題。

??? 對于任何一個設(shè)置優(yōu)先級的操作系統(tǒng),系統(tǒng)都會先執(zhí)行優(yōu)先級最高的任務(wù)。優(yōu)先級翻轉(zhuǎn)是指當(dāng)系統(tǒng)由于某些原因不得不等待低優(yōu)先級的任務(wù)完成,才讓高優(yōu)先級任務(wù)執(zhí)行的情況。這種看似不合理的情況是非常容易發(fā)生的。比如說,為了保證系統(tǒng)運(yùn)行結(jié)果的正確性,公共變量不得不在被使用時先“鎖”起來。當(dāng)程序A在執(zhí)行過程中,如果占用了某個公共變量X,任何其他的程序,比如B都不可以訪問這個變量X。B能做的只有等待A在使用完這個變量,并且釋放了對這個變量的控制權(quán)之后,才可以去訪問這個公共變量X。通常實(shí)現(xiàn)這個的方法是設(shè)置semaphore。當(dāng)B的優(yōu)先級比A高的時候,優(yōu)先級翻轉(zhuǎn)的問題就隨之產(chǎn)生了。

???? 優(yōu)先級翻轉(zhuǎn)還會帶來一個問題,就是在高優(yōu)先級任務(wù)等待低優(yōu)先級任務(wù)完成的時候,可能這個高優(yōu)先級任務(wù)本身就會錯過完成的截止日期,這反過來又會影響到其他的程序,翻來覆去就會對整個系統(tǒng)就會造成致命的影響。

???? 回到拓荒者飛行器的故事上,簡單來說它的操作系統(tǒng)總共設(shè)置了3個任務(wù),優(yōu)先級依次下降:

T1:周期性的檢測飛行器系統(tǒng)和軟件是否工作正常
T2:處理圖像數(shù)據(jù)
T3:隨機(jī)對某些設(shè)備的狀態(tài)進(jìn)行檢測

??? 當(dāng)任務(wù)T1完成后,系統(tǒng)中的看門狗時鐘就會被重置到最大值。如果看門狗的數(shù)值降低到負(fù)值,也就是說當(dāng)T1沒有按時完成時,系統(tǒng)就會認(rèn)為整個操作系統(tǒng)一定是在某個地方出現(xiàn)了比較嚴(yán)重的問題,安全起見,操作系統(tǒng)就會重置所有的軟件以及硬件。這個操作會花費(fèi)大量的時間。同時系統(tǒng)設(shè)定,T1和T3共同擁有一個公共數(shù)據(jù)結(jié)構(gòu)(即變量)。

下圖描述了優(yōu)先級翻轉(zhuǎn)發(fā)生的過程:




t1時刻:T3開始執(zhí)行

t2時刻:T3鎖住了semaphore,也就是s,導(dǎo)致其他程序無法訪問公共變量s

t3時刻:T1由于擁有更高的優(yōu)先級,替代了T3,并讓自己開始執(zhí)行

t4時刻:T1想要訪問公共變量s,但是由于T3已經(jīng)鎖住了公共變量s,所以T1無法訪問公共變量s,只好暫停程序

t5時刻:T2由于擁有比T3更高的優(yōu)先級,于是開始執(zhí)行

t6時刻:T2由于一些其他的因素暫停執(zhí)行,這些因素于T1和T_無關(guān),所以T2可能執(zhí)行了很長時間

t7時刻:T3終于獲得機(jī)會執(zhí)行,在使用完公共變量s并將其釋放后,T1立刻搶占了資源,開始執(zhí)行

??? 由上述過程可以發(fā)現(xiàn),T1必須等待T2和T3都執(zhí)行完之后才可以執(zhí)行完自己的程序。這么做的后果是很有可能T1無法按時完成,導(dǎo)致系統(tǒng)重啟。

??? 一個比較好的解決方案就是,引入優(yōu)先級繼承的機(jī)制,即,在T3鎖住公共變量后,它遍繼承了和它共享這個公共變量的T1的優(yōu)先級,如下圖所示,這樣就可以很大程度上避免上述問題。具體的步驟如下所示:

t1時刻:T3開始執(zhí)行

t2時刻:T3鎖住了semaphore,也就是s,導(dǎo)致其他程序無法訪問公共變量s

t3時刻:T1由于擁有更高的優(yōu)先級,替代了T3,并讓自己開始執(zhí)行

t4時刻:T1想要訪問公共變量s,但是由于T3已經(jīng)鎖住了公共變量s,所以T1無法訪問公共變量s,只好暫停程序,但同時,T1將自己的優(yōu)先級賦予了T3

t5時刻:T2想要執(zhí)行,但是此時其優(yōu)先級小于T3,所以暫不執(zhí)行

t6時刻:T3執(zhí)行完對于公共區(qū)域內(nèi)的一系列程序,向T1返還優(yōu)先級。這時T1搶占了T3的資源開始執(zhí)行

t7時刻:T1執(zhí)行完畢,換T2執(zhí)行






轉(zhuǎn)載于:https://www.cnblogs.com/flowerdrops/p/8717872.html

總結(jié)

以上是生活随笔為你收集整理的通过1997年拓荒者号飞行器事件理解优先级反转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。