?? 00000015.htm
字號(hào):
<?xml version="1.0" encoding="gb2312"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"/><title>VXWORKS內(nèi)核分析(轉(zhuǎn)) turbolinux </title></head><body><center><h1>BBS 水木清華站∶精華區(qū)</h1></center><a name="top"></a>發(fā)信人: plato (純真年代), 信區(qū): Embedded <br />標(biāo) 題: VXWORKS內(nèi)核分析(轉(zhuǎn)) <br />發(fā)信站: BBS 水木清華站 (Wed Apr 25 22:11:57 2001) <br /> <br />1. 實(shí)時(shí)操作系統(tǒng)的結(jié)構(gòu) <br /> 在計(jì)算的早期開(kāi)發(fā)的操作系統(tǒng)的最原始的結(jié)構(gòu)形式是一個(gè)統(tǒng)一的實(shí)體(monolithic) <br />。在這樣的系統(tǒng)中,提供的不同功能的模塊,如處理器管理、內(nèi)存管理、輸入輸出等, <br />通常是獨(dú)立的。然而他們?cè)趫?zhí)行過(guò)程中并不考慮其他正在使用中的模塊,各個(gè)模塊都以 <br />相同的時(shí)間粒度運(yùn)行。 <br /> 由于現(xiàn)代實(shí)時(shí)環(huán)境需要許多不同的功能,以及在這樣的環(huán)境中存在的并發(fā)活動(dòng)所引 <br />起的異步性和非確定性,操作系統(tǒng)變得更加復(fù)雜。所以早期操作系統(tǒng)的統(tǒng)一結(jié)構(gòu)的組織 <br />已經(jīng)被更加精確的內(nèi)部結(jié)構(gòu)所淘汰。 <br />層次結(jié)構(gòu)的起點(diǎn)----內(nèi)核 <br /> 操作系統(tǒng)的最好的內(nèi)部結(jié)構(gòu)模型是一個(gè)層次性的結(jié)構(gòu),最低層是內(nèi)核。這些層次可 <br />以看成為一個(gè)倒置的金字塔,每一層都建立在較低層的功能之上。 內(nèi)核僅包含一個(gè)操作 <br />系統(tǒng)執(zhí)行的最重要的低層功能。正象一個(gè)統(tǒng)一結(jié)構(gòu)的操作系統(tǒng),內(nèi)核提供了在高層軟件 <br />與下層硬件之間的抽象層。然而,內(nèi)核僅提供了構(gòu)造操作系統(tǒng)其他部分所需的最小操作 <br />集。 <br />對(duì)一個(gè)實(shí)時(shí)內(nèi)核的要求 <br /> 一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核需滿足許多特定的實(shí)時(shí)環(huán)境所提出的基本要求,這些包括: <br /> 多任務(wù):由于真實(shí)世界的事件的異步性,能夠運(yùn)行許多并發(fā)進(jìn)程或任務(wù)是很重要的。多 <br />任務(wù)提供了一個(gè)較好的對(duì)真實(shí)世界的匹配,因?yàn)樗试S對(duì)應(yīng)于許多外部事件的多線程執(zhí) <br />行。系統(tǒng)內(nèi)核分配CPU給這些任務(wù)來(lái)獲得并發(fā)性。 <br /> 搶占調(diào)度:真實(shí)世界的事件具有繼承的優(yōu)先級(jí),在分配CPU的時(shí)候要注意到這些優(yōu)先 <br />級(jí)。基于優(yōu)先級(jí)的搶占調(diào)度,任務(wù)都被指定了優(yōu)先級(jí), 在能夠執(zhí)行的任務(wù)(沒(méi)有被掛起 <br />或正在等待資源)中,優(yōu)先級(jí)最高的任務(wù)被分配CPU資源。換句話說(shuō),當(dāng)一個(gè)高優(yōu)先級(jí)的 <br />任務(wù)變?yōu)榭蓤?zhí)行態(tài),它會(huì)立即搶占當(dāng)前正在運(yùn)行的較低優(yōu)先級(jí)的任務(wù)。 <br /> 快速靈活的任務(wù)間的通信與同步:在一個(gè)實(shí)時(shí)系統(tǒng)中,可能有許多任務(wù)作為一個(gè)應(yīng) <br />用的一部分執(zhí)行。系統(tǒng)必須提供這些任務(wù)間的快速且功能強(qiáng)大的通信機(jī)制。內(nèi)核也要提 <br />供為了有效地共享不可搶占的資源或臨界區(qū)所需的同步機(jī)制。 <br /> 方便的任務(wù)與中斷之間的通信:盡管真實(shí)世界的事件通常作為中斷方式到來(lái),但為 <br />了提供有效的排隊(duì)、優(yōu)先化和減少中斷延時(shí),我們通常希望在任務(wù)級(jí)處理相應(yīng)的工作。 <br />所以需要雜任務(wù)級(jí)和中斷級(jí)之間存在通信。 <br /> 性能邊界:一個(gè)實(shí)時(shí)內(nèi)核必須提供最壞情況的性能優(yōu)化,而非針對(duì)吞吐量的性能優(yōu) <br />化。我們更期望一個(gè)系統(tǒng)能夠始終以50微妙執(zhí)行一個(gè)函數(shù),而不期望系統(tǒng)平均以10微妙 <br />執(zhí)行該函數(shù),但偶爾會(huì)以75微妙執(zhí)行它。 <br /> 特殊考慮:由于對(duì)實(shí)時(shí)內(nèi)核的要求的增加,必須考慮對(duì)內(nèi)核支持不斷增加的復(fù)雜功 <br />能的要求。這包括多進(jìn)程處理,Ada和對(duì)更新的、功能更強(qiáng)的處理器結(jié)構(gòu)如RISC的支持。 <br /> <br />擁有其它名字的內(nèi)核 <br /> 許多商用化的內(nèi)核支持的功能遠(yuǎn)強(qiáng)于上面所列的要求。在這方面,他們不是真正的 <br />內(nèi)核,而更象一個(gè)小的統(tǒng)一結(jié)構(gòu)的操作系統(tǒng)。因?yàn)樗麄儼?jiǎn)單的內(nèi)存分配、時(shí)鐘管理 <br />、甚至一些輸入輸出系統(tǒng)調(diào)用的功能。 <br /> 這種分類不僅僅是在語(yǔ)義上的爭(zhēng)論,在這篇文章的后面章節(jié)將說(shuō)明限制內(nèi)核功能和 <br />油畫這些功能的重要性。 <br />2. VxWorks內(nèi)核:Wind <br /> VxWorks操作系統(tǒng)是一種功能最全的現(xiàn)在可以獲得的獨(dú)立于處理器的實(shí)時(shí)系統(tǒng)。然而 <br />,VxWorks是帶有一個(gè)相當(dāng)小的真正微內(nèi)核的層次結(jié)構(gòu)。內(nèi)核僅提供多任務(wù)環(huán)境、進(jìn)程間 <br />通信和同步功能。這些功能模塊足夠支持VxWorks在較高層次所提供的豐富的性能的要求 <br />。 通常內(nèi)核操作對(duì)于用戶是不可見(jiàn)的。應(yīng)用程序?yàn)榱藢?shí)現(xiàn)需要內(nèi)核參與的任務(wù)管理和同 <br />步使用一些系統(tǒng)調(diào)用,但這些調(diào)用的處理對(duì)于調(diào)用任務(wù)是不可見(jiàn)的。應(yīng)用程序僅鏈接恰 <br />當(dāng)?shù)腣xWorks例程(通常使用VxWorks的動(dòng)態(tài)鏈接功能),就象調(diào)用子程序一樣發(fā)出系統(tǒng) <br />調(diào)用。這種接口不象有些系統(tǒng)需要一個(gè)笨拙的跳轉(zhuǎn)表接口,用戶需要通過(guò)一個(gè)整數(shù)來(lái)指 <br />定一個(gè)內(nèi)核功能調(diào)用。 <br />多任務(wù) <br /> 內(nèi)核的基本功能是提供一個(gè)多任務(wù)環(huán)境。多任務(wù)使得許多程序在表面上表現(xiàn)為并發(fā) <br />執(zhí)行,而事實(shí)上內(nèi)核是根據(jù)基本的調(diào)度算法使他們分段執(zhí)行。每個(gè)明顯獨(dú)立的程序被成 <br />為一個(gè)任務(wù)。每個(gè)任務(wù)擁有自己的上下文,其中包含在內(nèi)核調(diào)度使該任務(wù)執(zhí)行的時(shí)候它 <br />所看到的CPU環(huán)境和系統(tǒng)資源。 <br />任務(wù)狀態(tài) <br /> 內(nèi)核維護(hù)系統(tǒng)中的每個(gè)任務(wù)的當(dāng)前狀態(tài)。狀態(tài)遷移發(fā)生在應(yīng)用程序調(diào)用內(nèi)核功能服 <br />務(wù)的時(shí)候。下面定義了wind內(nèi)核狀態(tài): <br /> 就緒態(tài)----一個(gè)任務(wù)當(dāng)前除了CPU不等待任何資源 <br /> 阻塞態(tài)----一個(gè)任務(wù)由于某些資源不可獲得而被阻塞 <br /> 延遲態(tài)----一個(gè)任務(wù)睡眠一段時(shí)間 <br /> 掛起態(tài)----主要用于調(diào)試的一個(gè)輔助狀態(tài),掛起禁止任務(wù)的執(zhí)行 <br /> 任務(wù)被創(chuàng)建以后進(jìn)入掛起態(tài),需要通過(guò)特定的操作使被創(chuàng)建的任務(wù)進(jìn)入就緒態(tài),這 <br />一操作執(zhí)行速度很快,使應(yīng)用程序能夠提前創(chuàng)建任務(wù),并以一種快捷的方式激活該任務(wù) <br />。 <br />調(diào)度控制 <br /> 多任務(wù)需要一個(gè)調(diào)度算法分配CPU給就緒的任務(wù)。在VxWorks中默認(rèn)的調(diào)度算法是基 <br />于優(yōu)先級(jí)的搶占調(diào)度,但應(yīng)用程序也可以選擇使用時(shí)間片輪轉(zhuǎn)調(diào)度。 <br /> 基于優(yōu)先級(jí)搶占調(diào)度:基于優(yōu)先級(jí)的搶占調(diào)度,每個(gè)任務(wù)被指定一個(gè)優(yōu)先級(jí),內(nèi)核 <br />分配CPU給處于就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)。調(diào)度采用搶占的方式,是因?yàn)楫?dāng)一個(gè)優(yōu)先級(jí) <br />高于當(dāng)前任務(wù)的任務(wù)變?yōu)榫途w態(tài)時(shí),內(nèi)核將立即保存當(dāng)前任務(wù)的上文,并切換到高優(yōu)先 <br />級(jí)任務(wù)的上文。VxWorks有從0到255共256個(gè)優(yōu)先級(jí)。在創(chuàng)建的時(shí)候任務(wù)被指定一個(gè)優(yōu)先 <br />級(jí),在任務(wù)運(yùn)行的過(guò)程中可以動(dòng)態(tài)地修改優(yōu)先級(jí)以便跟蹤真實(shí)世界的事件優(yōu)先級(jí)。外部 <br />中斷被指定優(yōu)先于任何任務(wù)的優(yōu)先級(jí),這樣能夠在任何時(shí)候搶占一個(gè)任務(wù)。 <br /> 時(shí)間片輪轉(zhuǎn):基于優(yōu)先級(jí)搶占調(diào)度可以擴(kuò)充時(shí)間片輪轉(zhuǎn)調(diào)度。時(shí)間片輪轉(zhuǎn)調(diào)度允許 <br />在相同優(yōu)先級(jí)的處于就緒態(tài)的任務(wù)公平地共享CPU。沒(méi)有時(shí)間片輪轉(zhuǎn)調(diào)度,當(dāng)有多個(gè)任務(wù) <br />在同一優(yōu)先級(jí)共享處理器時(shí),一個(gè)任務(wù)可能獨(dú)占CPU,不會(huì)被阻塞直到被一個(gè)更高優(yōu)先級(jí) <br />的任務(wù)搶占,而不給同一優(yōu)先級(jí)的其他任務(wù)運(yùn)行的機(jī)會(huì)。如果時(shí)間片輪轉(zhuǎn)被使能,執(zhí)行 <br />任務(wù)的時(shí)間計(jì)數(shù)器在每個(gè)時(shí)鐘滴答遞增。當(dāng)指定的時(shí)間片耗盡,計(jì)數(shù)器會(huì)被清零,該任 <br />務(wù)被放在同一優(yōu)先級(jí)任務(wù)隊(duì)列的隊(duì)尾。加入特定優(yōu)先級(jí)組的新任務(wù)被放在該組任務(wù)的隊(duì) <br />尾,并將運(yùn)行計(jì)數(shù)器初始化為零。 <br />基本的任務(wù)函數(shù) <br /> 用于狀態(tài)控制的基本任務(wù)函數(shù)包括一個(gè)任務(wù)的創(chuàng)建、刪除、掛起和喚醒。一個(gè) <br />任務(wù)也可以使自己睡眠一個(gè)特定的時(shí)間間隔不去運(yùn)行。 <br />許多其他任務(wù)例程提供由任務(wù)上下文獲得的狀態(tài)信息。這些例程包括訪問(wèn)一個(gè)任務(wù)當(dāng)前 <br />處理器寄存器控制。 <br />任務(wù)刪除問(wèn)題 <br /> wind內(nèi)核提供防止任務(wù)被意外刪除的機(jī)制。通常,一個(gè)執(zhí)行在臨界區(qū)或訪問(wèn)臨界資 <br />源的任務(wù)要被特別保護(hù)。我們?cè)O(shè)想下面的情況:一個(gè)任務(wù)獲得一些數(shù)據(jù)結(jié)構(gòu)的互斥訪問(wèn) <br />權(quán),當(dāng)它正在臨界區(qū)內(nèi)執(zhí)行時(shí)被另一個(gè)任務(wù)刪除。由于任務(wù)無(wú)法完成對(duì)臨界區(qū)的操作, <br />該數(shù)據(jù)結(jié)構(gòu)可能還處于被破壞或不一致的狀態(tài)。而且,假想任務(wù)沒(méi)有機(jī)會(huì)釋放該資源, <br />那麼現(xiàn)在其他任何任務(wù)現(xiàn)在就不能獲得該資源,資源被凍結(jié)了。 <br /> 任何要?jiǎng)h除或終止一個(gè)設(shè)定了刪除保護(hù)的任務(wù)的任務(wù)將被阻塞。當(dāng)被保護(hù)的任 <br />
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -