基于OSEK/VDX的嵌入式車(chē)用操作系統研究
摘要:為了提供一個(gè)開(kāi)放、自主、實(shí)用的汽車(chē)電子軟件開(kāi)發(fā)平臺,介紹了當前在國際汽車(chē)工業(yè)界日益占據主導地位的汽車(chē)電子開(kāi)放式平臺系統(OSEK/VDX)規范;其中著(zhù)重分析了關(guān)于操作系統內核的定義,并且在免費的嵌入式實(shí)時(shí)操作系統μC/OS-Ⅱ的基礎上,分析兩者技術(shù)特點(diǎn)之間的差異;通過(guò)修改μC/OS-Ⅱ內核的部分功能使之符合OSEK/VDX規范,并提出了車(chē)用實(shí)時(shí)操作系統的設計思想。
關(guān)鍵詞:OSEK/VDX;μC/OS-Ⅱ;嵌入式實(shí)時(shí)操作系統;內核
引言
隨著(zhù)汽車(chē)工業(yè)的飛速發(fā)展,電子技術(shù)在汽車(chē)上的應用比重不斷增加。為了滿(mǎn)足日益復雜的汽車(chē)電子控制軟件的開(kāi)發(fā)需要,實(shí)現應用軟件的可移植性和不同廠(chǎng)商的控制模塊間的可兼容性,1993年德國汽車(chē)工業(yè)界聯(lián)合推出了“汽車(chē)電子的開(kāi)放式系統及接口軟件規范”,即OSEK(open system and the corresponding interfaces for automotive electronics)。1994年法國汽車(chē)工業(yè)界的相似規范VDX(vehicle distributed executive)和OSEK規范合并,從而形成OSEK/VDX規范體系。
此規范主要由4部分組成:操作系統規范(OSEKOS)、通信規范(OSEKCOM)、網(wǎng)絡(luò )管理規范(OSEKNM)和OSEK實(shí)現語(yǔ)言(OSEKOIL)。其中OSEKOS是針對汽車(chē)應用特點(diǎn)而專(zhuān)門(mén)制定的一個(gè)小型RTOS規范,著(zhù)重以下幾個(gè)方面:①可移植性,所有API都是標準化的并且在功能上都有明確的定義;②可擴展性,OSEKOS旨在通用于任何類(lèi)型的 ECU,因此一方面系統要高度的模塊化,另一方面又要能進(jìn)行靈活的配置;③汽車(chē)應用的特定需求,諸如可靠性、實(shí)用性和代價(jià)敏感性等。相應的,OSEKOS 靜態(tài)配置可以通過(guò)OS2EKOIL語(yǔ)言實(shí)現,用戶(hù)在系統生成時(shí)靜態(tài)制定任務(wù)的個(gè)數、需要的資源和系統服務(wù)。OSEKCOM為通信網(wǎng)絡(luò )中的數據交換提供了標準的接口和協(xié)議。OSEKNM為監視網(wǎng)絡(luò )的流量提供了一組標準的功能函數,以保證網(wǎng)絡(luò )的安全性和可靠性。
μC/OS-Ⅱ是一個(gè)著(zhù)名的源代碼公開(kāi)的實(shí)時(shí)內核,專(zhuān)門(mén)為嵌入式應用設計的。它的主要性能特點(diǎn)如下:①源代碼公開(kāi)。這樣很容易就能把操作系統移植到各個(gè)不同的硬件平臺上;②可移植性。μC/OS-Ⅱ絕大部分源代碼是用C語(yǔ)言寫(xiě)的,而與微處理器硬件相關(guān)的那部分是用匯編語(yǔ)言寫(xiě)的,使得μC/OS-Ⅱ便于移植到其他的微處理器上;③可固化。只要開(kāi)發(fā)者有固化手段,μC/OS-Ⅱ可以嵌入到開(kāi)發(fā)者的系統中;④可裁剪性(Scalable)。開(kāi)發(fā)者可以有選擇的使用μC/OS-Ⅱ中應用程序需要的那些系統服務(wù),可以減少μC/OS-Ⅱ所需的存儲空間;⑤占先(Preemp2tive)。μC/OS-Ⅱ完全是占先式的實(shí)時(shí)內核;⑥多任務(wù)(Multi-Tasking)。μC/OS-Ⅱ可以管理64個(gè)任務(wù),但是目前應用程序最多有56個(gè)任務(wù);⑦可確定性 (Affirmable)。μC/OS-Ⅱ系統服務(wù)的執行時(shí)間不依賴(lài)于應用程序任務(wù)的多少;⑧實(shí)用性和可靠性。許多的行業(yè)都有成功應用該實(shí)時(shí)內核的實(shí)例,這些應用的實(shí)踐是該內核實(shí)用性和可靠性的最好證據。
OSEKOS結構特點(diǎn)及運行機制
OSEKOS的結構特點(diǎn)
(1)高實(shí)時(shí)性。由于在汽車(chē)控制領(lǐng)域,如果出現絲毫的差錯會(huì )導致危及生命安全的嚴重后果,因此要求具有高度的實(shí)時(shí)性。OSEKOS所有的系統對象由用戶(hù)在建立時(shí)靜態(tài)創(chuàng )建,避免了動(dòng)態(tài)創(chuàng )建時(shí)的時(shí)間消耗,增強了其實(shí)時(shí)性。而且通過(guò)占先式的調度策略和警報機制也能滿(mǎn)足實(shí)時(shí)性需求;
(2)標準化應用接口。其制定了標準的應用程序編程接口,這樣可以屏蔽底層硬件結構的不同而提供一個(gè)一致的開(kāi)發(fā)環(huán)境。并且用戶(hù)只需修改OIL配置文件中與硬件相關(guān)的部分,可以方便地在不同的ECU上進(jìn)行移植;
(3)可裁剪性。其具有高度模塊化和可靈活配置的特性,用OIL語(yǔ)言進(jìn)行裁剪,可以在很少的硬件資源環(huán)境下運行。
OSEKOS運行機制分析
任務(wù)管理
OSEK規范將任務(wù)分為基本任務(wù)和擴展任務(wù)?;救蝿?wù)具有3種狀態(tài):運行狀態(tài)、就緒狀態(tài)和掛起狀態(tài)。擴展任務(wù)多了一個(gè)等待狀態(tài)。此外基本任務(wù)只在開(kāi)始和結束時(shí)才有同步點(diǎn),所以其需要的資源少,而擴展任務(wù)可以對應不同的時(shí)間,在運行中可能有多個(gè)同步點(diǎn),所以對環(huán)境要求高。操作系統的任務(wù)之間的同步通過(guò)調度程序來(lái)實(shí)現。OSEK規范支持3種調度方式:①完全搶占式調度。該策略用于保存現場(chǎng)的內存開(kāi)銷(xiāo)較大,理論上可以在任務(wù)的任何位置重調度,因此任務(wù)必須同步訪(fǎng)問(wèn)共享資源,增加了系統的復雜性;②非搶占調度。此策略通過(guò)調用某些服務(wù)例程實(shí)現任務(wù)切換,即用戶(hù)設置重調度點(diǎn)。通過(guò)定義任務(wù)組,可以使多個(gè)任務(wù)同時(shí)具有搶占或非搶占調度的特征;③混合搶占調度。搶占任務(wù)和非搶占任務(wù)共存于一個(gè)系統時(shí),使用“混合搶占”調度策略。在這種情況下,調度策略依賴(lài)于正在運行任務(wù)的搶占特性,開(kāi)發(fā)者通過(guò)配置任務(wù)優(yōu)先級和搶占屬性來(lái)定義任務(wù)執行順序。
一致類(lèi)
為了更加靈活的配置操作系統調度,OSEK規范定義了4種一致類(lèi):BCC1、BCC2、ECC1和ECC2。其根據每個(gè)優(yōu)先級可能有的任務(wù)個(gè)數,需要的是基本任務(wù)還是擴展任務(wù)來(lái)進(jìn)行劃分。若每個(gè)優(yōu)先級上只有一個(gè)任務(wù),且是基本任務(wù)則定義一致類(lèi)為BCC1,是擴展任務(wù)則定義為BCC2;若每個(gè)優(yōu)先級上可以有多個(gè)任務(wù),且是基本任務(wù)則定義一致類(lèi)為ECC1,是擴展任務(wù)則定義為ECC2。
中斷處理
OSEK規范定義了2種中斷服務(wù)程序:①I(mǎi)SR1。此類(lèi)中斷程序不使用操作系統的資源,中斷結束后,處理程序從產(chǎn)生中斷的地方繼續執行。其對任務(wù)的管理沒(méi)有影響,不要求調用操作系統的API。②ISR2。此類(lèi)中斷程序是系統生成時(shí),通過(guò)用戶(hù)子程序配置而成,它可以調用操作系統的API。中斷的優(yōu)先級高于任務(wù),因此可以搶占任何任務(wù)。
事件機制
事件機制用于保證不同擴展任務(wù)之間的同步。該機制含義是,一個(gè)處于等待狀態(tài)的擴展進(jìn)程,只有當它所等待的事件至少有一個(gè)發(fā)生,才能進(jìn)入就緒態(tài),并且事件的發(fā)生會(huì )以信號的方式傳給該進(jìn)程。只有擴展任務(wù),才具有事件。
資源管理
具有不同優(yōu)先級的多任務(wù)訪(fǎng)問(wèn)共享資源需要使用資源管理機制進(jìn)行協(xié)調。這些資源可以是一段臨界區代碼、調度程序、共享內存或是數據結構,也可以是共享硬件設備。系統在處理多個(gè)進(jìn)程對共享資源的互斥訪(fǎng)問(wèn)時(shí),采用信號量對臨界區數據或資源加鎖,但是這樣可能會(huì )導致優(yōu)先級反轉。為了避免這種情況出現,OSEK采用了優(yōu)先級最高限度協(xié)議(PCP),即當一個(gè)進(jìn)程占用了一個(gè)資源后,該進(jìn)程的優(yōu)先級會(huì )臨時(shí)升高為該資源優(yōu)先級。當該任務(wù)釋放了資源后,其優(yōu)先級回到要求訪(fǎng)問(wèn)資源前的優(yōu)先級。使用該協(xié)議同時(shí)也解決了死鎖的問(wèn)題。
報警器
報警器是OSEK為處理循環(huán)事件提供的服務(wù)機制,警報或者基于系統時(shí)鐘,或者基于其他的某種計數器。當計數器到達警報設置值時(shí)被觸發(fā),此時(shí)可以激活進(jìn)程也可以為某進(jìn)程設置事件,或者執行一個(gè)警報回調程序。
消息處理
任務(wù)之間是通過(guò)消息實(shí)現通信的,消息是應用數據的容器,只有一個(gè)發(fā)送者,但是可以有多個(gè)接受者。OSEK規范將消息分為可排隊和不可排隊的。前者是靜態(tài)長(cháng)度消息,內部數據被組織成FIFO隊列,能被接受服務(wù)例程移走;不可排隊消息是不斷被刷新的消息,不能被服務(wù)例程移走。
錯誤處理
OSEKOS提供了系統專(zhuān)用的鉤子程序,以便在操作系統內部操作時(shí)執行用戶(hù)定義的函數。鉤子程序可用于:系統啟動(dòng),相應鉤子程序在操作系統啟動(dòng)后,進(jìn)入調度程序之前執行;系統關(guān)閉,相應鉤子程序在應用或操作系統(此時(shí)發(fā)生嚴重錯誤)請求系統停止運行時(shí)執行;跟蹤、調試應用以及現場(chǎng)切換時(shí)調用用戶(hù)定義的擴展程序;錯誤處理。
基于μC/OS-Ⅱ的OSEKOS設計
OSEKOS設計理念
根據OSEK規范和μC/OS-Ⅱ的內核要求,CC1和ECC1這2個(gè)符合級別都只允許一個(gè)優(yōu)先級有一個(gè)進(jìn)程,因此可以將優(yōu)先級從0到N-1分配給N個(gè)進(jìn)程,使每個(gè)進(jìn)程分配到的優(yōu)先級不同,N是系統中的進(jìn)程數量,這樣可以使修改后的μC/OS-Ⅱ內核滿(mǎn)足ECC1類(lèi)模式。由于BCC2和ECC2這2個(gè)符合級別可以允許每個(gè)優(yōu)先級有多個(gè)進(jìn)程,因此要使用復雜的調度策略來(lái)追蹤各個(gè)進(jìn)程。
設計的OSEKOS可以采用μC/OS-Ⅱ的調度結構――就緒表,使用簡(jiǎn)單的占先式的調度策略,將每個(gè)進(jìn)程的就緒態(tài)標志都放入就緒表中,然后從其中找到優(yōu)先級最高的就緒態(tài)進(jìn)程執行,實(shí)現一個(gè)基于優(yōu)先級的可剝奪型的實(shí)時(shí)內核。這樣不僅可以提高系統的實(shí)時(shí)性,而且可以降低操作系統的CPU負荷。對于BCC2和 ECC2這2個(gè)符合級別而言,可以在基于優(yōu)先級的占先式調度策略基礎上添加時(shí)間片輪換調度算法來(lái)處理優(yōu)先級相同的2個(gè)任務(wù)之間的調度;也可以為每個(gè)優(yōu)先級增加一個(gè)FIFO隊列,先以任務(wù)優(yōu)先級為檢索,然后選擇該進(jìn)程隊列中位于對首的進(jìn)程運行。但是這樣會(huì )犧牲一定的實(shí)時(shí)性,并且加大CPU的負荷,占用更多的 RAM。
為了提高OSEKOS的可移植性和利于OSEKOS的配置,按照μC/OS-Ⅱ的內核結構將其分為3部分:硬件無(wú)關(guān)部分、硬件相關(guān)部分和應用相關(guān)部分。這樣可以使其在不同的硬件之間移植時(shí)更加的方便,將與應用相關(guān)部分放入配置文件內,便于用戶(hù)使用。
μC/OS-Ⅱ在處理多個(gè)進(jìn)程對共享資源的互斥訪(fǎng)問(wèn)時(shí),主要是采用開(kāi)關(guān)中斷與信號量來(lái)對臨界區數據或資源加鎖,使用互斥型信號量管理來(lái)避免優(yōu)先級反轉,通過(guò)允許用戶(hù)在申請信號量時(shí)定義等待超時(shí)化解死鎖問(wèn)題。OSEKOS是通過(guò)采用優(yōu)先級最高限度協(xié)議(PCP)來(lái)避免優(yōu)先級反轉和死鎖問(wèn)題??梢酝ㄟ^(guò)在系統生成期間,靜態(tài)分配每一資源的最高限度優(yōu)先級,使設計的OS2EKOS執行PCP協(xié)議,達到兼容OSEK規范的目的。
根據OSEK規定的2類(lèi)中斷,針對具體的處理器平臺,實(shí)現中斷管理的標準API,并且根據μC/OS-Ⅱ提供非OSEK標準的API:開(kāi)/關(guān)中斷。由于是基于ECC1類(lèi)模式來(lái)實(shí)現OSEKOS,所以支持OSEK規范定義的事件機制,可用于實(shí)現任務(wù)之間的同步協(xié)調。根據μC/OS-Ⅱ,可以支持的事件種類(lèi)有信號量、互斥型信號量、郵箱和消息隊列。由μC/OS-Ⅱ提供的時(shí)間管理和定時(shí)中斷功能,實(shí)現OSEKOS中要求的警報器管理,以進(jìn)一步提高操作系統的實(shí)時(shí)性和安全性。在μC/OS-Ⅱ中,定義了一系列與OSEKOS規范要求類(lèi)似的鉤子程序,用于實(shí)現用戶(hù)自己定義的函數。
OSEKOS基本結構的組成
由于OSEKOS中的標準應用程序接口(API)定義在操作系統的核心空間,根據以上設計理念可以將操作系統按功能分為進(jìn)程管理和調度、資源管理、警報與計數器管理、事件管理和中斷管理,其結構組成如圖1所示。其中進(jìn)程管理與調度是整個(gè)操作系統的核心,其他的管理機制為它提供不同的服務(wù)支持。
圖1 OSEKOS結構組成圖
每個(gè)進(jìn)程都通過(guò)一個(gè)進(jìn)程控制塊(TCB)來(lái)管理,在進(jìn)程管理模塊中,實(shí)現OSEK標準API:激活進(jìn)程、終止進(jìn)程、連接進(jìn)程、調度、捕獲當前運行進(jìn)程ID 和獲得進(jìn)程狀態(tài)。資源管理模塊實(shí)現OSEK標準API:獲得資源、釋放資源。計數器管理沒(méi)有標準API,警報管理結構由警報和警報行為組成。其標準 API:獲得警報信息、獲得警報到期所需時(shí)間、設置相對警報、設置絕對警報和消除警報。事件管理模塊實(shí)現的OSEK標準API:等待事件、設置事件、消除事件和獲得進(jìn)程的時(shí)間狀態(tài)。實(shí)現中斷管理的標準API:開(kāi)/關(guān)所有中斷和開(kāi)/關(guān)第二類(lèi)中斷。
結束語(yǔ)
根據OSEKOS規范和μC/OS-Ⅱ內核實(shí)現的不同技術(shù)特點(diǎn),提出OSEKOS的一些設計思想,并且設計出OSEKOS的基本結構組成。 OSEK/VDX體系的建立給國際汽車(chē)工業(yè)帶來(lái)深遠的影響,采用基于OSEK/VDX規范的RTOS進(jìn)行開(kāi)發(fā)能節省開(kāi)發(fā)時(shí)間,降低成本,提高軟件質(zhì)量和模塊的可移植性,而且需要的資源少。因此,研究基于OSEK/VDX規范的操作系統具有重要的意義。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論