事件機(jī)制用于保證不同擴(kuò)展任務(wù)之間的同步。該機(jī)制含義是,一個(gè)處于等待狀態(tài)的擴(kuò)展進(jìn)程,只有當(dāng)它所等待的事件至少有一個(gè)發(fā)生,才能進(jìn)入就緒態(tài),并且事件的發(fā)生會(huì)以信號(hào)的方式傳給該進(jìn)程。只有擴(kuò)展任務(wù),才具有事件。
資源管理
具有不同優(yōu)先級(jí)的多任務(wù)訪問共享資源需要使用資源管理機(jī)制進(jìn)行協(xié)調(diào)。這些資源可以是一段臨界區(qū)代碼、調(diào)度程序、共享內(nèi)存或是數(shù)據(jù)結(jié)構(gòu),也可以是共享硬件設(shè)備。系統(tǒng)在處理多個(gè)進(jìn)程對(duì)共享資源的互斥訪問時(shí),采用信號(hào)量對(duì)臨界區(qū)數(shù)據(jù)或資源加鎖,但是這樣可能會(huì)導(dǎo)致優(yōu)先級(jí)反轉(zhuǎn)。為了避免這種情況出現(xiàn),OSEK采用了優(yōu)先級(jí)最高限度協(xié)議(PCP),即當(dāng)一個(gè)進(jìn)程占用了一個(gè)資源后,該進(jìn)程的優(yōu)先級(jí)會(huì)臨時(shí)升高為該資源優(yōu)先級(jí)。當(dāng)該任務(wù)釋放了資源后,其優(yōu)先級(jí)回到要求訪問資源前的優(yōu)先級(jí)。使用該協(xié)議同時(shí)也解決了死鎖的問題。
報(bào)警器
報(bào)警器是OSEK為處理循環(huán)事件提供的服務(wù)機(jī)制,警報(bào)或者基于系統(tǒng)時(shí)鐘,或者基于其他的某種計(jì)數(shù)器。當(dāng)計(jì)數(shù)器到達(dá)警報(bào)設(shè)置值時(shí)被觸發(fā),此時(shí)可以激活進(jìn)程也可以為某進(jìn)程設(shè)置事件,或者執(zhí)行一個(gè)警報(bào)回調(diào)程序。
消息處理
任務(wù)之間是通過消息實(shí)現(xiàn)通信的,消息是應(yīng)用數(shù)據(jù)的容器,只有一個(gè)發(fā)送者,但是可以有多個(gè)接受者。OSEK規(guī)范將消息分為可排隊(duì)和不可排隊(duì)的。前者是靜態(tài)長度消息,內(nèi)部數(shù)據(jù)被組織成FIFO隊(duì)列,能被接受服務(wù)例程移走;不可排隊(duì)消息是不斷被刷新的消息,不能被服務(wù)例程移走。
錯(cuò)誤處理
OSEKOS提供了系統(tǒng)專用的鉤子程序,以便在操作系統(tǒng)內(nèi)部操作時(shí)執(zhí)行用戶定義的函數(shù)。鉤子程序可用于:系統(tǒng)啟動(dòng),相應(yīng)鉤子程序在操作系統(tǒng)啟動(dòng)后,進(jìn)入調(diào)度程序之前執(zhí)行;系統(tǒng)關(guān)閉,相應(yīng)鉤子程序在應(yīng)用或操作系統(tǒng)(此時(shí)發(fā)生嚴(yán)重錯(cuò)誤)請(qǐng)求系統(tǒng)停止運(yùn)行時(shí)執(zhí)行;跟蹤、調(diào)試應(yīng)用以及現(xiàn)場切換時(shí)調(diào)用用戶定義的擴(kuò)展程序;錯(cuò)誤處理。
基于μC/OS-Ⅱ的OSEKOS設(shè)計(jì)
OSEKOS設(shè)計(jì)理念
根據(jù)OSEK規(guī)范和μC/OS-Ⅱ的內(nèi)核要求,CC1和ECC1這2個(gè)符合級(jí)別都只允許一個(gè)優(yōu)先級(jí)有一個(gè)進(jìn)程,因此可以將優(yōu)先級(jí)從0到N-1分配給N個(gè)進(jìn)程,使每個(gè)進(jìn)程分配到的優(yōu)先級(jí)不同,N是系統(tǒng)中的進(jìn)程數(shù)量,這樣可以使修改后的μC/OS-Ⅱ內(nèi)核滿足ECC1類模式。由于BCC2和ECC2這2個(gè)符合級(jí)別可以允許每個(gè)優(yōu)先級(jí)有多個(gè)進(jìn)程,因此要使用復(fù)雜的調(diào)度策略來追蹤各個(gè)進(jìn)程。
設(shè)計(jì)的OSEKOS可以采用μC/OS-Ⅱ的調(diào)度結(jié)構(gòu)——就緒表,使用簡單的占先式的調(diào)度策略,將每個(gè)進(jìn)程的就緒態(tài)標(biāo)志都放入就緒表中,然后從其中找到優(yōu)先級(jí)最高的就緒態(tài)進(jìn)程執(zhí)行,實(shí)現(xiàn)一個(gè)基于優(yōu)先級(jí)的可剝奪型的實(shí)時(shí)內(nèi)核。這樣不僅可以提高系統(tǒng)的實(shí)時(shí)性,而且可以降低操作系統(tǒng)的CPU負(fù)荷。對(duì)于BCC2和 ECC2這2個(gè)符合級(jí)別而言,可以在基于優(yōu)先級(jí)的占先式調(diào)度策略基礎(chǔ)上添加時(shí)間片輪換調(diào)度算法來處理優(yōu)先級(jí)相同的2個(gè)任務(wù)之間的調(diào)度;也可以為每個(gè)優(yōu)先級(jí)增加一個(gè)FIFO隊(duì)列,先以任務(wù)優(yōu)先級(jí)為檢索,然后選擇該進(jìn)程隊(duì)列中位于對(duì)首的進(jìn)程運(yùn)行。但是這樣會(huì)犧牲一定的實(shí)時(shí)性,并且加大CPU的負(fù)荷,占用更多的 RAM。
為了提高OSEKOS的可移植性和利于OSEKOS的配置,按照μC/OS-Ⅱ的內(nèi)核結(jié)構(gòu)將其分為3部分:硬件無關(guān)部分、硬件相關(guān)部分和應(yīng)用相關(guān)部分。這樣可以使其在不同的硬件之間移植時(shí)更加的方便,將與應(yīng)用相關(guān)部分放入配置文件內(nèi),便于用戶使用。
μC/OS-Ⅱ在處理多個(gè)進(jìn)程對(duì)共享資源的互斥訪問時(shí),主要是采用開關(guān)中斷與信號(hào)量來對(duì)臨界區(qū)數(shù)據(jù)或資源加鎖,使用互斥型信號(hào)量管理來避免優(yōu)先級(jí)反轉(zhuǎn),通過允許用戶在申請(qǐng)信號(hào)量時(shí)定義等待超時(shí)化解死鎖問題。OSEKOS是通過采用優(yōu)先級(jí)最高限度協(xié)議(PCP)來避免優(yōu)先級(jí)反轉(zhuǎn)和死鎖問題??梢酝ㄟ^在系統(tǒng)生成期間,靜態(tài)分配每一資源的最高限度優(yōu)先級(jí),使設(shè)計(jì)的OS2EKOS執(zhí)行PCP協(xié)議,達(dá)到兼容OSEK規(guī)范的目的。
根據(jù)OSEK規(guī)定的2類中斷,針對(duì)具體的處理器平臺(tái),實(shí)現(xiàn)中斷管理的標(biāo)準(zhǔn)API,并且根據(jù)μC/OS-Ⅱ提供非OSEK標(biāo)準(zhǔn)的API:開/關(guān)中斷。由于是基于ECC1類模式來實(shí)現(xiàn)OSEKOS,所以支持OSEK規(guī)范定義的事件機(jī)制,可用于實(shí)現(xiàn)任務(wù)之間的同步協(xié)調(diào)。根據(jù)μC/OS-Ⅱ,可以支持的事件種類有信號(hào)量、互斥型信號(hào)量、郵箱和消息隊(duì)列。由μC/OS-Ⅱ提供的時(shí)間管理和定時(shí)中斷功能,實(shí)現(xiàn)OSEKOS中要求的警報(bào)器管理,以進(jìn)一步提高操作系統(tǒng)的實(shí)時(shí)性和安全性。在μC/OS-Ⅱ中,定義了一系列與OSEKOS規(guī)范要求類似的鉤子程序,用于實(shí)現(xiàn)用戶自己定義的函數(shù)。
OSEKOS基本結(jié)構(gòu)的組成
由于OSEKOS中的標(biāo)準(zhǔn)應(yīng)用程序接口(API)定義在操作系統(tǒng)的核心空間,根據(jù)以上設(shè)計(jì)理念可以將操作系統(tǒng)按功能分為進(jìn)程管理和調(diào)度、資源管理、警報(bào)與計(jì)數(shù)器管理、事件管理和中斷管理,其結(jié)構(gòu)組成如圖1所示。其中進(jìn)程管理與調(diào)度是整個(gè)操作系統(tǒng)的核心,其他的管理機(jī)制為它提供不同的服務(wù)支持。

