基于OSEK/VDX標準的Trampoline操作系統研究

發(fā)布時(shí)間:2010-3-24 08:46    發(fā)布者:李寬
關(guān)鍵詞: OSEK , Trampoline , VDX , 操作系統 , 研究
1 OSEK操作系統研究現狀及相關(guān)工作

OSEK/VDX標準產(chǎn)生以后,很多操作系統供應商對其進(jìn)行研究,并實(shí)現了商業(yè)化,例如國外:Elektrobit Auto—motive、  Accelerated  Technology、dSPACE、  ETAS、Metrowerks、Hitex、iSYSTEM、Lauterbach Datentechnik、Vector、windRiver等公司。這些公司的OSEK操作系統產(chǎn)品都通過(guò)了OSEK官方認證,并提供了配套的集成開(kāi)發(fā)環(huán)境來(lái)方便應用程序的開(kāi)發(fā)。

國內依據OSEK/VDX開(kāi)發(fā)的操作系統內核,大部分參考了μC/0S操作系統內核的設計或者是在它的基礎上修改的,也有在Linux的基礎上修改的。國內OSEK操作系統配套的集成開(kāi)發(fā)環(huán)境很少,目前有浙江大學(xué)開(kāi)發(fā)的SmartIDE、清華大學(xué)開(kāi)發(fā)的清華車(chē)用集成開(kāi)發(fā)環(huán)境等,其他的基本上沒(méi)有配套的集成開(kāi)發(fā)環(huán)境。因此目前國內對OSEK標準的研究和應用還處于初級階段。

由于購買(mǎi)商業(yè)化的 OSEK需要大量資金,并且很多時(shí)候不能獲取源代碼,因此希望有一些開(kāi)源OSEK操作系統來(lái)滿(mǎn)足研究的需要,F有的OSEK操作系統的開(kāi)源實(shí)現,有 PICosl8,一個(gè)OSEK/VDX OS 2.1r1的部分實(shí)現。它專(zhuān)門(mén)為PICl8XXX系列微控制器設計,針對該系列微控制器硬件,特別是在內存使用方面作了高度優(yōu)化。但是,它的定制能力很差,并且移植到其他平臺時(shí)代碼修改量很大。另外還有openOSEK項目,但是該項目一直沒(méi)有開(kāi)發(fā)出正式發(fā)布的版本。

Trampoline 主要是由法國通信研究所(IRCCyN)的實(shí)時(shí)系統組負責開(kāi)發(fā)的。它的源代碼是開(kāi)放的,能夠兼容OSEK/VDX OS 2.2.3標準(當前最新版本為1.1)。它目前還沒(méi)有通過(guò)OSEK/VDX的官方認證,因此只能說(shuō)它兼容OSEK標準,而不能說(shuō)它是通過(guò)OSEK認證的操作系統。Trampoline目前能夠在4個(gè)平臺上運行,分別是POSIX(包括Linux、Unix、Mac OS等)系列操作系統平臺、Infineon C166平臺、Freescale s12x平臺、Darwin/PowerPC平臺,其中在POSIX系列操作系統上運行時(shí)需要libpcl庫的支持。因此,即使沒(méi)有微控制器,也可以在常見(jiàn)的Linux/x86平臺上使用Trampoline。

要對整個(gè)OSEK/VDX標準進(jìn)行研究,對OSEK操作系統的研究是基礎。只有有了一個(gè)可以使用的OSEK操作系統,才能在它的基礎上進(jìn)行COM、NM及OIL標準的研究,才能進(jìn)行OSEK操作系統應用程序開(kāi)發(fā)、汽車(chē)電子集成開(kāi)發(fā)環(huán)境的開(kāi)發(fā)等方面的研究。Trdmpo1ine能夠在Linux平臺上運行,并且有一個(gè)可用的GOIL OIL文件解析器,可以作為進(jìn)行OSEK/VDX標準研究的基礎。

2 OSEK OS及Trampoline分析

OSEK 操作系統是一種單處理器操作系統,主要用于汽車(chē)電子的分布電子控制單元ECU(E1ectronic Contr01 Unit)上。

