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

下載本文檔

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

文檔簡介

深圳國微技術(shù)有限公司2005-07-11實(shí)時(shí)操作系統(tǒng)(RTOS)培訓(xùn)深圳國微技術(shù)有限公司實(shí)時(shí)操作系統(tǒng)(RTOS)培訓(xùn)1實(shí)時(shí)系統(tǒng)概念實(shí)時(shí)系統(tǒng)是指在確定的時(shí)間內(nèi)完成規(guī)定功能,并能對(duì)外部異步事件作出正確響應(yīng)的計(jì)算機(jī)系統(tǒng)實(shí)時(shí)系統(tǒng)分類硬實(shí)時(shí)系統(tǒng):結(jié)果遲到產(chǎn)生災(zāi)難性結(jié)果FIRM實(shí)時(shí)系統(tǒng):結(jié)果遲到會(huì)產(chǎn)生難以接受的質(zhì)量上的降低軟實(shí)時(shí)系統(tǒng):結(jié)果遲到會(huì)引起質(zhì)量下降,系統(tǒng)可以自行恢復(fù)衡量系統(tǒng)實(shí)時(shí)性的3個(gè)指標(biāo):響應(yīng)時(shí)間(ResponseTime)生存時(shí)間(SurvivalTime)吞吐量(Throughput)實(shí)時(shí)系統(tǒng)概念2嵌入式系統(tǒng)嵌入式系統(tǒng)通常都是實(shí)時(shí)系統(tǒng),其特征為系統(tǒng)的正確性不但依賴于運(yùn)行邏輯結(jié)果的正確性,而且依賴于得到結(jié)果所花費(fèi)的時(shí)間系統(tǒng)對(duì)于各種外部輸入在預(yù)定時(shí)間內(nèi)能得到可以預(yù)測(cè)的結(jié)果嵌入式系統(tǒng)通常使用RTOS,其特征為在不同的系統(tǒng)負(fù)載下,行為可以預(yù)測(cè)支持基于優(yōu)先級(jí)的調(diào)度MEMORY模型對(duì)于RTOS的性能十分重要通常都需要一個(gè)時(shí)鐘來處理任務(wù)的同步HRTSRTNRT內(nèi)存分配SD/SD虛存NNYS-STATICD-DYNAMIC比較嵌入式系統(tǒng)嵌入式系統(tǒng)通常都是實(shí)時(shí)系統(tǒng),其特征為HRTSRTN3嵌入式系統(tǒng)(續(xù))硬件特性體積小,集成效率高面向特定應(yīng)用低功耗,能在惡劣環(huán)境下工作軟件特性軟件的研發(fā)與硬件緊密相關(guān)軟件代碼要求高效率和高可靠性軟件一般固化在FLASH或ROM中應(yīng)用工業(yè)過程控制軍事電子設(shè)備和現(xiàn)代武器網(wǎng)絡(luò)通信設(shè)備消費(fèi)電子產(chǎn)品嵌入式系統(tǒng)(續(xù))硬件特性4嵌入式實(shí)時(shí)系統(tǒng)軟件特征實(shí)時(shí)性:反應(yīng)時(shí)間要快,按要求的間隔輸出正確時(shí)間信號(hào)給實(shí)時(shí)的控制設(shè)備多任務(wù)并發(fā)性:利用適當(dāng)?shù)牟呗钥刂贫嗳蝿?wù)的執(zhí)行,提高資源的利用效率有處理異步事件的能力快速啟動(dòng),并有出錯(cuò)處理和自動(dòng)復(fù)位功能嵌入式實(shí)時(shí)軟件是應(yīng)用程序和操作系統(tǒng)兩種軟件的一體化程序嵌入式實(shí)時(shí)軟件的開發(fā)需要獨(dú)立的開發(fā)平臺(tái)和交叉開發(fā)環(huán)境嵌入式實(shí)時(shí)系統(tǒng)軟件特征實(shí)時(shí)性:反應(yīng)時(shí)間要快,按要求的間隔輸出5主要的嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks使用最廣、市場(chǎng)占有率最高的嵌入式實(shí)時(shí)操作系統(tǒng),美國WindRiver公司產(chǎn)品VRTX老牌嵌入式實(shí)時(shí)操作系統(tǒng)pSOSISI公司推出,現(xiàn)已被WindRiver公司收購WinCEMicrosoft公司推出,實(shí)時(shí)性不太好,主要用于掌上系統(tǒng)PalmOS3Com公司推出,在PDA市場(chǎng)占有很大份額嵌入式Linux源代碼免費(fèi)開放,eCOS是Redhat推出的一款嵌入式LINUX操作系統(tǒng)主要的嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks6前后臺(tái)系統(tǒng)通常應(yīng)用于不復(fù)雜的小型系統(tǒng)應(yīng)用程序是一個(gè)無限的循環(huán),這部分可以看成后臺(tái)行為(background)中斷服務(wù)程序處理異步事件,這部分可以看成前臺(tái)行為(foreground)后臺(tái)也可以叫做任務(wù)級(jí),前臺(tái)也叫中斷級(jí)前后臺(tái)系統(tǒng)通常應(yīng)用于不復(fù)雜的小型系統(tǒng)7前后臺(tái)系統(tǒng)(續(xù))前后臺(tái)系統(tǒng)(續(xù))8多任務(wù)系統(tǒng)CPU在許多任務(wù)之間轉(zhuǎn)換、調(diào)度,輪番服務(wù)于一系列任務(wù)中的某一個(gè)優(yōu)點(diǎn):使CPU的利用率得到最大的發(fā)揮使應(yīng)用程序模塊化可以將很復(fù)雜的應(yīng)用程序?qū)哟位瘧?yīng)用程序?qū)⒏菀自O(shè)計(jì)與維護(hù)多任務(wù)系統(tǒng)CPU在許多任務(wù)之間轉(zhuǎn)換、調(diào)度,輪番服務(wù)于一系列任9RTOS組成操作系統(tǒng)是硬件與用戶之間的一層系統(tǒng)軟件,負(fù)責(zé)管理整個(gè)系統(tǒng),同時(shí)將硬件細(xì)節(jié)與用戶隔離開來為用戶提供一個(gè)更容易理解和進(jìn)行程序設(shè)計(jì)的接口操作系統(tǒng)的質(zhì)量以它的體系結(jié)構(gòu)為基礎(chǔ),確保系統(tǒng)的性能、可靠性、靈活性、可移植性、可擴(kuò)展性等,同時(shí)定義了硬件與軟件的界面,操作系統(tǒng)內(nèi)部各構(gòu)件的組織關(guān)系系統(tǒng)與用戶的接口RTOS資源分配必須考慮到實(shí)時(shí)性要求合理分配優(yōu)先級(jí)支持優(yōu)先級(jí)搶占提供任務(wù)同步和互斥支持不同任務(wù)之間的數(shù)據(jù)共享支持外部事件(中斷)響應(yīng)系統(tǒng)可剪裁,由于資源限制,所采用的操作系統(tǒng)應(yīng)該有極強(qiáng)的針對(duì)性,因此操作系統(tǒng)功能夠用即可易于擴(kuò)展,由于嵌入式設(shè)備的功能多樣化,要求嵌入式操作系統(tǒng)除提供基本的內(nèi)核支持外,還需提供越來越多的可擴(kuò)展功能模塊(含用戶擴(kuò)展),如:針對(duì)特有應(yīng)用提供的協(xié)議支持、協(xié)議擴(kuò)展,功耗控制等等RTOS組成操作系統(tǒng)是硬件與用戶之間的一層系統(tǒng)軟件,負(fù)責(zé)管10RTOS組成(續(xù))HALRTOS基本內(nèi)核線程線程管理時(shí)鐘管理中斷設(shè)備驅(qū)動(dòng)管理通信管理存儲(chǔ)管理RTOS擴(kuò)展內(nèi)核接口協(xié)議管理其它APIRTOS組成(續(xù))HALRTOS基本內(nèi)核RTOS擴(kuò)展內(nèi)核A11RTOS組成(續(xù))基本內(nèi)核:嵌入式RTOS中最核心最基礎(chǔ)的部分任務(wù)(線程/線程)管理:負(fù)責(zé)系統(tǒng)中任務(wù)狀態(tài)的變遷中斷(包括時(shí)鐘中斷)管理:開關(guān)中斷,完成現(xiàn)場(chǎng)切換和保持任務(wù)(線程/線程)通信管理:信號(hào)量、事件、消息隊(duì)列等存儲(chǔ)管理:分配存儲(chǔ)器空間擴(kuò)展內(nèi)核:為方便用戶使用而對(duì)RTOS進(jìn)行的擴(kuò)展根據(jù)具體應(yīng)用不同所做的擴(kuò)展不同CAM應(yīng)用中表現(xiàn)為對(duì)CI接口協(xié)議進(jìn)行管理設(shè)備驅(qū)動(dòng)程序接口:RTOS內(nèi)核與外部硬件之間的一個(gè)硬件抽象層定義軟件與硬件的界限,方便RTOS的移植升級(jí)應(yīng)用編程接口:建立在RTOS編程接口之上的面向應(yīng)用領(lǐng)域的編程接口方便用戶編寫特定領(lǐng)域的嵌入式應(yīng)用程序RTOS組成(續(xù))基本內(nèi)核:嵌入式RTOS中最核心最基礎(chǔ)的12RTS的響應(yīng)時(shí)間及時(shí)性是實(shí)時(shí)系統(tǒng)最為重要的特性設(shè)計(jì)者應(yīng)該能預(yù)測(cè)實(shí)時(shí)系統(tǒng)的行為同步任務(wù)由時(shí)鐘來同步異步事件通常由中斷驅(qū)動(dòng)RTS的響應(yīng)時(shí)間及時(shí)性是實(shí)時(shí)系統(tǒng)最為重要的特性13一個(gè)多任務(wù)RTOS的事例Resourceallocation&mgmtTaskScheduling&DispatchRealtimeclockInterruptServiceroutinesI/OSubsystemFileMGMTSystemtasks

