實時操作系統(tǒng)RTOS培訓(xùn)_第1頁
實時操作系統(tǒng)RTOS培訓(xùn)_第2頁
實時操作系統(tǒng)RTOS培訓(xùn)_第3頁
實時操作系統(tǒng)RTOS培訓(xùn)_第4頁
實時操作系統(tǒng)RTOS培訓(xùn)_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、實時操作系統(tǒng)RTOS培訓(xùn)實時系統(tǒng)概念l實時系統(tǒng)是指在確定的時間內(nèi)完成規(guī)定功能,并能對外部異步事件作出正確響應(yīng)的計算機系統(tǒng)實時系統(tǒng)分類l硬實時系統(tǒng):結(jié)果遲到產(chǎn)生災(zāi)難性結(jié)果lFIRM 實時系統(tǒng):結(jié)果遲到會產(chǎn)生難以接受的質(zhì)量上的降低l軟實時系統(tǒng):結(jié)果遲到會引起質(zhì)量下降,系統(tǒng)可以自行恢復(fù)衡量系統(tǒng)實時性的3個指標(biāo):l響應(yīng)時間(Response Time)l生存時間(Survival Time)l吞吐量(Throughput)嵌入式系統(tǒng)嵌入式系統(tǒng)通常都是實時系統(tǒng),其特征為l系統(tǒng)的正確性不但依賴于運行邏輯結(jié)果的正確性,而且依賴于得到結(jié)果所花費的時間l系統(tǒng)對于各種外部輸入在預(yù)定時間內(nèi)能得到可以預(yù)測的結(jié)果嵌入式

2、系統(tǒng)通常使用RTOS,其特征為l在不同的系統(tǒng)負載下,行為可以預(yù)測l支持基于優(yōu)先級的調(diào)度lMEMORY模型對于RTOS的性能十分重要l通常都需要一個時鐘來處理任務(wù)的同步HRTSRTNRT內(nèi)存分配SD/SD虛存 NNYS-STATIC D-DYNAMIC比較嵌入式系統(tǒng)(續(xù))硬件特性l體積小,集成效率高l面向特定應(yīng)用l低功耗,能在惡劣環(huán)境下工作軟件特性l軟件的研發(fā)與硬件緊密相關(guān)l軟件代碼要求高效率和高可靠性l軟件一般固化在FLASH或ROM中應(yīng)用l工業(yè)過程控制l軍事電子設(shè)備和現(xiàn)代武器l網(wǎng)絡(luò)通信設(shè)備l消費電子產(chǎn)品嵌入式實時系統(tǒng)軟件特征實時性:反應(yīng)時間要快,按要求的間隔輸出正確時間信號實時性:反應(yīng)時間要

3、快,按要求的間隔輸出正確時間信號給實時的控制設(shè)備給實時的控制設(shè)備多任務(wù)并發(fā)性:利用適當(dāng)?shù)牟呗钥刂贫嗳蝿?wù)的執(zhí)行,提高資源的利多任務(wù)并發(fā)性:利用適當(dāng)?shù)牟呗钥刂贫嗳蝿?wù)的執(zhí)行,提高資源的利用效率用效率有處理異步事件的能力有處理異步事件的能力快速啟動,并有出錯處理和自動復(fù)位功能快速啟動,并有出錯處理和自動復(fù)位功能嵌入式實時軟件是應(yīng)用程序和操作系統(tǒng)兩種軟件的一體化程序嵌入式實時軟件是應(yīng)用程序和操作系統(tǒng)兩種軟件的一體化程序嵌入式實時軟件的開發(fā)需要獨立的開發(fā)平臺和交叉開發(fā)環(huán)嵌入式實時軟件的開發(fā)需要獨立的開發(fā)平臺和交叉開發(fā)環(huán)境境主要的嵌入式實時操作系統(tǒng)VxWorksl使用最廣、市場占有率最高的嵌入式實時操作系統(tǒng)