OSEK 操作系統對不同版本OSEK操作系統提供的應用程序接口進(jìn)行了標準化,這樣,為一個(gè)OSEK操作系統設計的應用程序不用修改就可以移植到其他OSEK操作系統上運行。    為了使OSEK操作系統能夠在有不同計算能力(不同CPU、不同存儲容量)的ECU上運行,OSEK定義了4個(gè)符合類(lèi),分別是BCCl、ECCl、 BCC2、ECC2。每一個(gè)符合類(lèi)包括一組操作系統特性,代表一類(lèi)應用程序的需求,也包含了這些操作系統特性運行所需要的硬件需求。使用符合類(lèi)的概念既方便用戶(hù)根據自己的需求及自己的硬件條件來(lái)選擇符合自己需要的操作系統特性集合,也使得操作系統供應商可以先提供一部分操作系統,也就是先提供對部分符合類(lèi)的支持,然后再增加更多操作系統特性,支持其他符合類(lèi),從而方便了操作系統的開(kāi)。    OSEK操作系統是靜態(tài)配置的,而不是動(dòng)態(tài)生成的,用戶(hù)在系統生成階段能夠使用OIL語(yǔ)言對系統進(jìn)行配置,指定系統里使用多少個(gè)任務(wù)、使用哪些資源、需要調用哪些系統服務(wù)等。通過(guò)這種方式,用戶(hù)可以選擇需要的部分,裁剪掉不需要的,以減少不必要的系統資源。另外,由于系統是靜態(tài)生成的,既減少了動(dòng)態(tài)生成系統對象的開(kāi)銷(xiāo),減少系統內存的使用,又可以使系統運行時(shí)的行為可預知,提高系統的可靠性和確定性。

由于OSEK操作系統是靜態(tài)生成的,系統運行時(shí)的很多信息在系統生成階段就可以確定,于是它提供的任務(wù)間同步和通信方法比其他常用的嵌入式實(shí)時(shí)操作系統要少。它用OSEK PCP(Priority Ceiling Protocol)協(xié)議來(lái)同步資源的并發(fā)訪(fǎng)問(wèn),從而提供了任務(wù)與ISR 之間及ISR與ISR之間共享資源的機制。另外,OSEK操作系統還提供了完善的錯誤處理機制,提高了系統的可靠性和容錯能力。

Trampoline 完全支持OSEK標準要求,實(shí)現了OSEK操作系統統一的API接口,支持靜態(tài)配置,支持4個(gè)符合類(lèi),支持OSEK PCP協(xié)議。另外,Trampoline的設計還考慮到兩個(gè)方面——高可移植性和減少內存使用量。

為了達到高可移植性,Trampoline設計了一個(gè)硬件抽象層來(lái)隔離底層的硬件差異,把平臺有關(guān)的代碼與平臺無(wú)關(guān)的代碼進(jìn)行隔離。把Trampoline從一個(gè)目標平臺移植到另一個(gè)目標平臺,僅需要把與目標平臺有關(guān)的那部分代碼改寫(xiě)一下就可以了,硬件抽象層之上的那部分不用修改,這大大減少了操作系統移植的工作量。在 Trampoline代碼的組織中,不同目標平臺代碼放在不同的文件中,分離得很清楚。與目標平臺有關(guān)的代碼,僅僅是任務(wù)上下文切換、操作系統初始化及一些與硬件相關(guān)的函數(中斷使能、睡眠模式等)代碼。這部分代碼量減到了罪少。

由于車(chē)載嵌入式系統中的微控制器RAM容量很小,一般從幾百字節到幾K字節,而增加RAM容量會(huì )增加產(chǎn)品的成本,在產(chǎn)品批量生產(chǎn)時(shí)往往會(huì )難以接受。Trampo-line在設計時(shí)盡量減少內存的使用,并優(yōu)化了任務(wù)管理和中斷管理的數據結構,把一部分不變的內容放到ROM中,以減少RAM的使用要求。

下面著(zhù)重分析Trampoline最核心的調度機制、任務(wù)管理、中斷管理的設計與實(shí)現。

2.1  調度機制

Trampoline使用靜態(tài)優(yōu)先級調度算法。在系統生成階段,用戶(hù)為每一個(gè)任務(wù)分配一個(gè)優(yōu)先級。在不同的符合類(lèi)下,優(yōu)先級與任務(wù)的對應關(guān)系不同。在BCCl和ECCl符合類(lèi)下,一個(gè)優(yōu)先級僅對應一個(gè)任務(wù),不同的任務(wù)有不同的優(yōu)先級,任務(wù)之間不能共享優(yōu)先級;而在BCC2和ECC2符合類(lèi)下,一個(gè)優(yōu)先級可以對應多個(gè)任務(wù),不同的任務(wù)可以共享同一個(gè)優(yōu)先級。任務(wù)有4 種狀態(tài):就緒狀態(tài)、等待狀態(tài)、掛起狀態(tài)(僅ECCl和ECC2符合類(lèi)下有)及運行狀態(tài)。

