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