4、,美國WindRiver公司產(chǎn)品VRTXl老牌嵌入式實時操作系統(tǒng)pSOSlISI公司推出,現(xiàn)已被WindRiver公司收購WinCElMicrosoft公司推出,實時性不太好,主要用于掌上系統(tǒng)Palm OSl3Com公司推出,在PDA市場占有很大份額嵌入式Linuxl源代碼免費開放,eCOS是Redhat推出的一款嵌入式LINUX操作系統(tǒng)前后臺系統(tǒng)通常應(yīng)用于不復(fù)雜的小型系統(tǒng)應(yīng)用程序是一個無限的循環(huán),這部分可以看成后臺行為(background)中斷服務(wù)程序處理異步事件,這部分可以看成前臺行為(foreground)后臺也可以叫做任務(wù)級,前臺也叫中斷級前后臺系統(tǒng)(續(xù))多任務(wù)系統(tǒng)CPU在許多任務(wù)之

5、間轉(zhuǎn)換、調(diào)度,輪番服務(wù)于一系列任務(wù)中的某一個優(yōu)點:l使CPU 的利用率得到最大的發(fā)揮l使應(yīng)用程序模塊化l可以將很復(fù)雜的應(yīng)用程序?qū)哟位痩應(yīng)用程序l將更容易設(shè)計與維護RTOS組成操作系統(tǒng)是硬件與用戶之間的一層系統(tǒng)軟件, 負責(zé)管理整個系統(tǒng),同時將硬件細節(jié)與用戶隔離開來為用戶提供一個更容易理解和進行程序設(shè)計的接口操作系統(tǒng)的質(zhì)量以它的體系結(jié)構(gòu)為基礎(chǔ),確保系統(tǒng)的性能、可靠性、靈活性、可移植性、可擴展性等,同時定義了硬件與軟件的界面,操作系統(tǒng)內(nèi)部各構(gòu)件的組織關(guān)系系統(tǒng)與用戶的接口RTOS資源分配必須考慮到實時性要求l合理分配優(yōu)先級l支持優(yōu)先級搶占l提供任務(wù)同步和互斥l支持不同任務(wù)之間的數(shù)據(jù)共享l支持外部事件(

6、中斷)響應(yīng)l系統(tǒng)可剪裁,由于資源限制,所采用的操作系統(tǒng)應(yīng)該有極強的針對性,因此操作系統(tǒng)功能夠用即可l易于擴展,由于嵌入式設(shè)備的功能多樣化,要求嵌入式操作系統(tǒng)除提供基本的內(nèi)核支持外,還需提供越來越多的可擴展功能模塊(含用戶擴展),如:針對特有應(yīng)用提供的協(xié)議支持、協(xié)議擴展,功耗控制等等RTOS組成(續(xù))HALRTOS 基本內(nèi)核l線程線程管理l時鐘管理l中斷設(shè)備驅(qū)動管理l通信管理l存儲管理RTOS擴展內(nèi)核l接口協(xié)議管理l其它APIRTOS組成(續(xù))基本內(nèi)核:嵌入式RTOS 中最核心最基礎(chǔ)的部分l任務(wù)(線程/線程)管理:負責(zé)系統(tǒng)中任務(wù)狀態(tài)的變遷l中斷(包括時鐘中斷)管理:開關(guān)中斷,完成現(xiàn)場切換和保持l

7、任務(wù)(線程/線程)通信管理:信號量、事件、消息隊列等l存儲管理:分配存儲器空間擴展內(nèi)核:為方便用戶使用而對RTOS 進行的擴展l根據(jù)具體應(yīng)用不同所做的擴展不同lCAM應(yīng)用中表現(xiàn)為對CI接口協(xié)議進行管理設(shè)備驅(qū)動程序接口:RTOS 內(nèi)核與外部硬件之間的一個硬件抽象層l定義軟件與硬件的界限,方便RTOS 的移植升級應(yīng)用編程接口:建立在RTOS 編程接口之上的面向應(yīng)用領(lǐng)域的編程接口l方便用戶編寫特定領(lǐng)域的嵌入式應(yīng)用程序RTS的響應(yīng)時間及時性是實時系統(tǒng)最為重要的特性設(shè)計者應(yīng)該能預(yù)測實時系統(tǒng)的行為同步任務(wù)由時鐘來同步異步事件通常由中斷驅(qū)動一個多任務(wù)RTOS的事例Resource allocation &a

8、mp; mgmtTask Scheduling & DispatchReal time clockInterrupt Service routinesI/O SubsystemFile MGMTSystem tasks Application tasksUser LevelOS LevelCommand processor資源任何為任務(wù)所占用的實體都可稱為資源。資源可以是輸入輸出設(shè)備,例如打印機、鍵盤、顯示器,資源也可以是一個變量,一個結(jié)構(gòu)或一個數(shù)組等可以被一個以上任務(wù)使用的資源叫做共享資源為了防止數(shù)據(jù)被破壞,每個任務(wù)在與共享資源打交道時,必須獨占該資源,這叫做互斥(mutual ex

9、clusion)任務(wù)一個任務(wù)也稱作一個線程,是一個簡單的程序,該程序可以認為CPU 完全只屬該程序自己每個任務(wù)都是整個應(yīng)用的某一部分,被賦予一定的優(yōu)先級,有自己的一套CPU 寄存器和??臻g多任務(wù)系統(tǒng)中,任意時刻只有一個任務(wù)占有CPU資源一個任務(wù)通常是一個無限的循環(huán),當(dāng)任務(wù)完成以后,任務(wù)可以自我刪除TCB(任務(wù)控制塊)TCB在任務(wù)建立時將被賦值(初始化)TCB是一個數(shù)據(jù)結(jié)構(gòu),用來保存該任務(wù)的狀態(tài):堆棧指針、堆棧大小、任務(wù)狀態(tài)、任務(wù)優(yōu)先級任務(wù)重新得到CPU 使用權(quán)時,任務(wù)控制塊能確保任務(wù)從當(dāng)時被中斷的那一點絲毫不差地繼續(xù)執(zhí)行TCBs全部駐留在RAM 中任務(wù)狀態(tài)每個任務(wù)都處在以下5 種狀態(tài)之一:休眠

10、態(tài),就緒態(tài)、運行態(tài)、掛起態(tài)和被中斷態(tài)休眠態(tài):該任務(wù)駐留在內(nèi)存中,但并不被內(nèi)核所調(diào)度就緒態(tài):該任務(wù)已經(jīng)準備好運行,但由于優(yōu)先級比正運行的任務(wù)優(yōu)先級低,還暫時不能運行運行態(tài):掌握了CPU 的控制權(quán),正在運行中掛起態(tài):也叫等待態(tài),在等待某一事件的發(fā)生中斷態(tài):發(fā)生中斷時,進入相應(yīng)的中斷服務(wù)任務(wù)狀態(tài)變遷圖WAITINGDORMANTREADYRUNNINGISR任務(wù)狀態(tài)變遷就緒 - 運行l(wèi)調(diào)度程序選擇一個新的線程運行運行 - 就緒l運行線程用完了時間片l運行線程被高優(yōu)先級線程搶占運行 - 等待l當(dāng)一線程必須等待時l等待某外設(shè)的I/O 操作l等待某共享資源由暫不能使用變成能使用狀態(tài)l等待定時脈沖的到來或等