由于使用處于等待或者掛起狀態(tài)的任務(wù)時(shí)直接給出了該任務(wù)結構,因此Trampoline沒(méi)有使用數據結構來(lái)管理等待狀態(tài)和掛起狀態(tài)的任務(wù);而對于就緒狀態(tài)的任務(wù),在不同的符合類(lèi)下,Trampoline 采用了兩種不同的數據結構來(lái)管理。由于在BCCl和ECCl符合類(lèi)下不同的任務(wù)有不同的優(yōu)先級,Trampoline使用一個(gè)簡(jiǎn)單的鏈表,按照任務(wù)的優(yōu)先級由高到低把就緒態(tài)任務(wù)描述符給連接起來(lái);而在BCC2和ECC2符合類(lèi)下,幾個(gè)任務(wù)可以共享一個(gè)優(yōu)先級,Trampoline使用了一個(gè)任務(wù)子集鏈表數據結構來(lái)組織就緒任務(wù)。共享一個(gè)優(yōu)先級的任務(wù)組成了一個(gè)任務(wù)子集,它們也組成了一個(gè)鏈表。然后把不同子集的鏈表表頭按優(yōu)先級由高到低鏈接起來(lái),組成了所有就緒任務(wù)的鏈表,如圖1所示。由于按照優(yōu)先級由高到低的順序來(lái)組織任務(wù)子集鏈表,因此最高優(yōu)先級的任務(wù)總是在鏈表頭部,這樣會(huì )使調度器能快速選取到最高優(yōu)先級的任務(wù),但也會(huì )導致低優(yōu)先級任務(wù)選取得很慢。

Trampoline使用一個(gè)tpLrLinning—task指針指向當前正在運行的任務(wù)。調度器管理著(zhù)就緒任務(wù)的集合,當重新調度發(fā)生時(shí),從就緒任務(wù)集合中選取一個(gè)最高優(yōu)先級的任務(wù)來(lái)執行,并把它從就緒任務(wù)集合里刪除。然后,tpl_run-nling_task指針指向該任務(wù),并把任務(wù)的狀態(tài)由就緒態(tài)改為運行態(tài)。該任務(wù)將一直處在運行狀態(tài),直到運行結束或一個(gè)系統服務(wù)阻塞了它的執行,或被一個(gè)更高優(yōu)先級任務(wù)搶占。另外,一個(gè)任務(wù)可以是不可搶占的。在這種情況下,它將一直占有CPU,直到運行結束(即使有一個(gè)更高優(yōu)先級就緒任務(wù)在等待)。Trampoline也支持使用任務(wù)組的結構來(lái)實(shí)現混合調度。在這種調度模式下,把所有就緒任務(wù)分成不同的任務(wù)組,同一個(gè)任務(wù)組里的任務(wù)之間是不可搶占的,但它可以被這個(gè)組外的更高優(yōu)先級任務(wù)搶占。



2.2  任務(wù)管理

Trampoline使用任務(wù)描述符結構 (struct tpl_task)來(lái)管理任務(wù)的信息,其中包括系統運行時(shí)不斷變化的信息,如任務(wù)狀態(tài)、任務(wù)優(yōu)先級、任務(wù)的激活次數、任務(wù)的資源、任務(wù)的事件等;還包括系統運行時(shí)不變的信息,如任務(wù)的上下文、任務(wù)的堆棧、任務(wù)代碼段入口地址、任務(wù)ID、任務(wù)基礎優(yōu)先級、最大激活次數和類(lèi)型等信息。為了減少內存的使用,Trampoline任務(wù)描述符結構被分成圖2所示的兩個(gè)部分:第一部分是系統運行時(shí)不斷變化的數據,保存在tpl_exec_common結構里,它必須常駐RAM中;另一部分是在系統運行時(shí)不變的部分,保存在tpl_execl_static結構里。在tpl_exec_common結構里設置了一個(gè)指針staticdesc,指向任務(wù)的tpl_exec_static結構。由于tpl_exec_static里存放的信息在系統運行時(shí)是不變的,因此可以把這部分放到ROM里,以節省RAM的使用。在tpl_exec_static結構里有兩部分是體系結構相關(guān)的,即上下文結構context和堆棧結構stack,它們使用指向一個(gè)或多個(gè)RAM區域的指針來(lái)保存任務(wù)執行的上下文和堆棧信息。這種設計使得不同的任務(wù)之間可以通過(guò)共享指向上下文或堆棧結構的指針就能共享上下文和堆棧,從而可以減少任務(wù)上下文和堆棧所占用的存儲空間。另外,Trampoline上下文結構的設計可以使用盡可能少的 RAM。例如,如果目標平臺處理器沒(méi)有FPU(浮點(diǎn)處理器),Trampoline上下文結構有兩個(gè)指針,第一個(gè)指向整數上下文的RAM區域,第二個(gè)指向浮點(diǎn)上下文RAM區域,這些RAM區域都是用來(lái)保存任務(wù)運行時(shí)要使用的整數寄存器或浮點(diǎn)寄存器的。然而,并不是每個(gè)任務(wù)都需要使用浮點(diǎn)寄存器,如果任務(wù)沒(méi)有使用FPU,第二個(gè)指針將會(huì )設為空,以避免分配浮點(diǎn)寄存器所占用的RAM空間。任務(wù)上下文和堆棧結構都屬于與體系結構有關(guān)的代碼,內核不直接同這部分打交道,而是通過(guò)硬件抽象層來(lái)使用它們。這樣,使得與體系結構相關(guān)的代碼與無(wú)關(guān)的代碼隔離起來(lái),從而便于把它移植到其他平臺。



