新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于OSEK/VDX標(biāo)準(zhǔn)的Trampoline操作系統(tǒng)研究

        基于OSEK/VDX標(biāo)準(zhǔn)的Trampoline操作系統(tǒng)研究

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

        完全支持要求,實(shí)現(xiàn)了統(tǒng)一的API接口,支持靜態(tài)配置,支持4個符合類,支持 PCP協(xié)議。另外,的設(shè)計(jì)還考慮到兩個方面――高可移植性和減少內(nèi)存使用量。
        為了達(dá)到高可移植性,設(shè)計(jì)了一個硬件抽象層來隔離底層的硬件差異,把平臺有關(guān)的代碼與平臺無關(guān)的代碼進(jìn)行隔離。把Trampoline從一個目標(biāo)平臺移植到另一個目標(biāo)平臺,僅需要把與目標(biāo)平臺有關(guān)的那部分代碼改寫一下就可以了,硬件抽象層之上的那部分不用修改,這大大減少了移植的工作量。在Trampoline代碼的組織中,不同目標(biāo)平臺代碼放在不同的文件中,分離得很清楚。與目標(biāo)平臺有關(guān)的代碼,僅僅是任務(wù)上下文切換、初始化及一些與硬件相關(guān)的函數(shù)(中斷使能、睡眠模式等)代碼。這部分代碼量減到了最少。由于車載嵌入式系統(tǒng)中的微控制器RAM容量很小,一般從幾百字節(jié)到幾K字節(jié),而增加RAM容量會增加產(chǎn)品的成本,在產(chǎn)品批量生產(chǎn)時往往會難以接受。Trampo―line在設(shè)計(jì)時盡量減少內(nèi)存的使用,并優(yōu)化了任務(wù)管理和中斷管理的數(shù)據(jù)結(jié)構(gòu),把一部分不變的內(nèi)容放到ROM中,以減少RAM的使用要求。
        下面著重分析Trampoline最核心的調(diào)度機(jī)制、任務(wù)管理、中斷管理的設(shè)計(jì)與實(shí)現(xiàn)。
        2.1 調(diào)度機(jī)制
        Trampoline使用靜態(tài)優(yōu)先級調(diào)度算法。在系統(tǒng)生成階段,用戶為每一個任務(wù)分配一個優(yōu)先級。在不同的符合類下,優(yōu)先級與任務(wù)的對應(yīng)關(guān)系不同。在BCCl和ECCl符合類下,一個優(yōu)先級僅對應(yīng)一個任務(wù),不同的任務(wù)有不同的優(yōu)先級,任務(wù)之間不能共享優(yōu)先級;而在BCC2和ECC2符合類下,一個優(yōu)先級可以對應(yīng)多個任務(wù),不同的任務(wù)可以共享同一個優(yōu)先級。任務(wù)有4種狀態(tài):就緒狀態(tài)、等待狀態(tài)、掛起狀態(tài)(僅ECCl和ECC2符合類下有)及運(yùn)行狀態(tài)。
        由于使用處于等待或者掛起狀態(tài)的任務(wù)時直接給出了該任務(wù)結(jié)構(gòu),因此Trampoline沒有使用數(shù)據(jù)結(jié)構(gòu)來管理等待狀態(tài)和掛起狀態(tài)的任務(wù);而對于就緒狀態(tài)的任務(wù),在不同的符合類下,Trampoline采用了兩種不同的數(shù)據(jù)結(jié)構(gòu)來管理。由于在BCCl和ECCl符合類下不同的任務(wù)有不同的優(yōu)先級,Trampoline使用一個簡單的鏈表,按照任務(wù)的優(yōu)先級由高到低把就緒態(tài)任務(wù)描述符給連接起來;而在BCC2和ECC2符合類下,幾個任務(wù)可以共享一個優(yōu)先級,Trampoline使用了一個任務(wù)子集鏈表數(shù)據(jù)結(jié)構(gòu)來組織就緒任務(wù)。共享一個優(yōu)先級的任務(wù)組成了一個任務(wù)子集,它們也組成了一個鏈表。然后把不同子集的鏈表表頭按優(yōu)先級由高到低鏈接起來,組成了所有就緒任務(wù)的鏈表,如圖l所示。由于按照優(yōu)先級由高到低的順序來組織任務(wù)子集鏈表,因此最高優(yōu)先級的任務(wù)總是在鏈表頭部,這樣會使調(diào)度器能快速選取到最高優(yōu)先級的任務(wù),但也會導(dǎo)致低優(yōu)先級任務(wù)選取得很慢。

        本文引用地址:http://www.104case.com/article/152492.htm

        Trampoline使用一個tpl_running_task指針指向當(dāng)前正在運(yùn)行的任務(wù)。調(diào)度器管理著就緒任務(wù)的集合,當(dāng)重新調(diào)度發(fā)生時,從就緒任務(wù)集合中選取一個最高優(yōu)先級的任務(wù)來執(zhí)行,并把它從就緒任務(wù)集合里刪除。然后,tpl_running_task指針指向該任務(wù),并把任務(wù)的狀態(tài)由就緒態(tài)改為運(yùn)行態(tài)。該任務(wù)將一直處在運(yùn)行狀態(tài),直到運(yùn)行結(jié)束或一個系統(tǒng)服務(wù)阻塞了它的執(zhí)行,或被一個更高優(yōu)先級任務(wù)搶占。另外,一個任務(wù)可以是不可搶占的。在這種情況下,它將一直占有CPU,直到運(yùn)行結(jié)束(即使有一個更高優(yōu)先級就緒任務(wù)在等待)。Trampoline也支持使用任務(wù)組的結(jié)構(gòu)來實(shí)現(xiàn)混合調(diào)度。在這種調(diào)度模式下,把所有就緒任務(wù)分成不同的任務(wù)組,同一個任務(wù)組里的任務(wù)之間是不可搶占的,但它可以被這個組外的更高優(yōu)先級任務(wù)搶占。
        2.2 任務(wù)管理
        Trampoline使用任務(wù)描述符結(jié)構(gòu)(struct tpl_task)來管理任務(wù)的信息,其中包括系統(tǒng)運(yùn)行時不斷變化的信息,如任務(wù)狀態(tài)、任務(wù)優(yōu)先級、任務(wù)的激活次數(shù)、任務(wù)的資源、
        任務(wù)的事件等;還包括系統(tǒng)運(yùn)行時不變的信息,如任務(wù)的上下文、任務(wù)的堆棧、任務(wù)代碼段入口地址、任務(wù)ID、任務(wù)基礎(chǔ)優(yōu)先級、最大激活次數(shù)和類型等信息。為了減少內(nèi)存的使用,Trampoline任務(wù)描述符結(jié)構(gòu)被分成圖2所示的兩個部分:第一部分是系統(tǒng)運(yùn)行時不斷變化的數(shù)據(jù),保存在tpl_exec_common結(jié)構(gòu)里,它必須常駐RAM中;另一部分是在系統(tǒng)運(yùn)行時不變的部分,保存在tpl_exec_static結(jié)構(gòu)里。在tpl_exec_common結(jié)構(gòu)里設(shè)置了一個指針static_desc,指向任務(wù)的tpl_exec_static結(jié)構(gòu)。由于tpl_exec_static里存放的信息在系統(tǒng)運(yùn)行時是不變的,因此可以把這部分放到ROM里,以節(jié)省RAM的使用。在tpl_exec_static結(jié)構(gòu)里有兩部分是體系結(jié)構(gòu)相關(guān)的,即上下文結(jié)構(gòu)context和堆棧結(jié)構(gòu)stack,它們使用指向一個或多個RAM區(qū)域的指針來保存任務(wù)執(zhí)行的上下文和堆棧信息。這種設(shè)計(jì)使得不同的任務(wù)之間可以通過共享指向上下文或堆棧結(jié)構(gòu)的指針就能共享上下文和堆棧,從而可以減少任務(wù)上下文和堆棧所占用的存儲空間。另外,Trampoline上下文結(jié)構(gòu)的設(shè)計(jì)可以使用盡可能少的RAM。例如,如果目標(biāo)平臺處理器沒有FPU(浮點(diǎn)處理器),Trampoline上下文結(jié)構(gòu)有兩個指針,第一個指向整數(shù)上下文的RAM區(qū)域,第二個指向浮點(diǎn)上下文RAM區(qū)域,這些RAM區(qū)域都是用來保存任務(wù)運(yùn)行時要使用的整數(shù)寄存器或浮點(diǎn)寄存器的。然而,并不是每個任務(wù)都需要使用浮點(diǎn)寄存器,如果任務(wù)沒有使用FPU,第二個指針將會設(shè)為空,以避免分配浮點(diǎn)寄存器所占用的RAM空間。任務(wù)上下文和堆棧結(jié)構(gòu)都屬于與體系結(jié)構(gòu)有關(guān)的代碼,內(nèi)核不直接同這部分打交道,而是通過硬件抽象層來使用它們。這樣,使得與體系結(jié)構(gòu)相關(guān)的代碼與無關(guān)的代碼隔離起來,從而便于把它移植到其他平臺。

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 万全县| 施甸县| 浦江县| 同江市| 张掖市| 卢氏县| 鸡西市| 和硕县| 应城市| 库车县| 陈巴尔虎旗| 郧西县| 大竹县| 南涧| 盘山县| 屏南县| 龙山县| 济源市| 长垣县| 上杭县| 卢湾区| 宁城县| 青龙| 拉萨市| 南靖县| 额济纳旗| 清水河县| 甘孜| 定安县| 正蓝旗| 安宁市| 新余市| 韩城市| 肇州县| 色达县| 扶余县| 五莲县| 永登县| 河北区| 郎溪县| 遂川县|