11、待超時信號的到來以結(jié)束目前的等待l等待 - 就緒l當(dāng)所等待的事件發(fā)生時任務(wù)切換也稱為上下文切換(Context Switch)當(dāng)多任務(wù)內(nèi)核決定運行另外的任務(wù)時:l保存正在運行任務(wù)的當(dāng)前狀態(tài)(Context),即CPU 寄存器中的全部內(nèi)容。這些內(nèi)容保存在任務(wù)自己的棧區(qū)之中l(wèi)把下一個將要運行的任務(wù)的當(dāng)前狀況從該任務(wù)的棧中重新裝入CPU 的寄存器,并開始下一個任務(wù)的運行任務(wù)切換過程增加了應(yīng)用程序的額外負荷任務(wù)調(diào)度任務(wù)調(diào)度就是按一定的調(diào)度算法從就緒任務(wù)中選中一個任務(wù)到處理器上運行主要工作:l(1)記錄當(dāng)前任務(wù)狀態(tài)(如指令計數(shù)器、狀態(tài)寄存器、通用寄存器等)到TCB;l(2)根據(jù)調(diào)度算法,在就緒任務(wù)中選一

12、個任務(wù);l(3)回收處理機并分配給選中的任務(wù)。任務(wù)調(diào)度方式非搶占式調(diào)度搶占式調(diào)度l由于嵌入式操作系統(tǒng)對實時性的較強要求,因此基本上使用搶占式調(diào)度。調(diào)度算法lFIFO:先來先服務(wù)l短作業(yè)優(yōu)先l基于優(yōu)先級:l時間片輪轉(zhuǎn)(Round Robin) : 固定時間片 可變時間片l多級隊列算法l多級反饋隊列算法l其它組合策略調(diào)度算法非搶占式調(diào)度搶占式調(diào)度可重入性(Reentrancy )可重入型函數(shù)可以被一個以上的任務(wù)調(diào)用,而不必擔(dān)心數(shù)據(jù)的破壞可重入型函數(shù)任何時候都可以被中斷,一段時間以后又可以運行編寫可重入型函數(shù)需遵循的規(guī)則:l使用局部變量,即變量保存在CPU寄存器或堆棧中l(wèi)盡量不使用static或ex

13、tern變量任務(wù)優(yōu)先級每個任務(wù)都有其優(yōu)先級。任務(wù)越重要,賦予的優(yōu)先級應(yīng)越高eCos任務(wù)及優(yōu)先級優(yōu)先級0255,優(yōu)先級的最低3bits忽略,因此07、815各組內(nèi)的優(yōu)先級相同,組外數(shù)值越大,優(yōu)先級越高eCos任務(wù)結(jié)構(gòu):roottask1task2task3task4task5idle任務(wù)管理創(chuàng)建任務(wù)(CreateTask)刪除任務(wù)(DeleteTask)掛起任務(wù)()喚醒任務(wù)()改變?nèi)蝿?wù)優(yōu)先級()獲取任務(wù)優(yōu)先級()獲取當(dāng)前任務(wù)ID任務(wù)管理(sidsa API)t_create lULONG t_create(char name4, ULONG prio, ULONG sstack, ULONG u

14、stack, ULONG flags, ULONG *tid)t_start lULONG t_start(ULONG tid, ULONG mode, void *start_addr, ULONG targs)t_delete lULONG t_delete(ULONG tid)t_suspend lULONG t_suspend(ULONG tid)t_resume lULONG t_resume(ULONG tid)t_wkafter lULONG tm_wkafter(ULONG ticks)任務(wù)管理(kernel API)cyg_thread_createcyg_thread_ex

15、itcyg_thread_killcyg_thread_deletecyg_thread_yieldcyg_thread_delaycyg_thread_suspendcyg_thread_resumecyg_thread_release任務(wù)管理(kernel API 續(xù))cyg_thread_get_prioritycyg_thread_get_current_prioritycyg_thread_set_prioritycyg_thread_selfcyg_thread_idle_threadcyg_thread_get_stack_basecyg_thread_get_stack_siz

