目錄
什麼是優先順序反轉?
什麼是優先順序繼承?
什麼是優先順序天花板?
高優先順序任務被低優先順序任務阻塞,導致高優先順序任務遲遲得不到排程。但其他中等優先順序的任務卻能搶到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驅動|筆試面試題彙總帖
參考:訊號量優先順序反轉(翻轉)與優先順序繼承
優先順序排程、優先順序反轉、優先順序繼承、優先順序天花板
作業系統 優先順序反轉 優先順序繼承
優先順序反 準確來說,指的是一種現象,並非一項任務排程技術,即高優先順序任務被低優先順序任務阻塞推遲的行為被稱為 優先順序反轉 這是一種不合理的行為方式,如果把這種行為再進一步放大,當高優先順序任務正等待訊號量 此訊號量被乙個低優先順序任務擁有著 的時候,乙個介於兩個任務優先之間的中等優先順序任務開...
優先順序反轉
1.優先順序反轉 priority inversion 由於多程序共享資源,具有最高優先權的程序被低優先順序程序阻塞,反而使具有中優先順序的程序先於高優先順序的程序執行,導致系統的崩潰。這就是所謂的優先順序反轉 priority inversion 2.產生原因 其實,優先順序反轉是在高優級 假設為...
優先順序反轉
實時作業系統中,在訊號量使用過程中,則可能出現優先順序反轉的不合理情況。1.優先順序翻轉出現場景 高優先順序的任務被低優先順序的任務阻塞,導致高優先順序任務得不到排程和執行。但是其他中等優先順序的任務卻能搶占到cpu資源。從現象看好像是中優先順序任務比高優先順序任務具有更高的優先權。當系統高優先順序...