ApplicationtasksUserLevelOSLevelCommandprocessor一個(gè)多任務(wù)RTOS的事例ResourceTaskSche14資源任何為任務(wù)所占用的實(shí)體都可稱為資源。資源可以是輸入輸出設(shè)備,例如打印機(jī)、鍵盤、顯示器,資源也可以是一個(gè)變量,一個(gè)結(jié)構(gòu)或一個(gè)數(shù)組等可以被一個(gè)以上任務(wù)使用的資源叫做共享資源為了防止數(shù)據(jù)被破壞,每個(gè)任務(wù)在與共享資源打交道時(shí),必須獨(dú)占該資源,這叫做互斥(mutualexclusion)資源任何為任務(wù)所占用的實(shí)體都可稱為資源。資源可以是輸入輸出設(shè)15任務(wù)一個(gè)任務(wù)也稱作一個(gè)線程,是一個(gè)簡單的程序,該程序可以認(rèn)為CPU完全只屬該程序自己每個(gè)任務(wù)都是整個(gè)應(yīng)用的某一部分,被賦予一定的優(yōu)先級(jí),有自己的一套CPU寄存器和??臻g多任務(wù)系統(tǒng)中,任意時(shí)刻只有一個(gè)任務(wù)占有CPU資源一個(gè)任務(wù)通常是一個(gè)無限的循環(huán),當(dāng)任務(wù)完成以后,任務(wù)可以自我刪除任務(wù)一個(gè)任務(wù)也稱作一個(gè)線程,是一個(gè)簡單的程序,該程序可以認(rèn)為16TCB(任務(wù)控制塊)TCB在任務(wù)建立時(shí)將被賦值(初始化)TCB是一個(gè)數(shù)據(jù)結(jié)構(gòu),用來保存該任務(wù)的狀態(tài):堆棧指針、堆棧大小、任務(wù)狀態(tài)、任務(wù)優(yōu)先級(jí)……任務(wù)重新得到CPU使用權(quán)時(shí),任務(wù)控制塊能確保任務(wù)從當(dāng)時(shí)被中斷的那一點(diǎn)絲毫不差地繼續(xù)執(zhí)行TCBs全部駐留在RAM中TCB(任務(wù)控制塊)TCB在任務(wù)建立時(shí)將被賦值(初始化)17任務(wù)狀態(tài)每個(gè)任務(wù)都處在以下5種狀態(tài)之一:休眠態(tài),就緒態(tài)、運(yùn)行態(tài)、掛起態(tài)和被中斷態(tài)休眠態(tài):該任務(wù)駐留在內(nèi)存中,但并不被內(nèi)核所調(diào)度就緒態(tài):該任務(wù)已經(jīng)準(zhǔn)備好運(yùn)行,但由于優(yōu)先級(jí)比正運(yùn)行的任務(wù)優(yōu)先級(jí)低,還暫時(shí)不能運(yùn)行運(yùn)行態(tài):掌握了CPU的控制權(quán),正在運(yùn)行中掛起態(tài):也叫等待態(tài),在等待某一事件的發(fā)生中斷態(tài):發(fā)生中斷時(shí),進(jìn)入相應(yīng)的中斷服務(wù)任務(wù)狀態(tài)每個(gè)任務(wù)都處在以下5種狀態(tài)之一:休眠態(tài),就緒態(tài)、運(yùn)18任務(wù)狀態(tài)變遷圖WAITINGDORMANTREADYRUNNINGISR任務(wù)狀態(tài)變遷圖WAITINGDORMANTREADYRUNN19任務(wù)狀態(tài)變遷就緒-->運(yùn)行調(diào)度程序選擇一個(gè)新的線程運(yùn)行運(yùn)行-->就緒運(yùn)行線程用完了時(shí)間片運(yùn)行線程被高優(yōu)先級(jí)線程搶占運(yùn)行-->等待當(dāng)一線程必須等待時(shí)等待某外設(shè)的I/O操作等待某共享資源由暫不能使用變成能使用狀態(tài)等待定時(shí)脈沖的到來或等待超時(shí)信號(hào)的到來以結(jié)束目前的等待……等待-->就緒當(dāng)所等待的事件發(fā)生時(shí)任務(wù)狀態(tài)變遷就緒-->運(yùn)行20任務(wù)切換也稱為上下文切換(ContextSwitch)當(dāng)多任務(wù)內(nèi)核決定運(yùn)行另外的任務(wù)時(shí):保存正在運(yùn)行任務(wù)的當(dāng)前狀態(tài)(Context),即CPU寄存器中的全部內(nèi)容。這些內(nèi)容保存在任務(wù)自己的棧區(qū)之中把下一個(gè)將要運(yùn)行的任務(wù)的當(dāng)前狀況從該任務(wù)的棧中重新裝入CPU的寄存器,并開始下一個(gè)任務(wù)的運(yùn)行任務(wù)切換過程增加了應(yīng)用程序的額外負(fù)荷任務(wù)切換也稱為上下文切換(ContextSwitch)21任務(wù)調(diào)度任務(wù)調(diào)度就是按一定的調(diào)度算法從就緒任務(wù)中選中一個(gè)任務(wù)到處理器上運(yùn)行主要工作:(1)記錄當(dāng)前任務(wù)狀態(tài)(如指令計(jì)數(shù)器、狀態(tài)寄存器、通用寄存器等)到TCB;(2)根據(jù)調(diào)度算法,在就緒任務(wù)中選一個(gè)任務(wù);(3)回收處理機(jī)并分配給選中的任務(wù)。任務(wù)調(diào)度任務(wù)調(diào)度就是按一定的調(diào)度算法從就緒任務(wù)中選中一個(gè)任務(wù)22任務(wù)調(diào)度方式非搶占式調(diào)度搶占式調(diào)度由于嵌入式操作系統(tǒng)對(duì)實(shí)時(shí)性的較強(qiáng)要求,因此基本上使用搶占式調(diào)度。調(diào)度算法FIFO:先來先服務(wù)短作業(yè)優(yōu)先基于優(yōu)先級(jí):時(shí)間片輪轉(zhuǎn)(RoundRobin):固定時(shí)間片可變時(shí)間片多級(jí)隊(duì)列算法多級(jí)反饋隊(duì)列算法其它組合策略調(diào)度算法任務(wù)調(diào)度方式非搶占式調(diào)度23非搶占式調(diào)度非搶占式調(diào)度24搶占式調(diào)度搶占式調(diào)度25可重入性(Reentrancy)可重入型函數(shù)可以被一個(gè)以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞可重入型函數(shù)任何時(shí)候都可以被中斷,一段時(shí)間以后又可以運(yùn)行編寫可重入型函數(shù)需遵循的規(guī)則:使用局部變量,即變量保存在CPU寄存器或堆棧中盡量不使用static或extern變量可重入性(Reentrancy)可重入型函數(shù)可以被一個(gè)以上26任務(wù)優(yōu)先級(jí)每個(gè)任務(wù)都有其優(yōu)先級(jí)。任務(wù)越重要,賦予的優(yōu)先級(jí)應(yīng)越高任務(wù)優(yōu)先級(jí)每個(gè)任務(wù)都有其優(yōu)先級(jí)。任務(wù)越重要,賦予的優(yōu)先級(jí)應(yīng)越27eCos任務(wù)及優(yōu)先級(jí)優(yōu)先級(jí)0~255,優(yōu)先級(jí)的最低3bits忽略,因此0~7、8~15……各組內(nèi)的優(yōu)先級(jí)相同,組外數(shù)值越大,優(yōu)先級(jí)越高eCos任務(wù)結(jié)構(gòu):roottask1task2task3task4task5idleeCos任務(wù)及優(yōu)先級(jí)優(yōu)先級(jí)0~255,優(yōu)先級(jí)的最低3bits28任務(wù)管理創(chuàng)建任務(wù)(CreateTask)刪除任務(wù)(DeleteTask)掛起任務(wù)()喚醒任務(wù)()改變?nèi)蝿?wù)優(yōu)先級(jí)()獲取任務(wù)優(yōu)先級(jí)()獲取當(dāng)前任務(wù)ID任務(wù)管理創(chuàng)建任務(wù)(CreateTask)29任務(wù)管理(sidsaAPI)t_createULONGt_create(charname[4],ULONGprio,ULONGsstack,ULONGustack,ULONGflags,ULONG*tid)t_startULONGt_start(ULONGtid,ULONGmode,void*start_addr,ULONGtargs[])t_deleteULONGt_delete(ULONGtid)t_suspendULONGt_suspend(ULONGtid)t_resumeULONGt_resume(ULONGtid)t_wkafterULONGtm_wkafter(ULONGticks)任務(wù)管理(sidsaAPI)t_create30任務(wù)管理(kernelAPI)cyg_thread_createcyg_thread_exitcyg_thread_killcyg_thread_deletecyg_thread_yieldcyg_thread_delaycyg_thread_suspendcyg_thread_resumecyg_thread_release任務(wù)管理(kernelAPI)cyg_thread_cre31任務(wù)管理(kernelAPI續(xù))cyg_thread_get_prioritycyg_thread_get_current_prioritycyg_thread_set_prioritycyg_thread_selfcyg_thread_idle_threadcyg_thread_get_stack_basecyg_thread_get_stack_sizecyg_thread_measure_stack_usagecyg_thread_get_nextcyg_thread_get_infocyg_thread_find任務(wù)管理(kernelAPI續(xù))cyg_thread_g32任務(wù)間通信及同步共享內(nèi)存(ShareMemory)信號(hào)量(Semaphore)互斥量(Mutex)事件標(biāo)志(EventFlag)消息郵箱(MessageBox)消息隊(duì)列(MessageQueue)任務(wù)間通信及同步共享內(nèi)存(ShareMemory)33信號(hào)量(Semaphore)信號(hào)量用于:控制共享資源的使用權(quán)(滿足互斥條件)標(biāo)志某事件的發(fā)生使兩個(gè)任務(wù)的行為同步一個(gè)信號(hào)量是一個(gè)16位變量,初值為0~65535,值為0表示資源處于鎖住狀態(tài),非0表示有多個(gè)資源,供多個(gè)任務(wù)訪問信號(hào)量表示符號(hào):鑰匙或旗幟信號(hào)量(Semaphore)信號(hào)量用于:34信號(hào)量的P、V操作等待信號(hào)量(P操作):如果信號(hào)量值大于0,則信號(hào)量值減1,任務(wù)得以繼續(xù)運(yùn)行如果信號(hào)量的值為0,等待信號(hào)量的任務(wù)被掛起并列入等待信號(hào)量任務(wù)表釋放信號(hào)量(V操作):如果沒有任務(wù)在等待信號(hào)量,信號(hào)量的值僅僅是簡單地加1如果有任務(wù)在等待該信號(hào)量,那么就會(huì)有一個(gè)任務(wù)進(jìn)入就緒態(tài),信號(hào)量的值也就不加1信號(hào)量的P、V操作等待信號(hào)量(P操作):釋放信號(hào)量(V操作35P、V操作為原語操作,原語(primitiveoratomicaction):

是由若干多機(jī)器指令構(gòu)成的完成某種特定功能的一段程序,具有不可分割性即原語的執(zhí)行必須是連續(xù)的,在執(zhí)行過程中不允許被中斷實(shí)現(xiàn):開關(guān)中斷信號(hào)量的使用:必須置一次且只能置一次初值初值不能為負(fù)數(shù)只能執(zhí)行P、V操作信號(hào)量的P、V操作(續(xù))P、V操作為原語操作,原語(primitiveorato36用P、V操作解決線程間互斥問題P(mutex)V(mutex)P1P2P3互斥區(qū)P(mutex)P(mutex)V(mutex)V(mutex)用P、V操作解決線程間互斥問題P(mutex)V(mutex37優(yōu)先級(jí)反轉(zhuǎn)問題優(yōu)先級(jí)反轉(zhuǎn)問題38優(yōu)先級(jí)反轉(zhuǎn)問題(續(xù))設(shè)計(jì)中應(yīng)注意避免產(chǎn)生優(yōu)先級(jí)反轉(zhuǎn)優(yōu)先級(jí)繼承(Priorityinheritance)可解決優(yōu)先級(jí)反轉(zhuǎn)問題優(yōu)先級(jí)反轉(zhuǎn)問題(續(xù))設(shè)計(jì)中應(yīng)注意避免產(chǎn)生優(yōu)先級(jí)反轉(zhuǎn)39經(jīng)典的生產(chǎn)者─消費(fèi)者問題消費(fèi)者生產(chǎn)者經(jīng)典的生產(chǎn)者─消費(fèi)者問題消費(fèi)者生產(chǎn)者40經(jīng)典的生產(chǎn)者─消費(fèi)者問題(續(xù)1)同步問題:

P線程不能往“滿”的緩沖區(qū)中放產(chǎn)品,設(shè)置信號(hào)量為S1Q線程不能從“空”的緩沖區(qū)中取產(chǎn)品,設(shè)置信號(hào)量S2P:Q:while(true){while(true){

生產(chǎn)一個(gè)產(chǎn)品;P(s2);P(s1);從緩沖區(qū)取產(chǎn)品;

送產(chǎn)品到緩沖區(qū);V(s1);V(s2);消費(fèi)產(chǎn)品;};};S1初值為1,S2初值為0經(jīng)典的生產(chǎn)者─消費(fèi)者問題(續(xù)1)同步問題:S1初值為1,S241實(shí)時(shí)操作系統(tǒng)RTOS培訓(xùn)課件42多個(gè)緩沖區(qū)的生產(chǎn)者和消費(fèi)者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);

從Buffer[j]取產(chǎn)品;V(S1);

消費(fèi)產(chǎn)品;j=(j+1)%n;};S1初值為n,S2初值為0多個(gè)緩沖區(qū)的生產(chǎn)者和消費(fèi)者P:

i=0;

while(43Q:

j=0;while(true){P(S2);P(mutex2);

從Buffer[j]取產(chǎn)品;V(mutex2);V(S1);

消費(fèi)產(chǎn)品;j=(j+1)%n;};n個(gè)緩沖區(qū)、m個(gè)生產(chǎn)者和k個(gè)消費(fèi)者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;};錯(cuò)誤S1初值為n,S2初值為0線程數(shù)為m線程數(shù)為kQ:n個(gè)緩沖區(qū)、m個(gè)生產(chǎn)者和k個(gè)消費(fèi)者P:

i=0;

w44Q:

j=0;while(true){P(S2);P(mutex2);

從Buffer[j]取產(chǎn)品;j=(j+1)%n;V(mutex2);V(S1);

消費(fèi)產(chǎn)品;};n個(gè)緩沖區(qū)、m個(gè)生產(chǎn)者和k個(gè)消費(fèi)者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ù)為m線程數(shù)為kQ:n個(gè)緩沖區(qū)、m個(gè)生產(chǎn)者和k個(gè)消費(fèi)者P:

i=0;

w451)信號(hào)量的物理含義:S>0表示有S個(gè)資源可用S=0表示無資源可用S<0則|S|表示S等待隊(duì)列中的線程個(gè)數(shù)P(S):表示申請(qǐng)一個(gè)資源V(S):表示釋放一個(gè)資源。信號(hào)量的初值應(yīng)該大于等于0信號(hào)量及P、V操作討論1)信號(hào)量的物理含義:信號(hào)量及P、V操作討論462)P.V操作必須成對(duì)出現(xiàn),有一個(gè)P操作就一定有一個(gè)V操作當(dāng)為互斥操作時(shí),它們同處于同一線程當(dāng)為同步操作時(shí),則不在同一線程中出現(xiàn)如果P(S1)和P(S2)兩個(gè)操作在一起,那么P操作的順序至關(guān)重要,一個(gè)同步P操作與一個(gè)互斥P操作在一起時(shí)同步P操作在互斥P操作前而兩個(gè)V操作無關(guān)緊要信號(hào)量及P、V操作討論(續(xù)1)2)P.V操作必須成對(duì)出現(xiàn),有一個(gè)P操作就一定有一個(gè)V操作473)P.V操作的優(yōu)缺點(diǎn)優(yōu)點(diǎn):簡單,而且表達(dá)能力強(qiáng)(用P.V操作可解決任何同步互斥問題)缺點(diǎn):不夠安全;P.V操作使用不當(dāng)會(huì)出現(xiàn)死鎖;遇到復(fù)雜同步互斥問題時(shí)實(shí)現(xiàn)復(fù)雜信號(hào)量及P、V操作討論(續(xù)2)3)P.V操作的優(yōu)缺點(diǎn)信號(hào)量及P、V操作討論(續(xù)2)48【思考題】1.用P.V操作解決下圖之同步問題:getcopyputfstg【思考題】1.用P.V操作解決下圖之同步問題:getcopy49用P.V操作解決司機(jī)與售票員的問題司機(jī)線程:while(true){啟動(dòng)車輛正常駕駛到站停車}…售票員線程:while(true){關(guān)門售票開門}…用P.V操作解決司機(jī)與售票員的問題司機(jī)線程:售票員線程:50信號(hào)量管理創(chuàng)建信號(hào)量(SemCreate)釋放信號(hào)量(SemPost)等待信號(hào)量(SemPend)信號(hào)量為0時(shí)任務(wù)掛起,永久或有限等待無等待取信號(hào)量(SemAccept)信號(hào)量為0時(shí)任務(wù)不會(huì)掛起,返回0信號(hào)量管理創(chuàng)建信號(hào)量(SemCreate)51eCos的信號(hào)量管理(sidsaAPI)sm_createULONGsm_create(charname[4],ULONGcount,ULONGflags,ULONG*smid)sm_deleteULONGsm_delete(ULONGsmid)sm_pULONGsm_p(ULONGsmid,ULONGflags,ULONGtimeout)sm_vULONGsm_v(ULONGsmid)eCos的信號(hào)量管理(sidsaAPI)sm_create52eCos的信號(hào)量管理(kernelAPI)cyg_semaphore_initcyg_semaphore_destroycyg_semaphore_waitcyg_semaphore_timed_waitcyg_semaphore_trywaitcyg_semaphore_postcyg_semaphore_peekeCos的信號(hào)量管理(kernelAPI)cyg_sema53互斥量(Mutex)一個(gè)互斥量就是一個(gè)同步對(duì)象,用于多任務(wù)串行訪問共享數(shù)據(jù)只有一個(gè)任務(wù)可以獲得和擁有一個(gè)互斥量,也只有這個(gè)任務(wù)隨后才能釋放這個(gè)互斥量互斥量是取值為0-1的二元信號(hào)量互斥量(Mutex)一個(gè)互斥量就是一個(gè)同步對(duì)象,用于多任務(wù)串54互斥量管理創(chuàng)建互斥量(MutexCreate)刪除互斥量(MutexDelete)等待互斥量(MutexPend)釋放互斥量(MutexPost)無等待獲取互斥量(MutexAccept)互斥量管理創(chuàng)建互斥量(MutexCreate)55互斥量管理(sidsaAPI)NA互斥量管理(sidsaAPI)NA56互斥量管理(kernelAPI)cyg_mutex_initcyg_mutex_destroycyg_mutex_lockcyg_mutex_trylockcyg_mutex_unlockcyg_mutex_releasecyg_mutex_set_ceilingcyg_mutex_set_protocol互斥量管理(kernelAPI)cyg_mutex_ini57事件標(biāo)志(EventFlags)事件標(biāo)志用于任務(wù)與多個(gè)事件的同步獨(dú)立型同步(即邏輯或關(guān)系):任務(wù)需要與任何事件之一發(fā)生同步關(guān)聯(lián)型同步(邏輯與關(guān)系):任務(wù)需要與若干事件都發(fā)生了同步事件標(biāo)志通常為32位變量,每個(gè)事件占一位(bit),當(dāng)一個(gè)標(biāo)志處于設(shè)置狀態(tài)(1)時(shí),表示相關(guān)事件已經(jīng)發(fā)生事件標(biāo)志(EventFlags)事件標(biāo)志用于任務(wù)與多個(gè)事件58事件標(biāo)志組管理創(chuàng)建事件標(biāo)志組(FLagCreate)置位事件標(biāo)志(FlagPost)等待事件標(biāo)志位(FlagPend)無等待獲取事件標(biāo)志位(FlagAccept)清除事件標(biāo)志位(FlagClear)在再次發(fā)送事件標(biāo)志前,應(yīng)先清除該標(biāo)志事件標(biāo)志組管理創(chuàng)建事件標(biāo)志組(FLagCreate)59事件標(biāo)志組管理(sidsaAPI)ev_sendULONGev_send(ULONGtid,ULONGevents)ev_receiveULONGev_receive(ULONGevents,ULONGflags,ULONGtimeout,ULONG*events_r)事件標(biāo)志組管理(sidsaAPI)ev_send60事件標(biāo)志組管理(kernelAPI)cyg_flag_initcyg_flag_destroycyg_flag_setbitscyg_flag_maskbitscyg_flag_waitcyg_flag_timed_waitcyg_flag_pollcyg_flag_peekcyg_flag_waiting事件標(biāo)志組管理(kernelAPI)cyg_flag_in61消息郵箱(MessageBox)消息郵箱也稱作交換消息,是用一個(gè)指針型變量放到郵箱,該指針指向的內(nèi)容就是那則消息消息郵箱用于一個(gè)線程向另一個(gè)線程發(fā)送消息,實(shí)現(xiàn)線程間通信用一個(gè)I字表示郵箱符號(hào)消息郵箱(MessageBox)消息郵箱也稱作交換消息,是62消息郵箱管理創(chuàng)建郵箱(MboxCreate)發(fā)送消息(MboxPost)消息放入郵箱后,或者是把消息傳給等待消息的任務(wù)表中優(yōu)先級(jí)最高的那個(gè)任務(wù)(基于優(yōu)先級(jí)),或者是將消息傳給最先開始等待消息的任務(wù)(基于先進(jìn)先出)郵箱只能保存一個(gè)消息,試圖向已存有消息的郵箱發(fā)送消息會(huì)導(dǎo)致“郵箱滿”錯(cuò)誤等待消息(MboxPend)等待消息的任務(wù)會(huì)因?yàn)猷]箱是空的而被掛起,且被記錄到等待消息的任務(wù)表中,直到收到消息無等待取消息(MboxAccept)如果郵箱是空的任務(wù)也不會(huì)掛起,此時(shí)返回值為NULL表示無消息消息郵箱管理創(chuàng)建郵箱(MboxCreate)63消息郵箱管理(sidsaAPI)NA消息郵箱管理(sidsaAPI)NA64消息郵箱管理(kernelAPI)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_to_getcyg_mbox_waiting_to_put消息郵箱管理(kernelAPI)cyg_mbox_cre65消息隊(duì)列(MessageQueue)消息隊(duì)列實(shí)際上是郵箱陣列任務(wù)先得到的是最先進(jìn)入消息隊(duì)列的消息,即先進(jìn)先出原則(FIFO)用2個(gè)I字表示郵箱隊(duì)列符號(hào)消息隊(duì)列(MessageQueue)消息隊(duì)列實(shí)際上是郵箱陣66消息隊(duì)列管理創(chuàng)建消息隊(duì)列(QCreate)發(fā)送消息(QPost)消息放入消息隊(duì)列后,或者是把消息傳給等待消息的任務(wù)表中優(yōu)先級(jí)最高的那個(gè)任務(wù)(基于優(yōu)先級(jí)),或者是將消息傳給最先開始等待消息的任務(wù)(基于先進(jìn)先出)如果消息隊(duì)列內(nèi)的消息已滿,會(huì)導(dǎo)致“消息滿”錯(cuò)誤等待消息(QPend)等待消息的任務(wù)會(huì)因?yàn)橄㈥?duì)列是空的而被掛起,直到收到消息無等待取消息(QAccept)如果郵箱是空的任務(wù)也不會(huì)掛起,此時(shí)返回值為NULL表示無消息消息隊(duì)列管理創(chuàng)建消息隊(duì)列(QCreate)67消息隊(duì)列管理(sidsaAPI)q_createULONGq_create(charname[4],ULONGcount,ULONGflags,ULONG*qid)q_deleteULONGq_delete(ULONGqid)q_sendULONGq_send(ULONGqid,ULONGmsg_buf[4])q_receiveULONGq_receive(ULONGqid,ULONGflags,ULONGtimeout,ULONGmsg_buf[4])消息隊(duì)列管理(sidsaAPI)q_create68消息隊(duì)列管理(kernelAPI)NA消息隊(duì)列管理(kernelAPI)NA69設(shè)備驅(qū)動(dòng)程序概述1、I/O的特點(diǎn)(1)I/O性能經(jīng)常成為系統(tǒng)性能的瓶頸CPU性能不等于系統(tǒng)性能,響應(yīng)時(shí)間也是一個(gè)重要因素CPU性能越高,與I/O差距越大 彌補(bǔ):更多的線程線程切換多,系統(tǒng)開銷大(2)操作系統(tǒng)龐大復(fù)雜的原因之一是:資源多、雜,并發(fā),均來自I/O

