作者:李智敏,華清遠見嵌入式學(xué)院上海中心講師。
實時系統(tǒng)指系統(tǒng)的計算正確性不僅取決于計算的邏輯正確性,還取決于產(chǎn)生結(jié)果的時間。如果未滿足系統(tǒng)的時間約束,則認為系統(tǒng)失效。換句話說,系統(tǒng)面對變化的負載(從最小到最壞的情況)時必須確定性地保證滿足時間要求。
注意,實時性與速度關(guān)系不大:它與可預(yù)見性有關(guān)。例如,使用快速的現(xiàn)代處理器時,Linux 可以提供 20 μ 微秒的典型中斷響應(yīng),但有時候響應(yīng)會變得很長。這是一個基本的問題:并不是 Linux 不夠快或效率不夠高,而是因為它不能提供確定性。
當中斷到達時(event),CPU 發(fā)生中斷并轉(zhuǎn)入中斷處理。執(zhí)行一些工作以確定發(fā)生了什么事件,然后執(zhí)行少量工作分配必需的任務(wù)以處理此事件(上下文切換)。中斷到達與分發(fā)必需任務(wù)之間的時間(假設(shè)分配的是優(yōu)先級最高的任務(wù))稱為響應(yīng)時間。對于實時性要求,響應(yīng)時間應(yīng)是確定的并應(yīng)當在已知的最壞情況的時間內(nèi)完成。因此,對于某些高安全性的場合,操作系統(tǒng)應(yīng)快速地分配任務(wù),并且不允許其他非實時處理進行干擾。晚一秒鐘響應(yīng)比沒有響應(yīng)的情況更糟糕。
除為中斷處理提供確定性外,實時處理也需要支持周期性間隔的任務(wù)調(diào)度。大量控制系統(tǒng)要求周期性采樣與處理。某個特定任務(wù)必須按照固定的周期(p)執(zhí)行,從而確保系統(tǒng)的穩(wěn)定性。在某些控制場合下,為了保持控制系統(tǒng)的正常工作,傳感器的采樣與控制必須按照一定的周期間隔。這意味著必須搶占其他處理,以便特定任務(wù)能按照期望的周期執(zhí)行。
能夠在指定的期限完成實時任務(wù)(即便在最壞的處理負載下也能如此)的操作系統(tǒng)稱為硬實時 系統(tǒng)。但并不是任何情況下都需要硬實時支持。如果操作系統(tǒng)在平均情況下能支持任務(wù)的執(zhí)行期限,則稱它為軟實時 系統(tǒng)。硬實時系統(tǒng)指超過截止期限后將造成災(zāi)難性后果(例如展開氣囊過晚或制動壓力產(chǎn)生的滑行距離過長)的系統(tǒng)。軟實時系統(tǒng)超過截止期限后并不會造成系統(tǒng)整體失?。ㄈ鐏G失視頻中的一幀)。
Linux 架構(gòu)支持通過以下幾種方式實現(xiàn)硬實時。
1. 瘦內(nèi)核方法
瘦內(nèi)核(或微內(nèi)核)方法使用了第二個內(nèi)核作為硬件與 Linux 內(nèi)核間的抽象接口。非實時 Linux 內(nèi)核在后臺運行,作為瘦內(nèi)核的一項低優(yōu)先級任務(wù)托管全部非實時任務(wù)。實時任務(wù)直接在瘦內(nèi)核上運行。
瘦內(nèi)核主要用于(除了托管實時任務(wù)外)中斷管理。瘦內(nèi)核截取中斷以確保非實時內(nèi)核無法搶占瘦內(nèi)核的運行。這允許瘦內(nèi)核提供硬實時支持。
雖然瘦內(nèi)核方法有自己的優(yōu)勢(硬實時支持與標準 Linux 內(nèi)核共存),但這種方法也有缺點。實時任務(wù)和非實時任務(wù)是獨立的,這造成了調(diào)試困難。而且,非實時任務(wù)并未得到 Linux 平臺的完全支持(瘦內(nèi)核執(zhí)行稱為瘦 的一個原因)。
使用這種方法的例子有 RTLinux。
2. 超微內(nèi)核方法
瘦內(nèi)核方法依賴于包含任務(wù)管理的最小內(nèi)核,而超微內(nèi)核法對內(nèi)核進行更進一步的縮減。通過這種方式,它不像是一個內(nèi)核而更像是一個硬件抽象層(HAL)。超微內(nèi)核為運行于更高級別的多個操作系統(tǒng)提供了硬件資源共享。
這種方法和運行多個操作系統(tǒng)的虛擬化方法有一些相似之處。使用這種方法的情況下,超微內(nèi)核在實時和非實時內(nèi)核中對硬件進行抽象。這與 hypervisor 從客戶(guest)操作系統(tǒng)對裸機進行抽象的方式很相似。
3. 資源內(nèi)核法
這種方法為內(nèi)核增加一個模塊,為各種資源提供預(yù)留(reservation)。這種機制保證了對時分復(fù)用(time-multiplexed)系統(tǒng)資源的訪問(CPU、網(wǎng)絡(luò)或磁盤帶寬)。這些資源擁有多個預(yù)留參數(shù),如循環(huán)周期、需要的處理時間(也就是完成處理所需的時間),以及截止時間。
資源內(nèi)核提供了一組應(yīng)用程序編程接口(API),允許任務(wù)請求這些預(yù)留資源。然后資源內(nèi)核可以合并這些請求,使用任務(wù)定義的約束定義一個調(diào)度,從而提供確定的訪問(如果無法提供確定性則返回錯誤)。通過調(diào)度算法,內(nèi)核可以處理動態(tài)的調(diào)度負載。
資源內(nèi)核法實現(xiàn)的一個示例是 CMU 公司的 Linux/RK,它把可移植的資源內(nèi)核集成到 Linux 中作為一個可加載模塊。這種實現(xiàn)演化成商用的 TimeSys Linux/RT 產(chǎn)品。
“本文由華清遠見http://www.embedu.org/index.htm提供”
華清遠見