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