16、ecyg_thread_measure_stack_usagecyg_thread_get_nextcyg_thread_get_infocyg_thread_find任務(wù)間通信及同步共享內(nèi)存(Share Memory)信號量(Semaphore)互斥量(Mutex)事件標(biāo)志(Event Flag)消息郵箱(Message Box)消息隊列(Message Queue)信號量(Semaphore)信號量用于:l控制共享資源的使用權(quán)(滿足互斥條件)l標(biāo)志某事件的發(fā)生l使兩個任務(wù)的行為同步一個信號量是一個16位變量,初值為065535,值為0表示資源處于鎖住狀態(tài),非0表示有多個資源,供多個任務(wù)訪問

17、信號量表示符號:鑰匙或旗幟信號量的P、V操作等待信號量( P操作):l如果信號量值大于0,則信號量值減1,任務(wù)得以繼續(xù)運行l(wèi)如果信號量的值為0,等待信號量的任務(wù)被掛起并列入等待信號量任務(wù)表釋放信號量(V操作):l如果沒有任務(wù)在等待信號量,信號量的值僅僅是簡單地加1l如果有任務(wù)在等待該信號量,那么就會有一個任務(wù)進入就緒態(tài),信號量的值也就不加1lP、V操作為原語操作,原語(primitive or atomic action): 是由若干多機器指令構(gòu)成的完成某種特定功能的一段程序,具有不是由若干多機器指令構(gòu)成的完成某種特定功能的一段程序,具有不可分割性可分割性即原語的執(zhí)行必須是連續(xù)的,在執(zhí)行過程中

18、不允許被中斷即原語的執(zhí)行必須是連續(xù)的,在執(zhí)行過程中不允許被中斷實現(xiàn):開關(guān)中斷實現(xiàn):開關(guān)中斷l(xiāng)信號量的使用:l必須置一次且只能置一次初值l初值不能為負數(shù) l只能執(zhí)行P、V操作信號量的P、V操作(續(xù))用P、V操作解決線程間互斥問題P(mutex)V(mutex)P1P2P3互斥區(qū)互斥區(qū)P(mutex)P(mutex)V(mutex)V(mutex)優(yōu)先級反轉(zhuǎn)問題優(yōu)先級反轉(zhuǎn)問題(續(xù))設(shè)計中應(yīng)注意避免產(chǎn)生優(yōu)先級反轉(zhuǎn)優(yōu)先級繼承(Priority inheritance)可解決優(yōu)先級反轉(zhuǎn)問題經(jīng)典的生產(chǎn)者消費者問題消費者消費者生產(chǎn)者生產(chǎn)者經(jīng)典的生產(chǎn)者消費者問題(續(xù)1)同步問題: P線程不能往“滿”的緩沖區(qū)中

19、放產(chǎn)品,設(shè)置信號量為S1 Q線程不能從“空”的緩沖區(qū)中取產(chǎn)品,設(shè)置信號量S2P: Q:while (true) while (true) 生產(chǎn)一個產(chǎn)品; P(s2); P(s1) ; 從緩沖區(qū)取產(chǎn)品; 送產(chǎn)品到緩沖區(qū); V(s1); V(s2); 消費產(chǎn)品; ;S1初值為1,S2初值為0.PQ放 消 息取 消 息nn個 緩 沖 區(qū)(Buffer)ij多個緩沖區(qū)的生產(chǎn)者和消費者P:i = 0;while (true) 生產(chǎn)產(chǎn)品; P(S1); 往Buffer i放產(chǎn)品; V(S2); i = (i+1) % n; ;Q: j = 0; while (true) P(S2); 從Bufferj取產(chǎn)