?
圖1 OSEKOS結(jié)構(gòu)組成圖
每個(gè)進(jìn)程都通過一個(gè)進(jìn)程控制塊(TCB)來管理,在進(jìn)程管理模塊中,實(shí)現(xiàn)OSEK標(biāo)準(zhǔn)API:激活進(jìn)程、終止進(jìn)程、連接進(jìn)程、調(diào)度、捕獲當(dāng)前運(yùn)行進(jìn)程ID 和獲得進(jìn)程狀態(tài)。資源管理模塊實(shí)現(xiàn)OSEK標(biāo)準(zhǔn)API:獲得資源、釋放資源。計(jì)數(shù)器管理沒有標(biāo)準(zhǔn)API,警報(bào)管理結(jié)構(gòu)由警報(bào)和警報(bào)行為組成。其標(biāo)準(zhǔn) API:獲得警報(bào)信息、獲得警報(bào)到期所需時(shí)間、設(shè)置相對(duì)警報(bào)、設(shè)置絕對(duì)警報(bào)和消除警報(bào)。事件管理模塊實(shí)現(xiàn)的OSEK標(biāo)準(zhǔn)API:等待事件、設(shè)置事件、消除事件和獲得進(jìn)程的時(shí)間狀態(tài)。實(shí)現(xiàn)中斷管理的標(biāo)準(zhǔn)API:開/關(guān)所有中斷和開/關(guān)第二類中斷。
結(jié)束語
根據(jù)OSEKOS規(guī)范和μC/OS-Ⅱ內(nèi)核實(shí)現(xiàn)的不同技術(shù)特點(diǎn),提出OSEKOS的一些設(shè)計(jì)思想,并且設(shè)計(jì)出OSEKOS的基本結(jié)構(gòu)組成。 OSEK/VDX體系的建立給國際汽車工業(yè)帶來深遠(yuǎn)的影響,采用基于OSEK/VDX規(guī)范的RTOS進(jìn)行開發(fā)能節(jié)省開發(fā)時(shí)間,降低成本,提高軟件質(zhì)量和模塊的可移植性,而且需要的資源少。因此,研究基于OSEK/VDX規(guī)范的操作系統(tǒng)具有重要的意義。
評(píng)論