外設(shè)種類繁多,結(jié)構(gòu)各異輸入輸出數(shù)據(jù)信號(hào)類型不同速度差異很大(3)理解I/O的工作過程與結(jié)構(gòu)是理解操作系統(tǒng)的工作過程與結(jié)構(gòu)的關(guān)鍵設(shè)備驅(qū)動(dòng)程序概述1、I/O的特點(diǎn)70(1)按照用戶的請(qǐng)求,控制設(shè)備的各種操作,完成I/O設(shè)備與內(nèi)存之間的數(shù)據(jù)交換(包括設(shè)備分配與回收;設(shè)備驅(qū)動(dòng)程序;設(shè)備中斷處理;緩沖區(qū)管理),最終完成用戶的I/O請(qǐng)求設(shè)備分配與回收記錄設(shè)備的狀態(tài)根據(jù)用戶的請(qǐng)求和設(shè)備的類型,采用一定的分配算法,選擇一條數(shù)據(jù)通路建立統(tǒng)一的獨(dú)立于設(shè)備的接口完成設(shè)備驅(qū)動(dòng)程序,實(shí)現(xiàn)真正的I/O操作處理外部設(shè)備的中斷處理管理I/O緩沖區(qū)設(shè)備管理的目標(biāo)和任務(wù)(1)按照用戶的請(qǐng)求,控制設(shè)備的各種操作,完成I/O設(shè)備與內(nèi)71(2)向用戶提供使用外部設(shè)備的方便接口,使用戶擺脫繁瑣的編程負(fù)擔(dān)方便性友好界面透明性 屏蔽硬件細(xì)節(jié)(設(shè)備的物理細(xì)節(jié),錯(cuò)誤處理,不同I/O的差異性)(3)充分利用各種技術(shù)(通道,中斷,緩沖等)提高CPU與設(shè)備、設(shè)備與設(shè)備之間的并行工作能力,充分利用資源,提高資源利用率并行性均衡性(使設(shè)備充分忙碌)設(shè)備管理的目標(biāo)和任務(wù)(續(xù))(2)向用戶提供使用外部設(shè)備的方便接口,使用戶擺脫繁瑣的編程72(4)保證多個(gè)線程競(jìng)爭使用設(shè)備時(shí),按一定策略分配和管理各種設(shè)備,使系統(tǒng)能有條不紊的工作(5)保護(hù)設(shè)備傳送或管理的數(shù)據(jù)應(yīng)該是安全的、不被破壞的、保密的(6)與設(shè)備無關(guān)性(設(shè)備獨(dú)立性)用戶在編制程序時(shí),使用邏輯設(shè)備名,由系統(tǒng)實(shí)現(xiàn)邏輯設(shè)備到物理設(shè)備(實(shí)際設(shè)備)的轉(zhuǎn)換,用戶能獨(dú)立于具體物理設(shè)備而方便的使用設(shè)備設(shè)備管理的目標(biāo)和任務(wù)(續(xù))(4)保證多個(gè)線程競(jìng)爭使用設(shè)備時(shí),按一定策略分配和管理各種設(shè)73

用戶申請(qǐng)使用設(shè)備時(shí),只需要指定設(shè)備類型,而無須指定具體物理設(shè)備,系統(tǒng)根據(jù)當(dāng)前的請(qǐng)求,及設(shè)備分配的情況,在相同類別設(shè)備中,選擇一個(gè)空閑設(shè)備,并將其分配給一個(gè)申請(qǐng)線程統(tǒng)一性:對(duì)不同的設(shè)備采取統(tǒng)一的操作方式,在用戶程序中使用的是邏輯設(shè)備優(yōu)點(diǎn):設(shè)備忙碌或設(shè)備故障時(shí),用戶不必修改程序改善了系統(tǒng)的可適應(yīng)性和可擴(kuò)展性設(shè)備管理的目標(biāo)和任務(wù)(續(xù))用戶申請(qǐng)使用設(shè)備時(shí),只需要指定設(shè)備類型,而無須指定具體物74設(shè)備獨(dú)立的軟件