20、品; V(S1); 消費產(chǎn)品; j = (j+1) % n; ;S1初值為n,S2初值為0Q: j = 0; while (true) P(S2); P(mutex2); 從Bufferj取產(chǎn)品; V(mutex2); V(S1); 消費產(chǎn)品; j = (j+1) % n; ;n個緩沖區(qū)、m個生產(chǎn)者和k個消費者P:i = 0;while (true) 生產(chǎn)產(chǎn)品; P(S1); P(mutex1); 往Buffer i放產(chǎn)品; V(mutex1); V(S2); i = (i+1) % n; ;錯誤錯誤S1初值為n,S2初值為0線程數(shù)為線程數(shù)為mm線程數(shù)為線程數(shù)為k kQ: j = 0; whi

21、le (true) P(S2); P(mutex2); 從Bufferj取產(chǎn)品; j = (j+1) % n; V(mutex2); V(S1); 消費產(chǎn)品;n個緩沖區(qū)、m個生產(chǎn)者和k個消費者P:i = 0;while (true) 生產(chǎn)產(chǎn)品; P(S1); P(mutex1); 往Buffer i放產(chǎn)品; i = (i+1) % n; V(mutex1); V(S2); ;正確正確S1初值為n,S2初值為0線程數(shù)為線程數(shù)為mm線程數(shù)為線程數(shù)為k k1) 信號量的物理含義:S0表示有S個資源可用S=0表示無資源可用S0則| S |表示S等待隊列中的線程個數(shù)P(S):表示申請一個資源 V(S):

22、表示釋放一個資源。信號量的初值應(yīng)該大于等于0信號量及P、V操作討論2) P.V操作必須成對出現(xiàn),有一個P操作就一定有一個V操作當(dāng)為互斥操作時,它們同處于同一線程當(dāng)為同步操作時,則不在同一線程中出現(xiàn)如果P(S1)和P(S2)兩個操作在一起,那么P操作的順序至關(guān)重要,一個同步P操作與一個互斥P操作在一起時同步P操作在互斥P操作前而兩個V操作無關(guān)緊要信號量及P、V操作討論(續(xù)1)3)P.V操作的優(yōu)缺點優(yōu)點: 簡單,而且表達能力強(用P.V操作可解決任何同步互斥問題)缺點: 不夠安全;P.V操作使用不當(dāng)會出現(xiàn)死鎖;遇到復(fù)雜同步互斥問題時實現(xiàn)復(fù)雜信號量及P、V操作討論(續(xù)2)【思考題】1.用P.V操作解

23、決下圖之同步問題:getcopyputfstg用P.V操作解決司機與售票員的問題司機線程:司機線程:while while (true)(true)啟動車輛啟動車輛正常駕駛正常駕駛到站停車到站停車售票員線程:售票員線程:while while (true)(true)關(guān)門關(guān)門售票售票開門開門信號量管理創(chuàng)建信號量(SemCreate)釋放信號量(SemPost)等待信號量(SemPend)l信號量為0時任務(wù)掛起,永久或有限等待無等待取信號量(SemAccept)l信號量為0時任務(wù)不會掛起,返回0eCos的信號量管理(sidsa API)sm_createlULONG sm_create(char

24、 name4, ULONG count, ULONG flags, ULONG *smid)sm_deletelULONG sm_delete(ULONG smid)sm_plULONG sm_p(ULONG smid, ULONG flags, ULONG timeout)sm_vlULONG sm_v(ULONG smid)eCos的信號量管理(kernel API)cyg_semaphore_initcyg_semaphore_destroycyg_semaphore_waitcyg_semaphore_timed_waitcyg_semaphore_trywaitcyg_semapho

25、re_postcyg_semaphore_peek互斥量(Mutex)一個互斥量就是一個同步對象,用于多任務(wù)串行訪問共享數(shù)據(jù)只有一個任務(wù)可以獲得和擁有一個互斥量,也只有這個任務(wù)隨后才能釋放這個互斥量互斥量是取值為0-1的二元信號量互斥量管理創(chuàng)建互斥量(MutexCreate)刪除互斥量(MutexDelete)等待互斥量(MutexPend)釋放互斥量(MutexPost)無等待獲取互斥量(MutexAccept)互斥量管理(sidsa API)NA互斥量管理(kernel API)cyg_mutex_initcyg_mutex_destroycyg_mutex_lockcyg_mutex_t

