您何時需要實時操作系統(tǒng)?
自適應(yīng)分區(qū)
本文引用地址:http://m.butianyuan.cn/article/140324.htm圖 3. 自適應(yīng)分區(qū)可阻止優(yōu)先級高的任務(wù)消耗超過其分配的規(guī)定比例的 CPU,除非系統(tǒng)包含未使用的 CPU 周期。例如,任務(wù) A 和任務(wù) D 可在分配至分區(qū) 3 的時間內(nèi)運行,因為任務(wù) E 和任務(wù) F 不需要剩余的 CPU 周期預(yù)算。
另一種被稱作自適應(yīng)分區(qū)的方法提供了更靈活的動態(tài)調(diào)度算法,從而有效克服了靜態(tài)分區(qū)的缺陷。與靜態(tài)分區(qū)一樣,自適應(yīng)分區(qū)允許系統(tǒng)設(shè)計人員為單獨進(jìn)程或一組進(jìn)程預(yù)留 CPU 周期。因此,系統(tǒng)設(shè)計人員能保證一個子系統(tǒng)或分區(qū)上的負(fù)載不會影響其他子系統(tǒng)的可用性。而且,與靜態(tài)分區(qū)不同的是,自適應(yīng)分區(qū)還能將空閑分區(qū)中的 CPU 周期以動態(tài)方式重新分配到可受益于額外處理時間的分區(qū)——只有當(dāng) CPU 滿載時,分區(qū)預(yù)算才會執(zhí)行。因此,系統(tǒng)就能處理高峰需求并使利用率達(dá)到 100%,同時又能繼續(xù)享受資源保證帶來的收益。
同樣重要的是,自適應(yīng)分區(qū)還能直接應(yīng)用于先有系統(tǒng),而無需重新設(shè)計代碼或修改代碼。例如,在 QNX® Neutrino® 實時操作系統(tǒng)中,系統(tǒng)設(shè)計人員只需啟動分區(qū)內(nèi)已有的基于 POSIX 應(yīng)用程序,實時操作系統(tǒng)的調(diào)度程序就會確保每個分區(qū)都會收到分配的預(yù)算。在每個分區(qū)內(nèi),會繼續(xù)根據(jù)基于優(yōu)先級的搶占式調(diào)度算法對每項任務(wù)進(jìn)行調(diào)度——應(yīng)用程序不必更改其調(diào)度運行。此外,系統(tǒng)設(shè)計人員還能以動態(tài)方式重新配置分區(qū),以精確調(diào)節(jié)系統(tǒng)實現(xiàn)最佳性能。
圖 3. 自適應(yīng)分區(qū)可阻止優(yōu)先級高的任務(wù)消耗超過其分配的規(guī)定比例的 CPU,
除非系統(tǒng)包含未使用的 CPU 周期。例如,任務(wù) A 和任務(wù) D 可在分配至分區(qū)
3 的時間內(nèi)運行,因為任務(wù) E 和任務(wù) F 不需要剩余的 CPU 周期預(yù)算。
“組合”內(nèi)核
通用操作系統(tǒng)(包括 Linux、Windows 和各種類型的 Unix 系統(tǒng))通常都缺少我們目前介紹的實時機(jī)制。但供應(yīng)商已開發(fā)出許多實時擴(kuò)展組件和補丁,試圖填補這一空白。例如,有一種雙內(nèi)核方法,其中的通用操作系統(tǒng)能以任務(wù)的形式在專用實時內(nèi)核上運行(參見圖 4)。任何需要確定性調(diào)度的任務(wù)都會在該內(nèi)核中運行,但其優(yōu)先級要高于通用操作系統(tǒng)的優(yōu)先級。 因此,只要這些任務(wù)需要運行,它們就能搶占通用操作系統(tǒng),而且只有在其工作完成后,才會向通用操作系統(tǒng)釋放 CPU。
遺憾的是,實時內(nèi)核中運行的任務(wù)只能有限地利用通用操作系統(tǒng)中現(xiàn)有的系統(tǒng)服務(wù),如文件系統(tǒng)、網(wǎng)絡(luò)服務(wù)等。實際上,如果實時任務(wù)向通用操作系統(tǒng)請求任何服務(wù),它都會面臨同樣的搶占問題,這會阻止通用操作系統(tǒng)的進(jìn)程以確定方式運行。因此,必須針對實時內(nèi)核創(chuàng)建新的驅(qū)動程序和系統(tǒng)服務(wù),即使通用操作系統(tǒng)中已存在相同的服務(wù)。但是,多數(shù)通用操作系統(tǒng)為正常的非實時進(jìn)程提供的受內(nèi)存管理單元 (MMU) 保護(hù)的可靠環(huán)境卻無法惠及在實時內(nèi)核中運行的任務(wù)。相反,它們會在無保護(hù)的內(nèi)核空間運行。因此,任何含有公共編碼錯誤(如損壞的 C 指針)的實時任務(wù)都會輕易導(dǎo)致內(nèi)核出現(xiàn)嚴(yán)重故障。這的確是一個問題,因為需要實時功能的大部分系統(tǒng)同樣需要極高的可靠性。
雙內(nèi)核方法的不同實現(xiàn)使用不同的應(yīng)用程序接口 (API) 使問題進(jìn)一步復(fù)雜。在多數(shù)情況下,為通用操作系統(tǒng)編寫的服務(wù)無法輕易移植到實時內(nèi)核中,而且針對一個供應(yīng)商的實時擴(kuò)展組件編寫的任務(wù)未必能在另一個供應(yīng)商的實時擴(kuò)展組件上運行?! ?/p>
圖 4. 在常見的雙內(nèi)核實現(xiàn)中,通用操作系統(tǒng)會作為優(yōu)先級最低的任務(wù)在單獨的實時內(nèi)核中運行。
這種解決方案指出了使通用操作系統(tǒng)支持實時運行的實際困難和復(fù)雜性。但這并非是關(guān)于實時操作系統(tǒng)和通用操作系統(tǒng)孰優(yōu)孰劣的問題。通用操作系統(tǒng)(如 Linux、Windows 和各種 Unix 系統(tǒng))都能以臺式機(jī)或服務(wù)器操作系統(tǒng)的形式正常運行。但是,當(dāng)進(jìn)入不符合其設(shè)計用途的確定運行環(huán)境中(如車載遠(yuǎn)程信息處理裝置、醫(yī)療器械、實時控制系統(tǒng)和連續(xù)媒體應(yīng)用)時,它們就會凸顯不足。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論