雖然I/O軟件中一部分是設(shè)備專用的,但大部分軟件是與設(shè)備無關(guān)的。設(shè)備驅(qū)動(dòng)程序與設(shè)備獨(dú)立軟件之間的確切界限是依賴于具體系統(tǒng)的設(shè)備獨(dú)立的軟件雖然I/O軟件中一部分是設(shè)備專用的,但大部75

1.獨(dú)立于設(shè)備的軟件的基本任務(wù)是實(shí)現(xiàn)所有設(shè)備都需要的功能,并且向用戶級(jí)軟件提供一個(gè)統(tǒng)一的接口

2.如何給文件和設(shè)備這樣的對(duì)象命名是操作系統(tǒng)中的一個(gè)主要課題。獨(dú)立于設(shè)備的軟件負(fù)責(zé)把設(shè)備的符號(hào)名映射到正確的設(shè)備驅(qū)動(dòng)上

3.設(shè)備保護(hù)系統(tǒng)如何防止無權(quán)存取設(shè)備的用戶存取設(shè)備呢?

4.緩沖技術(shù)

5.設(shè)備分配

6.出錯(cuò)處理設(shè)備獨(dú)立的軟件(續(xù))1.獨(dú)立于設(shè)備的軟件的基本任務(wù)是實(shí)現(xiàn)所有設(shè)備都需要的功能,76(1)緩沖技術(shù)的引入

凡是數(shù)據(jù)到達(dá)和離去速度不匹配的地方均可采用緩沖技術(shù)。在操作系統(tǒng)中采用緩沖是為了實(shí)現(xiàn)數(shù)據(jù)的I/O操作,以緩解CPU與外部設(shè)備之間速度不匹配的矛盾,提高資源利用率減少了I/O設(shè)備對(duì)處理器的中斷請(qǐng)求次數(shù)簡化了中斷機(jī)制節(jié)省了系統(tǒng)開銷(2)緩沖區(qū)設(shè)置硬緩沖:在設(shè)備中設(shè)置緩沖區(qū),由硬件實(shí)現(xiàn)軟緩沖:在內(nèi)存中開辟一個(gè)空間,用作緩沖區(qū)緩沖技術(shù)(1)緩沖技術(shù)的引入緩沖技術(shù)771.設(shè)備分配與回收當(dāng)某線程向系統(tǒng)提出I/O請(qǐng)求時(shí),設(shè)備分配程序按一定策略分配設(shè)備、控制器和通道,形成一條數(shù)據(jù)傳輸通路,以供主機(jī)和設(shè)備間信息交換設(shè)備獨(dú)立性,即不能因?yàn)樵O(shè)備的忙碌、故障或更換而影響程序的運(yùn)行,向用戶屏蔽物理設(shè)備,呈現(xiàn)給用戶的一個(gè)操作簡單的邏輯設(shè)備由于在多線程程序系統(tǒng)中,線程數(shù)多于資源數(shù),引起資源的競(jìng)爭。因此,要有一套合理的分配原則,考慮的因素:I/O設(shè)備的固有屬性I/O設(shè)備的分配算法設(shè)備分配的安全性與設(shè)備的無關(guān)性獨(dú)占設(shè)備的分配,要考慮充分發(fā)揮效率,避免由于不合理的分配策略造成死鎖共享設(shè)備分配由于同時(shí)有多個(gè)線程同時(shí)訪問,且訪問頻繁,就會(huì)影響整個(gè)設(shè)備使用效率,影響系統(tǒng)效率。因此要考慮多個(gè)訪問請(qǐng)求到達(dá)時(shí)服務(wù)的順序,使平均服務(wù)時(shí)間越短越好設(shè)備處理1.設(shè)備分配與回收設(shè)備處理78為了控制I/O傳輸,系統(tǒng)為每類設(shè)備編制設(shè)備驅(qū)動(dòng)程序任務(wù):主要負(fù)責(zé)接收和分析從設(shè)備分配轉(zhuǎn)來的信息,并根據(jù)設(shè)備分配的結(jié)果,結(jié)合具體物理設(shè)備特性完成以下具體工作:(1)預(yù)置設(shè)備的初始狀態(tài)(2)根據(jù)請(qǐng)求傳輸?shù)臄?shù)據(jù)量,組織I/O緩沖隊(duì)列,利用I/O緩沖對(duì)數(shù)據(jù)進(jìn)行加工,包括數(shù)據(jù)格式處理和編碼轉(zhuǎn)換(3)構(gòu)造I/O程序(在有通道系統(tǒng)中,是通道程序)(4)啟動(dòng)設(shè)備進(jìn)行I/O操作設(shè)備驅(qū)動(dòng)程序?yàn)榱丝刂艻/O傳輸,系統(tǒng)為每類設(shè)備編制設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)79CAM開發(fā)平臺(tái)的DEVICEUARTTIMERSCARDPICPCMCIAMPEGCAM開發(fā)平臺(tái)的DEVICEUART80CAM產(chǎn)品軟件體系結(jié)構(gòu)CAM產(chǎn)品軟件體系結(jié)構(gòu)81深圳國微技術(shù)有限公司2005-07-11實(shí)時(shí)操作系統(tǒng)(RTOS)培訓(xùn)深圳國微技術(shù)有限公司實(shí)時(shí)操作系統(tǒng)(RTOS)培訓(xùn)82實(shí)時(shí)系統(tǒng)概念實(shí)時(shí)系統(tǒng)是指在確定的時(shí)間內(nèi)完成規(guī)定功能,并能對(duì)外部異步事件作出正確響應(yīng)的計(jì)算機(jī)系統(tǒng)實(shí)時(shí)系統(tǒng)分類硬實(shí)時(shí)系統(tǒng):結(jié)果遲到產(chǎn)生災(zāi)難性結(jié)果FIRM實(shí)時(shí)系統(tǒng):結(jié)果遲到會(huì)產(chǎn)生難以接受的質(zhì)量上的降低軟實(shí)時(shí)系統(tǒng):結(jié)果遲到會(huì)引起質(zhì)量下降,系統(tǒng)可以自行恢復(fù)衡量系統(tǒng)實(shí)時(shí)性的3個(gè)指標(biāo):響應(yīng)時(shí)間(ResponseTime)生存時(shí)間(SurvivalTime)吞吐量(Throughput)實(shí)時(shí)系統(tǒng)概念83嵌入式系統(tǒng)嵌入式系統(tǒng)通常都是實(shí)時(shí)系統(tǒng),其特征為系統(tǒng)的正確性不但依賴于運(yùn)行邏輯結(jié)果的正確性,而且依賴于得到結(jié)果所花費(fèi)的時(shí)間系統(tǒng)對(duì)于各種外部輸入在預(yù)定時(shí)間內(nèi)能得到可以預(yù)測(cè)的結(jié)果嵌入式系統(tǒng)通常使用RTOS,其特征為在不同的系統(tǒng)負(fù)載下,行為可以預(yù)測(cè)支持基于優(yōu)先級(jí)的調(diào)度MEMORY模型對(duì)于RTOS的性能十分重要通常都需要一個(gè)時(shí)鐘來處理任務(wù)的同步HRTSRTNRT內(nèi)存分配SD/SD虛存NNYS-STATICD-DYNAMIC比較嵌入式系統(tǒng)嵌入式系統(tǒng)通常都是實(shí)時(shí)系統(tǒng),其特征為HRTSRTN84嵌入式系統(tǒng)(續(xù))硬件特性體積小,集成效率高面向特定應(yīng)用低功耗,能在惡劣環(huán)境下工作軟件特性軟件的研發(fā)與硬件緊密相關(guān)軟件代碼要求高效率和高可靠性軟件一般固化在FLASH或ROM中應(yīng)用工業(yè)過程控制軍事電子設(shè)備和現(xiàn)代武器網(wǎng)絡(luò)通信設(shè)備消費(fèi)電子產(chǎn)品嵌入式系統(tǒng)(續(xù))硬件特性85嵌入式實(shí)時(shí)系統(tǒng)軟件特征實(shí)時(shí)性:反應(yīng)時(shí)間要快,按要求的間隔輸出正確時(shí)間信號(hào)給實(shí)時(shí)的控制設(shè)備多任務(wù)并發(fā)性:利用適當(dāng)?shù)牟呗钥刂贫嗳蝿?wù)的執(zhí)行,提高資源的利用效率有處理異步事件的能力快速啟動(dòng),并有出錯(cuò)處理和自動(dòng)復(fù)位功能嵌入式實(shí)時(shí)軟件是應(yīng)用程序和操作系統(tǒng)兩種軟件的一體化程序嵌入式實(shí)時(shí)軟件的開發(fā)需要獨(dú)立的開發(fā)平臺(tái)和交叉開發(fā)環(huán)境嵌入式實(shí)時(shí)系統(tǒng)軟件特征實(shí)時(shí)性:反應(yīng)時(shí)間要快,按要求的間隔輸出86主要的嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks使用最廣、市場(chǎng)占有率最高的嵌入式實(shí)時(shí)操作系統(tǒng),美國WindRiver公司產(chǎn)品VRTX老牌嵌入式實(shí)時(shí)操作系統(tǒng)pSOSISI公司推出,現(xiàn)已被WindRiver公司收購WinCEMicrosoft公司推出,實(shí)時(shí)性不太好,主要用于掌上系統(tǒng)PalmOS3Com公司推出,在PDA市場(chǎng)占有很大份額嵌入式Linux源代碼免費(fèi)開放,eCOS是Redhat推出的一款嵌入式LINUX操作系統(tǒng)主要的嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks87前后臺(tái)系統(tǒng)通常應(yīng)用于不復(fù)雜的小型系統(tǒng)應(yīng)用程序是一個(gè)無限的循環(huán),這部分可以看成后臺(tái)行為(background)中斷服務(wù)程序處理異步事件,這部分可以看成前臺(tái)行為(foreground)后臺(tái)也可以叫做任務(wù)級(jí),前臺(tái)也叫中斷級(jí)前后臺(tái)系統(tǒng)通常應(yīng)用于不復(fù)雜的小型系統(tǒng)88前后臺(tái)系統(tǒng)(續(xù))前后臺(tái)系統(tǒng)(續(xù))89多任務(wù)系統(tǒng)CPU在許多任務(wù)之間轉(zhuǎn)換、調(diào)度,輪番服務(wù)于一系列任務(wù)中的某一個(gè)優(yōu)點(diǎn):使CPU的利用率得到最大的發(fā)揮使應(yīng)用程序模塊化可以將很復(fù)雜的應(yīng)用程序?qū)哟位瘧?yīng)用程序?qū)⒏菀自O(shè)計(jì)與維護(hù)多任務(wù)系統(tǒng)CPU在許多任務(wù)之間轉(zhuǎn)換、調(diào)度,輪番服務(wù)于一系列任90RTOS組成操作系統(tǒng)是硬件與用戶之間的一層系統(tǒng)軟件,負(fù)責(zé)管理整個(gè)系統(tǒng),同時(shí)將硬件細(xì)節(jié)與用戶隔離開來為用戶提供一個(gè)更容易理解和進(jìn)行程序設(shè)計(jì)的接口操作系統(tǒng)的質(zhì)量以它的體系結(jié)構(gòu)為基礎(chǔ),確保系統(tǒng)的性能、可靠性、靈活性、可移植性、可擴(kuò)展性等,同時(shí)定義了硬件與軟件的界面,操作系統(tǒng)內(nèi)部各構(gòu)件的組織關(guān)系系統(tǒng)與用戶的接口RTOS資源分配必須考慮到實(shí)時(shí)性要求合理分配優(yōu)先級(jí)支持優(yōu)先級(jí)搶占提供任務(wù)同步和互斥支持不同任務(wù)之間的數(shù)據(jù)共享支持外部事件(中斷)響應(yīng)系統(tǒng)可剪裁,由于資源限制,所采用的操作系統(tǒng)應(yīng)該有極強(qiáng)的針對(duì)性,因此操作系統(tǒng)功能夠用即可易于擴(kuò)展,由于嵌入式設(shè)備的功能多樣化,要求嵌入式操作系統(tǒng)除提供基本的內(nèi)核支持外,還需提供越來越多的可擴(kuò)展功能模塊(含用戶擴(kuò)展),如:針對(duì)特有應(yīng)用提供的協(xié)議支持、協(xié)議擴(kuò)展,功耗控制等等RTOS組成操作系統(tǒng)是硬件與用戶之間的一層系統(tǒng)軟件,負(fù)責(zé)管91RTOS組成(續(xù))HALRTOS基本內(nèi)核線程線程管理時(shí)鐘管理中斷設(shè)備驅(qū)動(dòng)管理通信管理存儲(chǔ)管理RTOS擴(kuò)展內(nèi)核接口協(xié)議管理其它APIRTOS組成(續(xù))HALRTOS基本內(nèi)核RTOS擴(kuò)展內(nèi)核A92RTOS組成(續(xù))基本內(nèi)核:嵌入式RTOS中最核心最基礎(chǔ)的部分任務(wù)(線程/線程)管理:負(fù)責(zé)系統(tǒng)中任務(wù)狀態(tài)的變遷中斷(包括時(shí)鐘中斷)管理:開關(guān)中斷,完成現(xiàn)場(chǎng)切換和保持任務(wù)(線程/線程)通信管理:信號(hào)量、事件、消息隊(duì)列等存儲(chǔ)管理:分配存儲(chǔ)器空間擴(kuò)展內(nèi)核:為方便用戶使用而對(duì)RTOS進(jìn)行的擴(kuò)展根據(jù)具體應(yīng)用不同所做的擴(kuò)展不同CAM應(yīng)用中表現(xiàn)為對(duì)CI接口協(xié)議進(jìn)行管理設(shè)備驅(qū)動(dòng)程序接口:RTOS內(nèi)核與外部硬件之間的一個(gè)硬件抽象層定義軟件與硬件的界限,方便RTOS的移植升級(jí)應(yīng)用編程接口:建立在RTOS編程接口之上的面向應(yīng)用領(lǐng)域的編程接口方便用戶編寫特定領(lǐng)域的嵌入式應(yīng)用程序RTOS組成(續(xù))基本內(nèi)核:嵌入式RTOS中最核心最基礎(chǔ)的93RTS的響應(yīng)時(shí)間及時(shí)性是實(shí)時(shí)系統(tǒng)最為重要的特性設(shè)計(jì)者應(yīng)該能預(yù)測(cè)實(shí)時(shí)系統(tǒng)的行為同步任務(wù)由時(shí)鐘來同步異步事件通常由中斷驅(qū)動(dòng)RTS的響應(yīng)時(shí)間及時(shí)性是實(shí)時(shí)系統(tǒng)最為重要的特性94一個(gè)多任務(wù)RTOS的事例Resourceallocation&mgmtTaskScheduling&DispatchRealtimeclockInterruptServiceroutinesI/OSubsystemFileMGMTSystemtasks