26、rylockcyg_mutex_unlockcyg_mutex_releasecyg_mutex_set_ceilingcyg_mutex_set_protocol事件標(biāo)志(Event Flags)事件標(biāo)志用于任務(wù)與多個事件的同步l獨立型同步(即邏輯或關(guān)系):任務(wù)需要與任何事件之一發(fā)生同步l關(guān)聯(lián)型同步(邏輯與關(guān)系):任務(wù)需要與若干事件都發(fā)生了同步事件標(biāo)志通常為32位變量,每個事件占一位(bit),當(dāng)一個標(biāo)志處于設(shè)置狀態(tài)(1)時,表示相關(guān)事件已經(jīng)發(fā)生事件標(biāo)志組管理創(chuàng)建事件標(biāo)志組(FLagCreate)置位事件標(biāo)志(FlagPost)等待事件標(biāo)志位(FlagPend)無等待獲取事件標(biāo)志位(Flag

27、Accept)清除事件標(biāo)志位(FlagClear)l在再次發(fā)送事件標(biāo)志前,應(yīng)先清除該標(biāo)志事件標(biāo)志組管理(sidsa API)ev_sendlULONG ev_send(ULONG tid, ULONG events)ev_receivelULONG ev_receive(ULONG events, ULONG flags, ULONG timeout, ULONG *events_r)事件標(biāo)志組管理(kernel API)cyg_flag_initcyg_flag_destroycyg_flag_setbitscyg_flag_maskbitscyg_flag_waitcyg_flag_tim

28、ed_waitcyg_flag_pollcyg_flag_peekcyg_flag_waiting消息郵箱(Message Box)消息郵箱也稱作交換消息,是用一個指針型變量放到郵箱,該指針指向的內(nèi)容就是那則消息消息郵箱用于一個線程向另一個線程發(fā)送消息,實現(xiàn)線程間通信用一個I 字表示郵箱符號消息郵箱管理創(chuàng)建郵箱(MboxCreate)發(fā)送消息(MboxPost)l消息放入郵箱后,或者是把消息傳給等待消息的任務(wù)表中優(yōu)先級最高的那個任務(wù)(基于優(yōu)先級),或者是將消息傳給最先開始等待消息的任務(wù)(基于先進先出)l郵箱只能保存一個消息,試圖向已存有消息的郵箱發(fā)送消息會導(dǎo)致“郵箱滿”錯誤等待消息(MboxP

29、end)l等待消息的任務(wù)會因為郵箱是空的而被掛起,且被記錄到等待消息的任務(wù)表中,直到收到消息無等待取消息(MboxAccept)l如果郵箱是空的任務(wù)也不會掛起,此時返回值為NULL表示無消息消息郵箱管理(sidsa API)NA消息郵箱管理(kernel API)cyg_mbox_createcyg_mbox_deletecyg_mbox_getcyg_mbox_timed_getcyg_mbox_trygetcyg_mbox_peekcyg_mbox_peek_itemcyg_mbox_putcyg_mbox_timed_putcyg_mbox_tryputcyg_mbox_waiting_

30、to_getcyg_mbox_waiting_to_put消息隊列(Message Queue)消息隊列實際上是郵箱陣列任務(wù)先得到的是最先進入消息隊列的消息,即先進先出原則(FIFO)用2個I 字表示郵箱隊列符號消息隊列管理創(chuàng)建消息隊列(QCreate)發(fā)送消息(QPost)l消息放入消息隊列后,或者是把消息傳給等待消息的任務(wù)表中優(yōu)先級最高的那個任務(wù)(基于優(yōu)先級),或者是將消息傳給最先開始等待消息的任務(wù)(基于先進先出)l如果消息隊列內(nèi)的消息已滿,會導(dǎo)致“消息滿”錯誤等待消息(QPend)l等待消息的任務(wù)會因為消息隊列是空的而被掛起,直到收到消息無等待取消息(QAccept)l如果郵箱是空的任務(wù)

