您何時需要實時操作系統?
自適應分區
本文引用地址:http://www.j9360.com/article/140324.htm圖 3. 自適應分區可阻止優先級高的任務消耗超過其分配的規定比例的 CPU,除非系統包含未使用的 CPU 周期。例如,任務 A 和任務 D 可在分配至分區 3 的時間內運行,因為任務 E 和任務 F 不需要剩余的 CPU 周期預算。
另一種被稱作自適應分區的方法提供了更靈活的動態調度算法,從而有效克服了靜態分區的缺陷。與靜態分區一樣,自適應分區允許系統設計人員為單獨進程或一組進程預留 CPU 周期。因此,系統設計人員能保證一個子系統或分區上的負載不會影響其他子系統的可用性。而且,與靜態分區不同的是,自適應分區還能將空閑分區中的 CPU 周期以動態方式重新分配到可受益于額外處理時間的分區——只有當 CPU 滿載時,分區預算才會執行。因此,系統就能處理高峰需求并使利用率達到 100%,同時又能繼續享受資源保證帶來的收益。
同樣重要的是,自適應分區還能直接應用于先有系統,而無需重新設計代碼或修改代碼。例如,在 QNX® Neutrino® 實時操作系統中,系統設計人員只需啟動分區內已有的基于 POSIX 應用程序,實時操作系統的調度程序就會確保每個分區都會收到分配的預算。在每個分區內,會繼續根據基于優先級的搶占式調度算法對每項任務進行調度——應用程序不必更改其調度運行。此外,系統設計人員還能以動態方式重新配置分區,以精確調節系統實現最佳性能?! ?/p>

圖 3. 自適應分區可阻止優先級高的任務消耗超過其分配的規定比例的 CPU,
除非系統包含未使用的 CPU 周期。例如,任務 A 和任務 D 可在分配至分區
3 的時間內運行,因為任務 E 和任務 F 不需要剩余的 CPU 周期預算。
“組合”內核
通用操作系統(包括 Linux、Windows 和各種類型的 Unix 系統)通常都缺少我們目前介紹的實時機制。但供應商已開發出許多實時擴展組件和補丁,試圖填補這一空白。例如,有一種雙內核方法,其中的通用操作系統能以任務的形式在專用實時內核上運行(參見圖 4)。任何需要確定性調度的任務都會在該內核中運行,但其優先級要高于通用操作系統的優先級。 因此,只要這些任務需要運行,它們就能搶占通用操作系統,而且只有在其工作完成后,才會向通用操作系統釋放 CPU。
遺憾的是,實時內核中運行的任務只能有限地利用通用操作系統中現有的系統服務,如文件系統、網絡服務等。實際上,如果實時任務向通用操作系統請求任何服務,它都會面臨同樣的搶占問題,這會阻止通用操作系統的進程以確定方式運行。因此,必須針對實時內核創建新的驅動程序和系統服務,即使通用操作系統中已存在相同的服務。但是,多數通用操作系統為正常的非實時進程提供的受內存管理單元 (MMU) 保護的可靠環境卻無法惠及在實時內核中運行的任務。相反,它們會在無保護的內核空間運行。因此,任何含有公共編碼錯誤(如損壞的 C 指針)的實時任務都會輕易導致內核出現嚴重故障。這的確是一個問題,因為需要實時功能的大部分系統同樣需要極高的可靠性。
雙內核方法的不同實現使用不同的應用程序接口 (API) 使問題進一步復雜。在多數情況下,為通用操作系統編寫的服務無法輕易移植到實時內核中,而且針對一個供應商的實時擴展組件編寫的任務未必能在另一個供應商的實時擴展組件上運行。

圖 4. 在常見的雙內核實現中,通用操作系統會作為優先級最低的任務在單獨的實時內核中運行。
這種解決方案指出了使通用操作系統支持實時運行的實際困難和復雜性。但這并非是關于實時操作系統和通用操作系統孰優孰劣的問題。通用操作系統(如 Linux、Windows 和各種 Unix 系統)都能以臺式機或服務器操作系統的形式正常運行。但是,當進入不符合其設計用途的確定運行環境中(如車載遠程信息處理裝置、醫療器械、實時控制系統和連續媒體應用)時,它們就會凸顯不足。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
評論