提高實(shí)時(shí)操作系統的實(shí)時(shí)性能和可靠性策略
在設計工業(yè)控制系統或醫療設備時(shí),大部分工程師和系統設計工程師會(huì )認為采用RTOS是必需的。然而,網(wǎng)際路由器、車(chē)載娛樂(lè )系統和多媒體設備等普通應用還需要采用RTOS嗎?像Linux或Windows這樣的通用操作系統是否就能勝任呢?通常,這些產(chǎn)品需要采用RTOS,但是這個(gè)問(wèn)題經(jīng)常直到設計階段的后期才能意識到。
RTOS對于很多嵌入式系統來(lái)說(shuō)不但是有益的,而且也是必要的,熟悉到這一點(diǎn)很重要。例如,一個(gè)播放如MPEG格式電影的設備,假如依靠軟件來(lái)實(shí)現其整個(gè)內容傳輸,可能會(huì )出現用戶(hù)難以接受的高丟幀率。然而,通過(guò)使用RTOS,系統設計工程師能夠準確地控制軟件過(guò)程的執行順序,從而保證按照給定的媒體速率進(jìn)行播放。上述大部分情況適用于用戶(hù)希望對輸入做出立即響應的系統。通過(guò)RTOS,開(kāi)發(fā)人員能夠保證由用戶(hù)的操作總能得到及時(shí)的響應,除非一個(gè)更重要的操作必須首先執行。
總之,一個(gè)好的RTOS支持開(kāi)發(fā)人員控制系統執行任何任務(wù)或對任何重要事件做出反應的時(shí)間,并且能夠以一種可以猜測并且完全一致的形式滿(mǎn)足任務(wù)執行的最終期限要求。但是,假如RTOS崩潰,這些最終期限就不能被滿(mǎn)足。因此,RTOS必須提供高度的可靠性。非凡是它必須提供在不需要重啟的情況下,從軟件故障中快速并智能恢復的機制。
搶占式調度
在像Linux這樣的通用操作系統中,在對線(xiàn)程和進(jìn)程的CPU占用上采用了“公平”調度策略。這樣的策略能夠提供良好的整體表現,但是不能保證高優(yōu)先級、對時(shí)間要求嚴格的線(xiàn)程將優(yōu)先于低優(yōu)先級的線(xiàn)程執行。事實(shí)上,操作系統有時(shí)甚至會(huì )中斷高優(yōu)先級的線(xiàn)程來(lái)為低優(yōu)先級線(xiàn)程提供CPU時(shí)間。其結果可能造成對時(shí)間要求嚴格的線(xiàn)程很輕易地錯過(guò)它們的最終期限,甚至在一個(gè)高速的高端處理器上運行時(shí)也會(huì )出現這種情況。
而在RTOS中,線(xiàn)程按照其優(yōu)先級順序執行。假如一個(gè)高優(yōu)先級的線(xiàn)程預備運行時(shí),它將在一個(gè)短的、有限時(shí)間間隔內從任何可能正在運行的低優(yōu)先級進(jìn)程接管CPU。另外,高優(yōu)先級的線(xiàn)程能夠不被中斷地運行,直到它已經(jīng)完成了需要做的事情-當然是在不被更高優(yōu)先級進(jìn)程搶占的前提下。這種方法就是搶占式調度,保證了高優(yōu)先級線(xiàn)程始終滿(mǎn)足其最終期限,而不管有多少其它線(xiàn)程正在競爭CPU時(shí)間。
通過(guò)合理地控制線(xiàn)程優(yōu)先級,開(kāi)發(fā)者能顯著(zhù)地提高很多對用戶(hù)非常重要的應用響應速度。然而,控制優(yōu)先級可能是一把雙刃劍,當使用不當時(shí)它可能會(huì )潛在地導致低優(yōu)先級的進(jìn)程不能得到CPU時(shí)間。保證高優(yōu)先級的進(jìn)程和線(xiàn)程的同時(shí)確保不會(huì )使其它進(jìn)程處于“饑餓”狀態(tài)的關(guān)鍵是要對它們的執行進(jìn)行限制,通過(guò)對執行進(jìn)行調整或在響應加載的過(guò)程中進(jìn)行控制,開(kāi)發(fā)人員能夠限制這些活動(dòng)消耗的CPU時(shí)間比例,并支持低優(yōu)先級進(jìn)程獲得對CPU的共享。
優(yōu)先級控制能夠使很多應用受益,包括像前面提到的媒體播放器。媒體播放器需要實(shí)現正常播放所要求的速率。在這種限制之下,一個(gè)讀線(xiàn)程和一個(gè)顯示線(xiàn)程可以被設計成依靠一個(gè)可編程的定時(shí)器來(lái)喚醒,緩沖或顯示一幀后進(jìn)入睡眠狀態(tài),直到下一個(gè)定時(shí)觸發(fā)。這提供了一種調整機制,支持高于正常用戶(hù)活動(dòng)而又低于關(guān)鍵系統功能的優(yōu)先級設置。換句話(huà)說(shuō),假如沒(méi)有更重要的任務(wù)預備運行,媒體播放將始終以給定的媒體速率執行。
最壞情形
搶占式調度僅在高優(yōu)先級的線(xiàn)程在一個(gè)短的、有限時(shí)間段內搶占低優(yōu)先級線(xiàn)程的情況下有效。否則,系統將不可能猜測要花費多長(cháng)時(shí)間來(lái)執行一個(gè)給定的操作。因此,任何銷(xiāo)售進(jìn)程模式的RTOS的供給商都必須提供針對下面兩種時(shí)間間隔提供最壞情形:線(xiàn)程切換時(shí)間,即當兩個(gè)線(xiàn)程處于同一進(jìn)程的情況下,從執行一個(gè)線(xiàn)程的最后一條指令到執行下一個(gè)被調度線(xiàn)程的第一條指令所經(jīng)過(guò)的時(shí)間;前后關(guān)系切換時(shí)間,其定義同上,但僅針對兩個(gè)線(xiàn)程處于不同進(jìn)程的情況。
可以將線(xiàn)程看作是最小的“執行單元”,而將進(jìn)程看作是一個(gè)或多個(gè)線(xiàn)程的“容器”,進(jìn)程定義了線(xiàn)程將要在其中執行的地址空間。顯然,最壞情形的前后關(guān)系切換時(shí)間將比最壞情形的線(xiàn)程切換時(shí)間要慢,盡管在一個(gè)好的RTOS設計中差別可能是微不足道的。
將所有的線(xiàn)程放在幾個(gè)大的進(jìn)程中將是錯誤的,因為線(xiàn)程提供的切換速度更快。雖然線(xiàn)程能實(shí)現并行處理優(yōu)勢因而適合于某些設計,但將一個(gè)應用分成多個(gè)內存保護的進(jìn)程使得代碼更輕易調試,提供了更好的錯誤隔離和恢復能力,并答應系統進(jìn)行新功能的動(dòng)態(tài)升級。
評論