31、也不會掛起,此時返回值為NULL表示無消息消息隊列管理(sidsa API)q_createlULONG q_create(char name4, ULONG count, ULONG flags, ULONG *qid)q_deletelULONG q_delete(ULONG qid)q_sendlULONG q_send(ULONG qid, ULONG msg_buf4)q_receivelULONG q_receive(ULONG qid, ULONG flags, ULONG timeout, ULONG msg_buf4)消息隊列管理(kernel API)NA設(shè)備驅(qū)動程序概述1

32、、I/O的特點(1)I/O性能經(jīng)常成為系統(tǒng)性能的瓶頸lCPU性能不等于系統(tǒng)性能,響應(yīng)時間也是一個重要因素lCPU性能越高,與I/O差距越大 彌補:更多的線程l線程切換多,系統(tǒng)開銷大(2)操作系統(tǒng)龐大復(fù)雜的原因之一是:資源多、雜,并發(fā),均來自I/O 外設(shè)種類繁多,結(jié)構(gòu)各異 輸入輸出數(shù)據(jù)信號類型不同 速度差異很大(3)理解I/O的工作過程與結(jié)構(gòu)是理解操作系統(tǒng)的工作過程與結(jié)構(gòu)的關(guān)鍵(1)按照用戶的請求,控制設(shè)備的各種操作,完成I/O設(shè)備與內(nèi)存之間的數(shù)據(jù)交換(包括設(shè)備分配與回收;設(shè)備驅(qū)動程序;設(shè)備中斷處理;緩沖區(qū)管理),最終完成用戶的I/O請求l設(shè)備分配與回收 記錄設(shè)備的狀態(tài) 根據(jù)用戶的請求和設(shè)備的類

33、型,采用一定的分配算法,選擇一條數(shù)據(jù)通路 l建立統(tǒng)一的獨立于設(shè)備的接口l完成設(shè)備驅(qū)動程序,實現(xiàn)真正的I/O操作l處理外部設(shè)備的中斷處理l管理I/O緩沖區(qū)設(shè)備管理的目標(biāo)和任務(wù)(2)向用戶提供使用外部設(shè)備的方便接口,使用戶擺脫繁瑣的編程負擔(dān)l 方便性l 友好界面l 透明性屏蔽硬件細節(jié)(設(shè)備的物理細節(jié),錯誤處理,不同I/O的差異性)(3)充分利用各種技術(shù)(通道,中斷,緩沖等)提高CPU與設(shè)備、設(shè)備與設(shè)備之間的并行工作能力,充分利用資源,提高資源利用率l 并行性l 均衡性(使設(shè)備充分忙碌)設(shè)備管理的目標(biāo)和任務(wù)(續(xù))(4)保證多個線程競爭使用設(shè)備時,按一定策略分配和管理各種設(shè)備,使系統(tǒng)能有條不紊的工作(5)保護 設(shè)備傳送或管理的數(shù)據(jù)應(yīng)該是安全的、不被破壞的、保密的(6)與設(shè)備無關(guān)性(設(shè)備獨立性) 用戶在編制程序時,使用邏輯設(shè)備名,由系統(tǒng)實現(xiàn)邏輯設(shè)備到物理設(shè)備(實際設(shè)備)的轉(zhuǎn)換,用戶能獨立于具體物理設(shè)備而方便的使用設(shè)備設(shè)備管理的目標(biāo)和任務(wù)(續(xù)) 用戶申請使用設(shè)備時,只需要指定設(shè)備類型,而無須指定具體物理設(shè)備,系統(tǒng)根據(jù)當(dāng)前

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論