2.3  中斷管理

在OSEK操作系統中,ISR(Interrupt Service Rou-tine)分成了兩類(lèi),即ISRl和ISR2。ISRl不使用操作系統服務(wù),也不能調用其他的用戶(hù)定義函數。該類(lèi)中斷服務(wù)例程執行完了以后直接執行中斷發(fā)生位置后的下一條指令,因此ISRl對任務(wù)管理沒(méi)有影響,運行時(shí)消耗的資源也比較少。ISR2是可以調用其他用戶(hù)定義的函數或使用部分OSEK服務(wù)的中斷例程,OSEK操作系統專(zhuān)門(mén)為它準備了一個(gè)堆棧Frame,用作調用其他函數的執行環(huán)境。在系統生成階段,由用戶(hù)指定ISR2要調用的用戶(hù)定義函數或系統調用。ISR2能夠和任務(wù)之間共享資源,而這可能會(huì )造成死鎖:當ISR2啟動(dòng)后試圖獲得一個(gè)已經(jīng)被一個(gè)任務(wù)占用的資源時(shí),該任務(wù)也在等待中斷完成,因此ISR2和任務(wù)之間共享資源時(shí)需要使用同步機制。OSEK操作系統提供了用于資源訪(fǎng)問(wèn)的GetResource和ReleaseResource 系統調用,任務(wù)和ISR2之間可以使用它們來(lái)共享資源,但是這種方法需要關(guān)閉訪(fǎng)問(wèn)資源的中斷,可能使中斷長(cháng)時(shí)間關(guān)閉,降低了操作系統的實(shí)時(shí)響應能力。另一種任務(wù)和ISR2之間共享資源的方法是OSEK標準所建議的方法,也就是使用OSEK PCP協(xié)議。使用這種方法時(shí),當一個(gè)任務(wù)要獲取同ISR2共享的資源時(shí),會(huì )把它的優(yōu)先級提升到比ISR2更高的優(yōu)先級,當任務(wù)執行完成之后,再把優(yōu)先級恢復到原來(lái)的優(yōu)先級。這時(shí)ISR2更像任務(wù),但是比普通任務(wù)有更高的優(yōu)先級。

Trampoline實(shí)現了一種延遲的ISRl和ISR2,從而使操作系統內核更小。任務(wù)和ISR的描述符都繼承自一個(gè)tpl_exec_common結構,如圖2所示。任務(wù)描述符在tpl_exec_common 結構里增加了事件管理的數據成員,也就是evt_set和evt_wait數據成員;而ISR描述符在tpl_exec_common結構里增加了一個(gè)指向附加數據的指針,也就是static_isr_desc數據成員,static_isr_desc指向的內容可以放到ROM中,以減少RAM的使用。一個(gè)ISR對應著(zhù)一個(gè)中斷向量。當一個(gè)中斷觸發(fā)時(shí),Trampoline激活對應的ISR中斷服務(wù)例程并且返回。如果是ISRl,執行完了以后將執行觸發(fā)中斷位置后面的代碼;如果是ISR2,ISR2將運行預先定義的用戶(hù)定義函數或者系統服務(wù),然后像普通任務(wù)一樣由調度器根據任務(wù)級的調度策略來(lái)調度執行。

另外,Trampoline為ISR增加了一個(gè)抽象層。這樣,一方面幾個(gè)硬件中斷可以共享相同的中斷向量偏移,另一方面對應到一個(gè)中斷向量偏移的,有一個(gè) ISR的集合,而不是一個(gè)ISR。當一個(gè)硬件中斷觸發(fā)時(shí),為了找到一個(gè)與該硬件中斷匹配的ISR,每組共享中斷偏移的ISR都必須提供一個(gè)函數來(lái)測試它對應的設備中斷標志是否為真。如果函數返回TRUE,該ISR將被激活。Trampoline設計了一種GIH(General Interrupt Handler)函數來(lái)完成這種測試工作。

