<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于OSEK/VDX標準的Trampoline操作系統研究

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

作者: 時(shí)間:2009-05-08 來(lái)源:網(wǎng)絡(luò ) 收藏

完全支持要求,實(shí)現了統一的API接口,支持靜態(tài)配置,支持4個(gè)符合類(lèi),支持 PCP協(xié)議。另外,的設計還考慮到兩個(gè)方面――高可移植性和減少內存使用量。
為了達到高可移植性,設計了一個(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ù)的鏈表,如圖l所示。由于按照優(yōu)先級由高到低的順序來(lái)組織任務(wù)子集鏈表,因此最高優(yōu)先級的任務(wù)總是在鏈表頭部,這樣會(huì )使調度器能快速選取到最高優(yōu)先級的任務(wù),但也會(huì )導致低優(yōu)先級任務(wù)選取得很慢。

本文引用地址:http://dyxdggzs.com/article/152492.htm

Trampoline使用一個(gè)tpl_running_task指針指向當前正在運行的任務(wù)。調度器管理著(zhù)就緒任務(wù)的集合,當重新調度發(fā)生時(shí),從就緒任務(wù)集合中選取一個(gè)最高優(yōu)先級的任務(wù)來(lái)執行,并把它從就緒任務(wù)集合里刪除。然后,tpl_running_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_exec_static結構里。在tpl_exec_common結構里設置了一個(gè)指針static_desc,指向任務(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),從而便于把它移植到其他平臺。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>