优先级反转解决方案
1. 優先級反轉(Priority Inversion)
??? 由于多進程共享資源,具有最高優先權的進程被低優先級進程阻塞,反而使具有中優先級的進程先于高優先級的進程執行,導致系統的崩潰。這就是所謂的優先級反轉(Priority Inversion)。
2. 產生原因
????? 其實,優先級反轉是在高優級(假設為A)的任務要訪問一個被低優先級任務(假設為C)占有的資源時,被阻塞.而此時又有優先級高于占有資源的任務(C)而低于被阻塞的任務(A)的優先級的任務(假設為B)時,于是,占有資源的任務就被掛起(占有的資源仍為它占有),因為占有資源的任務優先級很低,所以,它可能一直被另外的任務掛起.而它占有的資源也就一直不能釋放,這樣,引起任務A一直沒辦法執行.而比它優先低的任務卻可以執行.??
????? 所以,一個解決辦法就是提高占有資源任務的優先級,讓它正常執行,然后釋放資源,以讓任務A能正常獲取資源而得以執行.
3. 解決方案 ( 優先級繼承 / 優先級天花板 )
?? 目前解決優先級反轉有許多種方法。其中普遍使用的有2種方法:一種被稱作優先級繼承(priority inheritance);另一種被稱作優先級極限(priority ceilings)。
? A. 優先級繼承(priority inheritance)
????? 優先級繼承是指將低優先級任務的優先級提升到等待它所占有的資源的最高優先級任務的優先級.當高優先級任務由于等待資源而被阻塞時,此時資源的擁有者的優先級將會自動被提升.??
???
? B. 優先級天花板(priority ceilings)
????? 優先級天花板是指將申請某資源的任務的優先級提升到可能訪問該資源的所有任務中最高優先級任務的優先級.(這個優先級稱為該資源的優先級天花板)??
???
? A 和B的區別:
???
? 優先級繼承,只有當占有資源的低優先級的任務被阻塞時,才會提高占有資源任務的優先級,而優先級天花板,不論是否發生阻塞,都提升.??
總結
- 上一篇: 5. 多线程程序如何让 IO 和“计算”
- 下一篇: 几种页面置换算法