您何時(shí)需要實(shí)時(shí)操作系統?
首先,我們必須考慮任務(wù)同步如何能造成阻塞,而阻塞反過(guò)來(lái)又如何導致優(yōu)先級反轉。我們假設有任務(wù) 1 和任務(wù) 2 兩個(gè)任務(wù)正在運行,其中任務(wù) 1 具有較高的優(yōu)先級。如果任務(wù) 1 準備執行,但必須等待任務(wù) 2 完成運行,就出現阻塞的狀況。同步化也會(huì )導致這種阻塞;例如,任務(wù) 1 和任務(wù) 2 共享由鎖或信號量控制的資源,任務(wù) 1 等待任務(wù) 2 對資源進(jìn)行解鎖?;蛘?,當任務(wù) 1 請求目前正由任務(wù) 2 使用的服務(wù)時(shí),也會(huì )出現阻塞狀況。
本文引用地址:http://dyxdggzs.com/article/140324.htm阻塞允許任務(wù) 2 運行,直到任務(wù) 1 等待的條件出現為止(例如,任務(wù) 2 對兩個(gè)任務(wù)共享的資源解鎖)。此時(shí),任務(wù) 1 可以執行。任務(wù) 1 須等待的總時(shí)間就是阻塞因數。如果任務(wù) 1 滿(mǎn)足一定的時(shí)間限制,該因數不會(huì )隨任何參數變化,如線(xiàn)程數或系統內的輸入。換句話(huà)說(shuō),必須限制阻塞因數。
現在,我們引入第三個(gè)任務(wù)(任務(wù) 3)——其優(yōu)先級比任務(wù) 2 的高但比任務(wù) 1 的低(參見(jiàn)圖 1)。當任務(wù) 2 正在運行時(shí),任務(wù) 3 準備運行,它會(huì )搶占任務(wù) 2,而任務(wù) 2 在任務(wù) 3 阻塞或完成前都無(wú)法運行。當然,這樣會(huì )增加任務(wù) 1 的阻塞因數;也就是說(shuō),它會(huì )進(jìn)一步延遲任務(wù) 1 的運行。搶占導致的總延遲就是優(yōu)先級反轉?! ?/p>

圖 1. 當任務(wù) 3 搶占任務(wù) 2 時(shí),任務(wù) 1 等待任務(wù) 2 完成運行。這進(jìn)一步延遲了任務(wù) 1 的運行?! ?/center>

圖 2. 任務(wù) 2 繼承了任務(wù) 1 的優(yōu)先級,因而阻止了任務(wù) 3 搶占任務(wù) 2。
任務(wù) 3 不再延遲任務(wù) 1 的運行。
實(shí)際上,可以有多個(gè)任務(wù)以這種方式搶占任務(wù) 2,從而導致連續阻塞的結果。在這種情況下,任務(wù) 2 可能被無(wú)限期地搶占,產(chǎn)生無(wú)限期的優(yōu)先級反轉,導致任務(wù) 1 無(wú)法滿(mǎn)足其最后期限。
這時(shí)優(yōu)先級繼承就會(huì )發(fā)揮作用。如果我們回到上述假設中,在同步期內使任務(wù) 2 以任務(wù) 1 的優(yōu)先級運行,那么任務(wù) 3 就無(wú)法搶占任務(wù) 2,這樣就能避免優(yōu)先級反轉的產(chǎn)生(參見(jiàn)圖 2)。
分區調度程序
保證資源的可用性對許多系統都至關(guān)重要。如果某個(gè)關(guān)鍵子系統(如 CPU 周期)丟失,用戶(hù)就無(wú)法獲取該子系統提供的服務(wù)。例如,在拒絕服務(wù) (DoS) 攻擊中,惡意用戶(hù)會(huì )利用需要優(yōu)先級高的進(jìn)程處理的請求攻擊系統。該進(jìn)程會(huì )使 CPU 過(guò)載并導致其他進(jìn)程的 CPU 周期匱乏,從而使用戶(hù)無(wú)法使用系統。
安全漏洞并非是導致進(jìn)程匱乏的唯一原因。在許多情況下,增加系統的軟件功能都會(huì )導致系統“瀕臨危險邊緣”,導致現有應用程序的 CPU 時(shí)間匱乏。及時(shí)運行的應用程序或服務(wù)不再按預期或要求的那樣迅速響應。根據以往經(jīng)驗,解決這一問(wèn)題的唯一途徑是更新硬件或重新編碼(重新設計軟件),但這兩種方法都不盡如人意。
為解決這些問(wèn)題,系統設計人員需要一種可通過(guò)硬件或軟件執行 CPU 預算的分區計劃,以阻止進(jìn)程或線(xiàn)程獨占其他進(jìn)程或線(xiàn)程所需的CPU 周期。因為實(shí)時(shí)操作系統已經(jīng)提供了對 CPU、內存和其他計算資源的集中訪(fǎng)問(wèn),所以它是執行 CPU 分區預算的最佳選擇。
某些實(shí)時(shí)操作系統提供了固定分區調度算法。系統設計人員能利用這種調度算法對任務(wù)進(jìn)行分組或分區,然后為每個(gè)分區分配一定比例的 CPU 時(shí)間。利用這種方法,任何既定分區內的任務(wù)消耗的 CPU 時(shí)間都不會(huì )超過(guò)該分區靜態(tài)確定的比例。例如,我們假設為分區分配了 30% 的 CPU。如果該分區內的進(jìn)程隨后成為拒絕服務(wù)攻擊的目標,它會(huì )消耗不超過(guò) 30% 的 CPU 時(shí)間。這種分配限制確保了其他進(jìn)程保持各自的可用性;例如,它能保證可訪(fǎng)問(wèn)的用戶(hù)界面(如遠程終端)。因此,操作人員能訪(fǎng)問(wèn)系統并解決問(wèn)題——無(wú)需按動(dòng)復位開(kāi)關(guān)。
但是,這種方法也存在問(wèn)題。由于調度算法是固定的,因此一個(gè)分區無(wú)法使用分配到另一個(gè)分區的 CPU 周期,即使這些分區未使用其分配的周期。這種方法會(huì )浪費 CPU 周期并阻止系統處理高峰需求。因此,系統設計人員必須使用更昂貴的處理器應對運行緩慢的系統,或限制系統能支持的功能數量。
評論