而這樣做有兩個(gè)問(wèn)題。第一,由于ISR2的后期執行是在任務(wù)態(tài)運行,這時(shí)如果有一個(gè)硬件中斷觸發(fā),就會(huì )由GIH來(lái)確定一個(gè)ISR來(lái)執行,從而打斷了原來(lái)的ISR2。即使后來(lái)觸發(fā)的ISR的優(yōu)先級比原來(lái)ISR2的優(yōu)先級低,這種情況也能發(fā)生。這就造成了一個(gè)低優(yōu)先級的硬件中斷搶占了高優(yōu)先級的中斷,而這種情況是不應該發(fā)生的,因此是一個(gè)很大的問(wèn)題。第二,根據OSEK操作系統標準,當ISR運行時(shí),不能進(jìn)行重新調度。在Trampoline中,ISR2作為高優(yōu)先級的普通任務(wù)進(jìn)行調度,當一個(gè)高優(yōu)先級ISR2到來(lái)時(shí),任務(wù)調度器會(huì )重新調度一次,從而打斷了原來(lái)的ISR2的執行。另外,在OSEK操作系統標準中,重新調度是在任務(wù)之間的重新調度;而在Trampoline中,只要有一個(gè)ISR2在運行,重新調度只能在有比普通任務(wù)更高優(yōu)先級的ISR2之間進(jìn)行。當最后運行的ISR2結束時(shí),CPU的重新調度才給了有最高優(yōu)先級的任務(wù),因此,Trampoline的中斷管理部分的實(shí)現還有待改進(jìn)。

3 在Linux/x86上開(kāi)發(fā)Trampoline應用程序

Trampoline 目前可以在四種目標平臺上使用:帶有Keil編譯器的Infineon C167、Darwin/PowerPC、Freescale$12x和POSIX系列操作系統平臺。前三種平臺的硬件不常見(jiàn),如果沒(méi)有就不能運行;而 POSIX系列的Linux/x86平臺則很容易得到。下面以L(fǎng)inux/x86平臺為例,說(shuō)明開(kāi)發(fā)一個(gè)Trampoline應用程序的步驟和方法:

① 生成應用程序的OIL配置文件。OSEK/VDX OS是一個(gè)靜態(tài)操作系統,系統對象需要在系統生成時(shí)定義。OIL是書(shū)寫(xiě)這種定義的標準語(yǔ)言。它可以定義所有的應用程序使用的各種對象(任務(wù)、中斷、警報、計數器、資源、事件等)。OIL配置文件可以手工編寫(xiě),也可以使用圖形化開(kāi)發(fā)配置工具來(lái)生成。目前Trampoline沒(méi)有圖形化配置工具,只能手工編寫(xiě) OIL配置文件。

②使用OII文件解析器GOIL將應用程序的OIL文件轉化為一個(gè).c文件和.h文件,其主要功能是進(jìn)行與應用程序相關(guān)的各種系統對象參數的定義、初始化等工作。

③使用GCC工具鏈將②生成的文件和Trampoline操作系統內核文件及l(fā)ibpcl庫文件、VIPER虛擬處理器文件等進(jìn)行編譯和鏈接,生成一個(gè)Linux平臺的可執行文件,也就是最終的應用程序可執行文件。

參考文獻

   1. OSEK Group OSEK/VDX Operating System
   2. OSEK Group OSEK/VDX Communication
   3. OSEK Group OSEK/VDX Network Management
   4. 查看詳情
   5. 馮輝宗.張彧 OSEK 規范的實(shí)時(shí)操作系統設計 [期刊論文] -單片機與嵌入式系統應用2007(11)
   6. 周曉峰.李興虎 車(chē)用實(shí)時(shí)操作系統OSEKkernel的開(kāi)發(fā) [期刊論文] -汽車(chē)工程2005(5)
   7. 陳卓.熊忠陽(yáng).李銀國 基于 OSEK/VDX操作系統的任務(wù)管理機制設計 [期刊論文] -計算機工程2006(12)
   8. 蔡俊良.孫曉民 一種基于 Linux的車(chē)用實(shí)時(shí)操作系統 [期刊論文] -清華大學(xué)學(xué)報(自然科學(xué)版)2004(1)

作者:太原科技大學(xué) 陳二濤  徐玉斌
來(lái)源:?jiǎn)纹瑱C與嵌入式系統應用  2009 (4)
本文地址:http://selenalain.com/thread-9788-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页