ApplicationtasksUserLevelOSLevelCommandprocessor一個(gè)多任務(wù)RTOS的事例ResourceTaskSche95資源任何為任務(wù)所占用的實(shí)體都可稱為資源。資源可以是輸入輸出設(shè)備,例如打印機(jī)、鍵盤、顯示器,資源也可以是一個(gè)變量,一個(gè)結(jié)構(gòu)或一個(gè)數(shù)組等可以被一個(gè)以上任務(wù)使用的資源叫做共享資源為了防止數(shù)據(jù)被破壞,每個(gè)任務(wù)在與共享資源打交道時(shí),必須獨(dú)占該資源,這叫做互斥(mutualexclusion)資源任何為任務(wù)所占用的實(shí)體都可稱為資源。資源可以是輸入輸出設(shè)96任務(wù)一個(gè)任務(wù)也稱作一個(gè)線程,是一個(gè)簡單的程序,該程序可以認(rèn)為CPU完全只屬該程序自己每個(gè)任務(wù)都是整個(gè)應(yīng)用的某一部分,被賦予一定的優(yōu)先級(jí),有自己的一套CPU寄存器和??臻g多任務(wù)系統(tǒng)中,任意時(shí)刻只有一個(gè)任務(wù)占有CPU資源一個(gè)任務(wù)通常是一個(gè)無限的循環(huán),當(dāng)任務(wù)完成以后,任務(wù)可以自我刪除任務(wù)一個(gè)任務(wù)也稱作一個(gè)線程,是一個(gè)簡單的程序,該程序可以認(rèn)為97TCB(任務(wù)控制塊)TCB在任務(wù)建立時(shí)將被賦值(初始化)TCB是一個(gè)數(shù)據(jù)結(jié)構(gòu),用來保存該任務(wù)的狀態(tài):堆棧指針、堆棧大小、任務(wù)狀態(tài)、任務(wù)優(yōu)先級(jí)……任務(wù)重新得到CPU使用權(quán)時(shí),任務(wù)控制塊能確保任務(wù)從當(dāng)時(shí)被中斷的那一點(diǎn)絲毫不差地繼續(xù)執(zhí)行TCBs全部駐留在RAM中TCB(任務(wù)控制塊)TCB在任務(wù)建立時(shí)將被賦值(初始化)98任務(wù)狀態(tài)每個(gè)任務(wù)都處在以下5種狀態(tài)之一:休眠態(tài),就緒態(tài)、運(yùn)行態(tài)、掛起態(tài)和被中斷態(tài)休眠態(tài):該任務(wù)駐留在內(nèi)存中,但并不被內(nèi)核所調(diào)度就緒態(tài):該任務(wù)已經(jīng)準(zhǔn)備好運(yùn)行,但由于優(yōu)先級(jí)比正運(yùn)行的任務(wù)優(yōu)先級(jí)低,還暫時(shí)不能運(yùn)行運(yùn)行態(tài):掌握了CPU的控制權(quán),正在運(yùn)行中掛起態(tài):也叫等待態(tài),在等待某一事件的發(fā)生中斷態(tài):發(fā)生中斷時(shí),進(jìn)入相應(yīng)的中斷服務(wù)任務(wù)狀態(tài)每個(gè)任務(wù)都處在以下5種狀態(tài)之一:休眠態(tài),就緒態(tài)、運(yùn)99任務(wù)狀態(tài)變遷圖WAITINGDORMANTREADYRUNNINGISR任務(wù)狀態(tài)變遷圖WAITINGDORMANTREADYRUNN100任務(wù)狀態(tài)變遷就緒-->運(yùn)行調(diào)度程序選擇一個(gè)新的線程運(yùn)行運(yùn)行-->就緒運(yùn)行線程用完了時(shí)間片運(yùn)行線程被高優(yōu)先級(jí)線程搶占運(yùn)行-->等待當(dāng)一線程必須等待時(shí)等待某外設(shè)的I/O操作等待某共享資源由暫不能使用變成能使用狀態(tài)等待定時(shí)脈沖的到來或等待超時(shí)信號(hào)的到來以結(jié)束目前的等待……等待-->就緒當(dāng)所等待的事件發(fā)生時(shí)任務(wù)狀態(tài)變遷就緒-->運(yùn)行101任務(wù)切換也稱為上下文切換(ContextSwitch)當(dāng)多任務(wù)內(nèi)核決定運(yùn)行另外的任務(wù)時(shí):保存正在運(yùn)行任務(wù)的當(dāng)前狀態(tài)(Context),即CPU寄存器中的全部內(nèi)容。這些內(nèi)容保存在任務(wù)自己的棧區(qū)之中把下一個(gè)將要運(yùn)行的任務(wù)的當(dāng)前狀況從該任務(wù)的棧中重新裝入CPU的寄存器,并開始下一個(gè)任務(wù)的運(yùn)行任務(wù)切換過程增加了應(yīng)用程序的額外負(fù)荷任務(wù)切換也稱為上下文切換(ContextSwitch)102任務(wù)調(diào)度任務(wù)調(diào)度就是按一定的調(diào)度算法從就緒任務(wù)中選中一個(gè)任務(wù)到處理器上運(yùn)行主要工作:(1)記錄當(dāng)前任務(wù)狀態(tài)(如指令計(jì)數(shù)器、狀態(tài)寄存器、通用寄存器等)到TCB;(2)根據(jù)調(diào)度算法,在就緒任務(wù)中選一個(gè)任務(wù);(3)回收處理機(jī)并分配給選中的任務(wù)。任務(wù)調(diào)度任務(wù)調(diào)度就是按一定的調(diào)度算法從就緒任務(wù)中選中一個(gè)任務(wù)103任務(wù)調(diào)度方式非搶占式調(diào)度搶占式調(diào)度由于嵌入式操作系統(tǒng)對(duì)實(shí)時(shí)性的較強(qiáng)要求,因此基本上使用搶占式調(diào)度。調(diào)度算法FIFO:先來先服務(wù)短作業(yè)優(yōu)先基于優(yōu)先級(jí):時(shí)間片輪轉(zhuǎn)(RoundRobin):固定時(shí)間片可變時(shí)間片多級(jí)隊(duì)列算法多級(jí)反饋隊(duì)列算法其它組合策略調(diào)度算法任務(wù)調(diào)度方式非搶占式調(diào)度104非搶占式調(diào)度非搶占式調(diào)度105搶占式調(diào)度搶占式調(diào)度106可重入性(Reentrancy)可重入型函數(shù)可以被一個(gè)以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞可重入型函數(shù)任何時(shí)候都可以被中斷,一段時(shí)間以后又可以運(yùn)行編寫可重入型函數(shù)需遵循的規(guī)則:使用局部變量,即變量保存在CPU寄存器或堆棧中盡量不使用static或extern變量可重入性(Reentrancy)可重入型函數(shù)可以被一個(gè)以上107任務(wù)優(yōu)先級(jí)每個(gè)任務(wù)都有其優(yōu)先級(jí)。任務(wù)越重要,賦予的優(yōu)先級(jí)應(yīng)越高任務(wù)優(yōu)先級(jí)每個(gè)任務(wù)都有其優(yōu)先級(jí)。任務(wù)越重要,賦予的優(yōu)先級(jí)應(yīng)越108eCos任務(wù)及優(yōu)先級(jí)優(yōu)先級(jí)0~255,優(yōu)先級(jí)的最低3bits忽略,因此0~7、8~15……各組內(nèi)的優(yōu)先級(jí)相同,組外數(shù)值越大,優(yōu)先級(jí)越高eCos任務(wù)結(jié)構(gòu):roottask1task2task3task4task5idleeCos任務(wù)及優(yōu)先級(jí)優(yōu)先級(jí)0~255,優(yōu)先級(jí)的最低3bits109任務(wù)管理創(chuàng)建任務(wù)(CreateTask)刪除任務(wù)(DeleteTask)掛起任務(wù)()喚醒任務(wù)()改變?nèi)蝿?wù)優(yōu)先級(jí)()獲取任務(wù)優(yōu)先級(jí)()獲取當(dāng)前任務(wù)ID任務(wù)管理創(chuàng)建任務(wù)(CreateTask)110任務(wù)管理(sidsaAPI)t_createULONGt_create(charname[4],ULONGprio,ULONGsstack,ULONGustack,ULONGflags,ULONG*tid)t_startULONGt_start(ULONGtid,ULONGmode,void*start_addr,ULONGtargs[])t_deleteULONGt_delete(ULONGtid)t_suspendULONGt_suspend(ULONGtid)t_resumeULONGt_resume(ULONGtid)t_wkafterULONGtm_wkafter(ULONGticks)任務(wù)管理(sidsaAPI)t_create111任務(wù)管理(kernelAPI)cyg_thread_createcyg_thread_exitcyg_thread_killcyg_thread_deletecyg_thread_yieldcyg_thread_delaycyg_thread_suspendcyg_thread_resumecyg_thread_release任務(wù)管理(kernelAPI)cyg_thread_cre112任務(wù)管理(kernelAPI續(xù))cyg_thread_get_prioritycyg_thread_get_current_prioritycyg_thread_set_prioritycyg_thread_selfcyg_thread_idle_threadcyg_thread_get_stack_basecyg_thread_get_stack_sizecyg_thread_measure_stack_usagecyg_thread_get_nextcyg_thread_get_infocyg_thread_find任務(wù)管理(kernelAPI續(xù))cyg_thread_g113任務(wù)間通信及同步共享內(nèi)存(ShareMemory)信號(hào)量(Semaphore)互斥量(Mutex)事件標(biāo)志(EventFlag)消息郵箱(MessageBox)消息隊(duì)列(MessageQueue)任務(wù)間通信及同步共享內(nèi)存(ShareMemory)114信號(hào)量(Semaphore)信號(hào)量用于:控制共享資源的使用權(quán)(滿足互斥條件)標(biāo)志某事件的發(fā)生使兩個(gè)任務(wù)的行為同步一個(gè)信號(hào)量是一個(gè)16位變量,初值為0~65535,值為0表示資源處于鎖住狀態(tài),非0表示有多個(gè)資源,供多個(gè)任務(wù)訪問信號(hào)量表示符號(hào):鑰匙或旗幟信號(hào)量(Semaphore)信號(hào)量用于:115信號(hào)量的P、V操作等待信號(hào)量(P操作):如果信號(hào)量值大于0,則信號(hào)量值減1,任務(wù)得以繼續(xù)運(yùn)行如果信號(hào)量的值為0,等待信號(hào)量的任務(wù)被掛起并列入等待信號(hào)量任務(wù)表釋放信號(hào)量(V操作):如果沒有任務(wù)在等待信號(hào)量,信號(hào)量的值僅僅是簡單地加1如果有任務(wù)在等待該信號(hào)量,那么就會(huì)有一個(gè)任務(wù)進(jìn)入就緒態(tài),信號(hào)量的值也就不加1信號(hào)量的P、V操作等待信號(hào)量(P操作):釋放信號(hào)量(V操作116P、V操作為原語操作,原語(primitiveoratomicaction):

是由若干多機(jī)器指令構(gòu)成的完成某種特定功能的一段程序,具有不可分割性即原語的執(zhí)行必須是連續(xù)的,在執(zhí)行過程中不允許被中斷實(shí)現(xiàn):開關(guān)中斷信號(hào)量的使用:必須置一次且只能置一次初值初值不能為負(fù)數(shù)只能執(zhí)行P、V操作信號(hào)量的P、V操作(續(xù))P、V操作為原語操作,原語(primitiveorato117用P、V操作解決線程間互斥問題P(mutex)V(mutex)P1P2P3互斥區(qū)P(mutex)P(mutex)V(mutex)V(mutex)用P、V操作解決線程間互斥問題P(mutex)V(mutex118優(yōu)先級(jí)反轉(zhuǎn)問題優(yōu)先級(jí)反轉(zhuǎn)問題119優(yōu)先級(jí)反轉(zhuǎn)問題(續(xù))設(shè)計(jì)中應(yīng)注意避免產(chǎn)生優(yōu)先級(jí)反轉(zhuǎn)優(yōu)先級(jí)繼承(Priorityinheritance)可解決優(yōu)先級(jí)反轉(zhuǎn)問題優(yōu)先級(jí)反轉(zhuǎn)問題(續(xù))設(shè)計(jì)中應(yīng)注意避免產(chǎn)生優(yōu)先級(jí)反轉(zhuǎn)120經(jīng)典的生產(chǎn)者─消費(fèi)者問題消費(fèi)者生產(chǎn)者經(jīng)典的生產(chǎn)者─消費(fèi)者問題消費(fèi)者生產(chǎn)者121經(jīng)典的生產(chǎn)者─消費(fèi)者問題(續(xù)1)同步問題:

P線程不能往“滿”的緩沖區(qū)中放產(chǎn)品,設(shè)置信號(hào)量為S1Q線程不能從“空”的緩沖區(qū)中取產(chǎn)品,設(shè)置信號(hào)量S2P:Q:while(true){while(true){

生產(chǎn)一個(gè)產(chǎn)品;P(s2);P(s1);從緩沖區(qū)取產(chǎn)品;

送產(chǎn)品到緩沖區(qū);V(s1);V(s2);消費(fèi)產(chǎn)品;};};S1初值為1,S2初值為0經(jīng)典的生產(chǎn)者─消費(fèi)者問題(續(xù)1)同步問題:S1初值為1,S2122實(shí)時(shí)操作系統(tǒng)RTOS培訓(xùn)課件123多個(gè)緩沖區(qū)的生產(chǎn)者和消費(fèi)者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);

從Buffer[j]取產(chǎn)品;V(S1);

消費(fèi)產(chǎn)品;j=(j+1)%n;};S1初值為n,S2初值為0多個(gè)緩沖區(qū)的生產(chǎn)者和消費(fèi)者P:

i=0;

while(124Q:

j=0;while(true){P(S2);P(mutex2);

從Buffer[j]取產(chǎn)品;V(mutex2);V(S1);

消費(fèi)產(chǎn)品;j=(j+1)%n;};n個(gè)緩沖區(qū)、m個(gè)生產(chǎn)者和k個(gè)消費(fèi)者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;};錯(cuò)誤S1初值為n,S2初值為0線程數(shù)為m線程數(shù)為kQ:n個(gè)緩沖區(qū)、m個(gè)生產(chǎn)者和k個(gè)消費(fèi)者P:

i=0;

w125Q:

j=0;while(true){P(S2);P(mutex2);

從Buffer[j]取產(chǎn)品;j=(j+1)%n;V(mutex2);V(S1);

消費(fèi)產(chǎn)品;};n個(gè)緩沖區(qū)、m個(gè)生產(chǎn)者和k個(gè)消費(fèi)者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ù)為m線程數(shù)為kQ:n個(gè)緩沖區(qū)、m個(gè)生產(chǎn)者和k個(gè)消費(fèi)者P:

i=0;

w1261)信號(hào)量的物理含義:S>0表示有S個(gè)資源可用S=0表示無資源可用S<0則|S|表示S等待隊(duì)列中的線程個(gè)數(shù)P(S):表示申請(qǐng)一個(gè)資源V(S):表示釋放一個(gè)資源。信號(hào)量的初值應(yīng)該大于等于0信號(hào)量及P、V操作討論1)信號(hào)量的物理含義:信號(hào)量及P、V操作討論1272)P.V操作必須成對(duì)出現(xiàn),有一個(gè)P操作就一定有一個(gè)V操作當(dāng)為互斥操作時(shí),它們同處于同一線程當(dāng)為同步操作時(shí),則不在同一線程中出現(xiàn)如果P(S1)和P(S2)兩個(gè)操作在一起,那么P操作的順序至關(guān)重要,一個(gè)同步P操作與一個(gè)互斥P操作在一起時(shí)同步P操作在互斥P操作前而兩個(gè)V操作無關(guān)緊要信號(hào)量及P、V操作討論(續(xù)1)2)P.V操作必須成對(duì)出現(xiàn),有一個(gè)P操作就一定有一個(gè)V操作1283)P.V操作的優(yōu)缺點(diǎn)優(yōu)點(diǎn):簡單,而且表達(dá)能力強(qiáng)(用P.V操作可解決任何同步互斥問題)缺點(diǎn):不夠安全;P.V操作使用不當(dāng)會(huì)出現(xiàn)死鎖;遇到復(fù)雜同步互斥問題時(shí)實(shí)現(xiàn)復(fù)雜信號(hào)量及P、V操作討論(續(xù)2)3)P.V操作的優(yōu)缺點(diǎn)信號(hào)量及P、V操作討論(續(xù)2)129【思考題】1.用P.V操作解決下圖之同步問題:getcopyputfstg【思考題】1.用P.V操作解決下圖之同步問題:getcopy130用P.V操作解決司機(jī)與售票員的問題司機(jī)線程:while(true){啟動(dòng)車輛正常駕駛到站停車}…售票員線程:while(true){關(guān)門售票開門}…用P.V操作解決司機(jī)與售票員的問題司機(jī)線程:售票員線程:131信號(hào)量管理創(chuàng)建信號(hào)量(SemCreate)釋放信號(hào)量(SemPost)等待信號(hào)量(SemPend)信號(hào)量為0時(shí)任務(wù)掛起,永久或有限等待無等待取信號(hào)量(SemAccept)信號(hào)量為0時(shí)任務(wù)不會(huì)掛起,返回0信號(hào)量管理創(chuàng)建信號(hào)量(SemCreate)132eCos的信號(hào)量管理(sidsaAPI)sm_createULONGsm_create(charname[4],ULONGcount,ULONGflags,ULONG*smid)sm_deleteULONGsm_delete(ULONGsmid)sm_pULONGsm_p(ULONGsmid,ULONGflags,ULONGtimeout)sm_vULONGsm_v(ULONGsmid)eCos的信號(hào)量管理(sidsaAPI)sm_create133eCos的信號(hào)量管理(kernelAPI)cyg_semaphore_initcyg_semaphore_destroycyg_semaphore_waitcyg_semaphore_timed_waitcyg_semaphore_trywaitcyg_semaphore_postcyg_semaphore_peekeCos的信號(hào)量管理(kernelAPI)cyg_sema134互斥量(Mutex)一個(gè)互斥量就是一個(gè)同步對(duì)象,用于多任務(wù)串行訪問共享數(shù)據(jù)只有一個(gè)任務(wù)可以獲得和擁有一個(gè)互斥量,也只有這個(gè)任務(wù)隨后才能釋放這個(gè)互斥量互斥量是取值為0-1的二元信號(hào)量互斥量(Mutex)一個(gè)互斥量就是一個(gè)同步對(duì)象,用于多任務(wù)串135互斥量管理創(chuàng)建互斥量(MutexCreate)刪除互斥量(MutexDelete)等待互斥量(MutexPend)釋放互斥量(MutexPost)無等待獲取互斥量(MutexAccept)互斥量管理創(chuàng)建互斥量(MutexCreate)136互斥量管理(sidsaAPI)NA互斥量管理(sidsaAPI)NA137互斥量管理(kernelAPI)cyg_mutex_initcyg_mutex_destroycyg_mutex_lockcyg_mutex_trylockcyg_mutex_unlockcyg_mutex_releasecyg_mutex_set_ceilingcyg_mutex_set_protocol互斥量管理(kernelAPI)cyg_mutex_ini138事件標(biāo)志(EventFlags)事件標(biāo)志用于任務(wù)與多個(gè)事件的同步獨(dú)立型同步(即邏輯或關(guān)系):任務(wù)需要與任何事件之一發(fā)生同步關(guān)聯(lián)型同步(邏輯與關(guān)系):任務(wù)需要與若干事件都發(fā)生了同步事件標(biāo)志通常為32位變量,每個(gè)事件占一位(bit),當(dāng)一個(gè)標(biāo)志處于設(shè)置狀態(tài)(1)時(shí),表示相關(guān)事件已經(jīng)發(fā)生事件標(biāo)志(EventFlags)事件標(biāo)志用于任務(wù)與多個(gè)事件139事件標(biāo)志組管理創(chuàng)建事件標(biāo)志組(FLagCreate)置位事件標(biāo)志(FlagPost)等待事件標(biāo)志位(FlagPend)無等待獲取事件標(biāo)志位(FlagAccept)清除事件標(biāo)志位(FlagClear)在再次發(fā)送事件標(biāo)志前,應(yīng)先清除該標(biāo)志事件標(biāo)志組管理創(chuàng)建事件標(biāo)志組(FLagCreate)140事件標(biāo)志組管理(sidsaAPI)ev_sendULONGev_send(ULONGtid,ULONGevents)ev_receiveULONGev_receive(ULONGevents,ULONGflags,ULONGtimeout,ULONG*events_r)事件標(biāo)志組管理(sidsaAPI)ev_send141事件標(biāo)志組管理(kernelAPI)cyg_flag_initcyg_flag_destroycyg_flag_setbitscyg_flag_maskbitscyg_flag_waitcyg_flag_timed_waitcyg_flag_pollcyg_flag_peekcyg_flag_waiting事件標(biāo)志組管理(kernelAPI)cyg_flag_in142消息郵箱(MessageBox)消息郵箱也稱作交換消息,是用一個(gè)指針型變量放到郵箱,該指針指向的內(nèi)容就是那則消息消息郵箱用于一個(gè)線程向另一個(gè)線程發(fā)送消息,實(shí)現(xiàn)線程間通信用一個(gè)I字表示郵箱符號(hào)消息郵箱(MessageBox)消息郵箱也稱作交換消息,是143消息郵箱管理創(chuàng)建郵箱(MboxCreate)發(fā)送消息(MboxPost)消息放入郵箱后,或者是把消息傳給等待消息的任務(wù)表中優(yōu)先級(jí)最高的那個(gè)任務(wù)(基于優(yōu)先級(jí)),或者是將消息傳給最先開始等待消息的任務(wù)(基于先進(jìn)先出)郵箱只能保存一個(gè)消息,試圖向已存有消息的郵箱發(fā)送消息會(huì)導(dǎo)致“郵箱滿”錯(cuò)誤等待消息(MboxPend)等待消息的任務(wù)會(huì)因?yàn)猷]箱是空的而被掛起,且被記錄到等待消息的任務(wù)表中,直到收到消息無等待取消息(MboxAccept)如果郵箱是空的任務(wù)也不會(huì)掛起,此時(shí)返回值為NULL表示無消息消息郵箱管理創(chuàng)建郵箱(MboxCreate)144消息郵箱管理(sidsaAPI)NA消息郵箱管理(sidsaAPI)NA145消息郵箱管理(kernelAPI)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_to_getcyg_mbox_waiting_to_put消息郵箱管理(kernelAPI)cyg_mbox_cre146消息隊(duì)列(MessageQueue)消息隊(duì)列實(shí)際上是郵箱陣列任務(wù)先得到的是最先進(jìn)入消息隊(duì)列的消息,即先進(jìn)先出原則(FIFO)用2個(gè)I字表示郵箱隊(duì)列符號(hào)消息隊(duì)列(MessageQueue)消息隊(duì)列實(shí)際上是郵箱陣147消息隊(duì)列管理創(chuàng)建消息隊(duì)列(QCreate)發(fā)送消息(QPost)消息放入消息隊(duì)列后,或者是把消息傳給等待消息的任務(wù)表中優(yōu)先級(jí)最高的那個(gè)任務(wù)(基于優(yōu)先級(jí)),或者是將消息傳給最先開始等待消息的任務(wù)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論