《嵌入式操作系統(tǒng)原理與面向任務(wù)程序設(shè)計(jì)》課件第二講M_第1頁(yè)
《嵌入式操作系統(tǒng)原理與面向任務(wù)程序設(shè)計(jì)》課件第二講M_第2頁(yè)
《嵌入式操作系統(tǒng)原理與面向任務(wù)程序設(shè)計(jì)》課件第二講M_第3頁(yè)
《嵌入式操作系統(tǒng)原理與面向任務(wù)程序設(shè)計(jì)》課件第二講M_第4頁(yè)
《嵌入式操作系統(tǒng)原理與面向任務(wù)程序設(shè)計(jì)》課件第二講M_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

嵌入式操作系統(tǒng)在嵌入式系統(tǒng)中的位置?應(yīng)用程序嵌入式實(shí)時(shí)操作系統(tǒng)BSP抽象的硬件接口函數(shù)包(HIP)集成ARM、存儲(chǔ)器、時(shí)鐘、外設(shè)的硬件平臺(tái)進(jìn)程與線程任務(wù)調(diào)度與優(yōu)先級(jí)資源內(nèi)存管理內(nèi)核與時(shí)鐘節(jié)拍信號(hào)量與互斥信號(hào)量消息郵箱……嵌入式實(shí)時(shí)操作系統(tǒng)原理在桌面Windows操作系統(tǒng)下,點(diǎn)擊任何一個(gè)以.exe為擴(kuò)展名的可執(zhí)行文件,或者點(diǎn)擊桌面上的程序圖標(biāo),都可以啟動(dòng)一個(gè)應(yīng)用程序,該應(yīng)用程序啟動(dòng)后,將成為Windows操作系統(tǒng)管理的一個(gè)進(jìn)程。例如,用戶在使用OfficeWord軟件時(shí),打開Windows系統(tǒng)任務(wù)管理器,如圖2-2所示,會(huì)出現(xiàn)一個(gè)WINWORD.EXE進(jìn)程。2.1什么是進(jìn)程?系統(tǒng)中的進(jìn)程Windows2.1.1進(jìn)程的特點(diǎn)?動(dòng)態(tài)性異步性并發(fā)性獨(dú)立性結(jié)構(gòu)性正如WindowsVista,WindowsCE是一個(gè)完全的多任務(wù)和多線程的操作系統(tǒng)。包含可執(zhí)行代碼的Win32文件被稱作模塊,WindowsCE支持二種類型的模塊,即以EXE為擴(kuò)展名的應(yīng)用程序和以DLL為擴(kuò)展名的動(dòng)態(tài)鏈接庫(kù)。當(dāng)WindowsCE裝入一個(gè)應(yīng)用程序模塊時(shí),它就創(chuàng)建了一個(gè)進(jìn)程。一個(gè)進(jìn)程是應(yīng)用程序的一個(gè)實(shí)例。如果二個(gè)MicrosoftPocketWord的副本在運(yùn)行,那么就可以說(shuō)有二個(gè)獨(dú)立的進(jìn)程在運(yùn)行。每個(gè)進(jìn)程有它自己的受保護(hù)的地址空間。WindowsCE6允許無(wú)限多個(gè)進(jìn)程并發(fā)執(zhí)行。2.1.2DouglasBoling先生談進(jìn)程的實(shí)質(zhì)線程是進(jìn)程中的一個(gè)執(zhí)行單元,但是線程和程序中的函數(shù)沒有對(duì)應(yīng)關(guān)系!線程的工作機(jī)制與進(jìn)程相似,具有獨(dú)立的堆棧和運(yùn)行環(huán)境,對(duì)于單CPU系統(tǒng)來(lái)說(shuō),任一時(shí)刻僅有一個(gè)線程處于運(yùn)行狀態(tài),當(dāng)運(yùn)行的線程被掛起后,CPU會(huì)切換到新的線程執(zhí)行。進(jìn)程中的所有線程均使用該進(jìn)程的資源。每個(gè)進(jìn)程都有一個(gè)主線程,且每個(gè)進(jìn)程均可以創(chuàng)建無(wú)限多個(gè)線程。2.1.3什么是線程在嵌入式實(shí)時(shí)操作系統(tǒng)下,任務(wù)本質(zhì)上是進(jìn)程或者線程。例如在μC/OS-II下,任務(wù)更像一個(gè)具有唯一線程的進(jìn)程,即每個(gè)任務(wù)具有唯一的一個(gè)優(yōu)先級(jí),具有獨(dú)立的堆??臻g,每個(gè)時(shí)刻僅能有一個(gè)任務(wù)占用CPU使用權(quán),多個(gè)任務(wù)間通過(guò)任務(wù)調(diào)度協(xié)調(diào)運(yùn)行。2.1.4任務(wù)與進(jìn)程或線程的關(guān)系2.1.5μC/OS-II中的任務(wù)創(chuàng)建和管理過(guò)程2.1.6任務(wù)在內(nèi)存中的示意圖所謂調(diào)度器就是任務(wù)間切換的一種規(guī)則,是由嵌入式實(shí)時(shí)操作系統(tǒng)完成的,在μC/OS-II中,當(dāng)多個(gè)任務(wù)同時(shí)就緒時(shí),優(yōu)先級(jí)最高的任務(wù)得到CPU使用權(quán)而執(zhí)行;當(dāng)某一任務(wù)執(zhí)行完成后,系統(tǒng)將再次查詢就緒態(tài)的任務(wù)中優(yōu)先級(jí)最高的任務(wù),并將CPU使用權(quán)分配給它;當(dāng)某一任務(wù)被中斷而中斷服務(wù)程序執(zhí)行完畢后,該任務(wù)將與所有就緒態(tài)的任務(wù)一起被調(diào)度,即中斷退出后,會(huì)查詢就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)執(zhí)行,如果被中斷的任務(wù)具有最高優(yōu)先級(jí),則返回到那個(gè)任務(wù)執(zhí)行,否則,將切換到其他最高優(yōu)先級(jí)的任務(wù)執(zhí)行。2.1.7什么是調(diào)度器任務(wù)調(diào)度是嵌入式實(shí)時(shí)操作系統(tǒng)的核心工作,最優(yōu)化調(diào)度策略是嵌入式實(shí)時(shí)操作系統(tǒng)設(shè)計(jì)的最終目標(biāo)。目前大部分實(shí)時(shí)操作系統(tǒng)均有較高的調(diào)度效率。2.2任務(wù)調(diào)度與優(yōu)先級(jí)2.2.1任務(wù)有幾種狀態(tài)所謂任務(wù)的就緒態(tài)是指當(dāng)前某個(gè)任務(wù)處于可執(zhí)行狀態(tài),但是由于CPU正在被其他任務(wù)使用,使得該任務(wù)無(wú)法立即執(zhí)行,處于就緒態(tài)的任務(wù)一旦獲得CPU使用權(quán),將立即執(zhí)行。任務(wù)的等待態(tài)是指該任務(wù)正在等待某一事件的發(fā)生或處于延時(shí)等待狀態(tài)。2.2.2什么是就緒態(tài)等待態(tài)任務(wù)即使得到了CPU使用權(quán),也不可能執(zhí)行,當(dāng)然,它也不會(huì)得到CPU使用權(quán);而就緒態(tài)任務(wù)只要得到CPU使用權(quán),就立即執(zhí)行。等待態(tài)任務(wù)等待的是某個(gè)條件的滿足,例如,它請(qǐng)求的共享資源可以使用了,或延時(shí)達(dá)到了指定的時(shí)長(zhǎng)等;就緒態(tài)任務(wù)等待的是CPU使用權(quán)。2.2.3就緒態(tài)和等待態(tài)的區(qū)別當(dāng)?shù)却龖B(tài)任務(wù)的等待條件滿足而結(jié)束等待后,不能立即進(jìn)入執(zhí)行態(tài),必須進(jìn)入就緒態(tài);而就緒態(tài)任務(wù)一旦不再等待,便獲得了CPU使用權(quán)而執(zhí)行了。也就是說(shuō),等待態(tài)任務(wù)當(dāng)?shù)却龡l件滿足后就會(huì)進(jìn)入就緒態(tài);而就緒態(tài)任務(wù)不再等待時(shí)將進(jìn)入執(zhí)行態(tài)。一般來(lái)說(shuō),等待態(tài)任務(wù)的等待時(shí)間會(huì)大于一個(gè)時(shí)鐘節(jié)拍,甚至可為成百上千個(gè)時(shí)鐘節(jié)拍;而就緒態(tài)任務(wù)的等待時(shí)間必然會(huì)小于一個(gè)時(shí)鐘節(jié)拍。嵌入式系統(tǒng)要求一個(gè)時(shí)鐘節(jié)拍內(nèi)CPU必須有能力完成所有的就緒態(tài)任務(wù)。2.2.4什么是任務(wù)優(yōu)先級(jí)每個(gè)任務(wù)在創(chuàng)建時(shí)都被分配一個(gè)優(yōu)先級(jí)數(shù)值,大部分嵌入式實(shí)時(shí)操作系統(tǒng)的調(diào)度是基于優(yōu)先級(jí)實(shí)現(xiàn)的,即同處于就緒態(tài)的最高優(yōu)先級(jí)的任務(wù)將獲得CPU使用權(quán)而執(zhí)行,優(yōu)先級(jí)低的就緒態(tài)任務(wù)必須等高優(yōu)先級(jí)的任務(wù)執(zhí)行完畢后才能按優(yōu)先級(jí)高低依次獲得CPU使用權(quán)。當(dāng)優(yōu)先級(jí)相同的多個(gè)任務(wù)處于就緒態(tài)時(shí),嵌入式實(shí)時(shí)操作系統(tǒng)為它們每個(gè)任務(wù)分配執(zhí)行的時(shí)間片,當(dāng)某個(gè)任務(wù)在其被分配的時(shí)間片內(nèi)還沒有執(zhí)行完時(shí),系統(tǒng)將剝奪其CPU的使用權(quán),分配下一個(gè)時(shí)間片給同優(yōu)先級(jí)的另一個(gè)任務(wù),同樣道理,直到這類任務(wù)執(zhí)行完成,這種方法稱時(shí)間片輪換調(diào)度法。2.2.5相同優(yōu)先級(jí)任務(wù)的調(diào)度法任務(wù)切換是指任務(wù)狀態(tài)間的切換,只有在多任務(wù)操作系統(tǒng)中才有意義,任務(wù)切換為ContextSwitch,有時(shí)也被直譯為上下文切換,每次任務(wù)的切換都伴隨有堆棧操作,用于保存或恢復(fù)任務(wù)的執(zhí)行環(huán)境(或上下文)。2.2.6什么是任務(wù)切換1、任務(wù)被創(chuàng)建后會(huì)進(jìn)入到就緒態(tài),此時(shí)有一個(gè)入棧的操作,即把該任務(wù)的執(zhí)行入口地址入棧,因?yàn)榇藭r(shí)沒有運(yùn)行環(huán)境,故運(yùn)行環(huán)境的入棧值是隨機(jī)數(shù)。2.2.7任務(wù)間有哪些狀態(tài)切換2、就緒態(tài)的最高優(yōu)先級(jí)任務(wù)獲得CPU使用權(quán)后,由就緒態(tài)進(jìn)入到執(zhí)行態(tài),此時(shí)原執(zhí)行態(tài)的任務(wù)有一個(gè)入棧的操作,將其運(yùn)行環(huán)境保存在其獨(dú)立的堆棧中;而進(jìn)入執(zhí)行態(tài)的任務(wù)有一個(gè)出棧操作,恢復(fù)其運(yùn)行環(huán)境,如果是第一次執(zhí)行,只有程序計(jì)數(shù)器指針(PC)指針是有意義的,其他的運(yùn)行環(huán)境值(即CPU寄存器值)沒有意義,將在運(yùn)行中被覆蓋掉。3、任一時(shí)刻,僅可能有一個(gè)任務(wù)處于執(zhí)行態(tài),執(zhí)行態(tài)的任務(wù)可以被中斷信號(hào)中斷,從而將CPU使用權(quán)轉(zhuǎn)讓給中斷服務(wù)程序,此時(shí)有一個(gè)入棧操作,保存當(dāng)前任務(wù)的執(zhí)行環(huán)境,從而該任務(wù)進(jìn)入中斷態(tài)。4、處于中斷態(tài)的任務(wù)相當(dāng)于一種特殊的就緒態(tài),當(dāng)中斷服務(wù)程序執(zhí)行完成后,系統(tǒng)會(huì)調(diào)度,從處于中斷態(tài)的任務(wù)和所有就緒態(tài)的任務(wù)中選擇優(yōu)先級(jí)最高的任務(wù)執(zhí)行,如果中斷態(tài)任務(wù)優(yōu)先級(jí)最高,當(dāng)然就會(huì)從中斷態(tài)恢復(fù)到執(zhí)行態(tài)了;如果有比中斷態(tài)任務(wù)優(yōu)先級(jí)高的就緒態(tài)任務(wù),則中斷態(tài)任務(wù)將進(jìn)入就緒態(tài)。5、當(dāng)執(zhí)行態(tài)的任務(wù)運(yùn)行完畢后,CPU使用權(quán)會(huì)移交出去,此時(shí)有一個(gè)入棧操作,該任務(wù)將進(jìn)入到等待態(tài),即等待一定時(shí)間的延時(shí)或等待某個(gè)事件的發(fā)生。6、等待態(tài)任務(wù)將不斷地請(qǐng)求某個(gè)事件或查詢延時(shí)情況,直到滿足其執(zhí)行條件后,才從等待態(tài)進(jìn)入到就緒態(tài)。任何一個(gè)任務(wù)都不是每時(shí)每刻地執(zhí)行著,都是按照一定的時(shí)鐘節(jié)律在執(zhí)行,理論上,總可以把一個(gè)整體的不間斷地執(zhí)行的工作,分成這種節(jié)律性的任務(wù)來(lái)完成。7、就緒態(tài)、等待態(tài)和執(zhí)行態(tài)是任務(wù)的三個(gè)正常調(diào)度狀態(tài),當(dāng)任務(wù)仍然住留在內(nèi)存中,但是已不再受系統(tǒng)調(diào)度時(shí),就進(jìn)入了休眠態(tài)。任務(wù)的休眠態(tài)和等待態(tài)是不同的,任務(wù)一旦進(jìn)入休眠態(tài),不會(huì)有堆棧操作,堆棧內(nèi)原有的運(yùn)行環(huán)境也沒有意義了。休眠態(tài)的任務(wù)可以再次啟動(dòng)進(jìn)入到就緒態(tài),這一過(guò)程和創(chuàng)建一個(gè)新的任務(wù)類似。2.2.8為什么堆棧操作越快越好正常任務(wù)的切換都會(huì)伴隨著二個(gè)堆棧操作,即放棄CPU占有權(quán)的任務(wù)入棧操作和獲得CPU使用權(quán)的任務(wù)出棧操作,因此,一個(gè)任務(wù)切換到另一個(gè)任務(wù),并不是一蹴而就的,而是中間需要有一些時(shí)間,這些必需的時(shí)間開銷實(shí)際上是任務(wù)執(zhí)行的額外開銷,即和任務(wù)執(zhí)行代碼無(wú)關(guān)的。由于這個(gè)原因,那些具有快速堆棧操作的CPU芯片在任務(wù)切換時(shí)效率更高。2.2.9任務(wù)調(diào)度的原則任務(wù)調(diào)度往往借助一定的算法規(guī)則的,從算法本質(zhì)意義上講,任務(wù)調(diào)度算法是一個(gè)查表算法,并且要求隨著任務(wù)數(shù)的增加(即表格的增大),這個(gè)查表算法查詢特定任務(wù)所需要的時(shí)間應(yīng)該大體相同或完全相同。μC/OS-II借助任務(wù)就緒表和基于該表的任務(wù)調(diào)度算法,保證了任務(wù)調(diào)度時(shí)間是確定的,不隨任務(wù)數(shù)的變化而變化。目前的嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)調(diào)度均是基于優(yōu)先級(jí)的,即保證任一時(shí)刻就緒的最高優(yōu)先級(jí)任務(wù)得到CPU使用權(quán),這種調(diào)度方法稱為優(yōu)先級(jí)調(diào)度法。2.2.10什么是優(yōu)先級(jí)調(diào)度法即使有多個(gè)執(zhí)行權(quán)限相同的任務(wù),在單CPU系統(tǒng)下,也不可能同時(shí)執(zhí)行,仍然可以為它們劃分不同的優(yōu)先級(jí)。在這些情況下,可通過(guò)信號(hào)量、消息郵箱等實(shí)現(xiàn)這些任務(wù)的同步執(zhí)行。2.2.11為什么使用優(yōu)先級(jí)調(diào)度法?采用優(yōu)先級(jí)調(diào)度法進(jìn)行任務(wù)調(diào)度,調(diào)度算法實(shí)質(zhì)上就是如何從就緒的任務(wù)中查找優(yōu)先級(jí)最高的任務(wù),一般地優(yōu)先級(jí)號(hào)為整數(shù)值,若假設(shè)整數(shù)值越小,任務(wù)的優(yōu)先級(jí)越高,則調(diào)度算法就是從就緒的任務(wù)中找優(yōu)先級(jí)號(hào)最小的任務(wù)。顯然,這種基于整型值的查表是所有類型查表操作中最快的一種方法。2.2.12優(yōu)先級(jí)相同的任務(wù)的調(diào)度2.2.13調(diào)度器的工作流程當(dāng)中斷發(fā)生后,應(yīng)用程序會(huì)中止當(dāng)前程序的執(zhí)行,而跳轉(zhuǎn)到中斷服務(wù)例程,中斷服務(wù)程序執(zhí)行完畢后,將返回到被中止的程序段繼續(xù)執(zhí)行。從中斷信號(hào)產(chǎn)生到中斷服務(wù)程序的第一行指令被執(zhí)行的時(shí)間間隔為中斷響應(yīng)時(shí)間,這一過(guò)程需要完成當(dāng)前運(yùn)行環(huán)境的入棧操作、關(guān)中斷、PC指針指向中斷服務(wù)程序等處理。2.2.14什么是中斷響應(yīng)時(shí)間?從中斷服務(wù)程序退出到恢復(fù)被中止的程序的執(zhí)行的時(shí)間間隔稱為中斷恢復(fù)(或返回)時(shí)間,這一過(guò)程需要完成恢復(fù)被中止的程序運(yùn)行環(huán)境、開中斷、中斷返回(即PC指針指向被中止的程序節(jié)點(diǎn))等處理。2.2.15什么是中斷恢復(fù)時(shí)間2.2.16嵌入式操作系統(tǒng)的實(shí)時(shí)性體現(xiàn)在哪些方面一、在硬件平臺(tái)上直接運(yùn)行應(yīng)用程序,即祼機(jī)加載應(yīng)用程序,此時(shí)應(yīng)用程序的執(zhí)行效率最高;在硬件平臺(tái)上加載嵌入式操作系統(tǒng)后,再在嵌入式操作系統(tǒng)上運(yùn)行應(yīng)用程序,由于使用了嵌入式操作系統(tǒng),應(yīng)用程序的執(zhí)行過(guò)程中會(huì)調(diào)用操作系統(tǒng)的服務(wù),應(yīng)用程序的執(zhí)行效率會(huì)有所下降。在這種意義上,嵌入式操作系統(tǒng)的實(shí)時(shí)性體現(xiàn)為加載了嵌入式操作系統(tǒng)后應(yīng)用程序的執(zhí)行效率與祼機(jī)下應(yīng)用程序的執(zhí)行效率相當(dāng)。二、由于中斷而造成的額外開銷時(shí)間為中斷響應(yīng)時(shí)間和中斷恢復(fù)時(shí)間的總和,在這種意義下,嵌入式操作系統(tǒng)的實(shí)時(shí)性在于中斷響應(yīng)時(shí)間和中斷恢復(fù)時(shí)間應(yīng)盡可能得小,盡可能與裸機(jī)加載應(yīng)用程序情況下的中斷額外開銷時(shí)間相當(dāng)。三、嵌入式操作系統(tǒng)的實(shí)時(shí)性還體現(xiàn)在應(yīng)用程序?qū)τ布Y源的訪問時(shí)間上,即借助操作系統(tǒng)API函數(shù)訪問硬件資源與直接訪問硬件資源的時(shí)間應(yīng)大體相當(dāng)。例如,應(yīng)用程序訪問隨機(jī)存儲(chǔ)器(RAM)的時(shí)間在有無(wú)操作系統(tǒng)下應(yīng)大約相同。四、嵌入式操作系統(tǒng)的實(shí)時(shí)性也體現(xiàn)在操作系統(tǒng)自身上,即沒有應(yīng)用程序運(yùn)行的情況下,操作系統(tǒng)能有序高效地管理硬件資源,能正確地初始化或啟動(dòng)各種硬件外設(shè),訪問硬件資源的時(shí)序得到實(shí)時(shí)性地滿足。2.2.17中斷處理過(guò)程2.3什么是資源資源是指嵌入式系統(tǒng)的宿主硬件系統(tǒng),具體地說(shuō),是指CPU、內(nèi)存、片上外設(shè)和各種輸入輸出設(shè)備等硬件資源,以及硬件系統(tǒng)中裝載的可供使用的軟件系統(tǒng)資源。從嵌入式操作系統(tǒng)的角度出發(fā),硬件資源可被抽象為寄存器或內(nèi)存地存空間,例如,顯示器被抽象為一塊顯示緩沖區(qū),即編了地址的內(nèi)存,簡(jiǎn)稱顯存;鍵盤一般占用一個(gè)中斷輸入和一塊內(nèi)存區(qū)域等。因此,這里所謂的資源就是指被任務(wù)使用的寄存器或存儲(chǔ)空間。2.3.1什么是共享資源所謂的共享資源是指可被多個(gè)任務(wù)訪問的資源。2.3.2共享資源與全局變量的關(guān)系共享資源在被某個(gè)任務(wù)使用時(shí),其他所有請(qǐng)求該共享資源的任務(wù)均無(wú)法使用該共享資源;某個(gè)任務(wù)要使用某個(gè)共享資源,那么該任務(wù)必須首先請(qǐng)求操作系統(tǒng)得到該共享資源,而不是直接使用;某個(gè)已經(jīng)得到了共享資源的任務(wù)在使用完該共享資源后,應(yīng)向操作系統(tǒng)釋放該共享資源的使用權(quán),從而使該共享資源可被其他任務(wù)使用;共享資源可被看作為嵌入式操作系統(tǒng)管理的一些特殊的全局變量,但注意區(qū)分它們與普通全局變量的異同點(diǎn);信號(hào)量和消息郵箱等μC/OS-II的組件隸屬于共享資源的范疇。2.3.3什么是變量變量是數(shù)據(jù)結(jié)構(gòu)的載體,用以存放數(shù)據(jù)運(yùn)算的初始值、中間結(jié)果和最終結(jié)果,一個(gè)變量對(duì)應(yīng)于內(nèi)存空間的某個(gè)地址。根據(jù)變量的作用域不同,變量分為全局變量和局部變量。一般地,每個(gè)函數(shù)里面出現(xiàn)的變量,其作用域?yàn)樵撟兞慷x起到該函數(shù)結(jié)束,由于作用域限于該函數(shù),故稱為局部變量。另一些變量被整個(gè)應(yīng)用程序所使用,從該變量定義起到應(yīng)用程序結(jié)束止,都在起作用,這類變量稱為全局變量。2.3.4任務(wù)中定義的變量屬性某個(gè)任務(wù)中的變量?jī)H限于該任務(wù)所有,其他的任務(wù)對(duì)該變量不可見,相對(duì)于任務(wù)所在的應(yīng)用程序而言,這類變量是局部變量;但是,相對(duì)于任務(wù)調(diào)用的函數(shù)而言,由于任務(wù)中的函數(shù)均能無(wú)條件地使用這類變量,故這類變量又可稱為全局變量。2.3.5什么是可重入函數(shù)僅使用局部變量而不使用全局變量的函數(shù),稱為可重入函數(shù)。2.3.6什么是死鎖當(dāng)某個(gè)共享資源被一個(gè)任務(wù)使用時(shí),其他的任務(wù)均無(wú)法使用該共享資源,如果正在使用共享資源的任務(wù)優(yōu)先級(jí)較低,當(dāng)某時(shí)刻較高優(yōu)先級(jí)的任務(wù)就緒將中斷當(dāng)前任務(wù)的執(zhí)行,如果高優(yōu)先級(jí)的任務(wù)也需要使用同一個(gè)共享資源,則因請(qǐng)求不到共享資源而處于持續(xù)請(qǐng)求狀態(tài);原來(lái)占用共享資源的任務(wù)因優(yōu)先級(jí)低而處于等待CPU狀態(tài),這種情況下系統(tǒng)調(diào)度器不能實(shí)現(xiàn)上述二個(gè)任務(wù)的調(diào)度,而處于死鎖狀態(tài)。2.3.7防止死鎖的方法1、臨時(shí)改變死鎖任務(wù)中低優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí),從P1臨時(shí)變?yōu)楸萈2優(yōu)先級(jí)高的P3,這樣,調(diào)度器會(huì)調(diào)度到P3任務(wù)執(zhí)行,執(zhí)行完后再回來(lái)執(zhí)行P2任務(wù),并且把P3任務(wù)的優(yōu)先級(jí)還原。在μC/OS-II中使用了這種方法。2、臨時(shí)改變死鎖任務(wù)中高優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí),從P2臨時(shí)變?yōu)楸萈1優(yōu)先級(jí)低的P4,這樣,調(diào)度器會(huì)調(diào)度到P1任務(wù)執(zhí)行,執(zhí)行完后再回來(lái)執(zhí)行P2任務(wù),并且把P4任務(wù)的優(yōu)先級(jí)還原。2.4什么是系統(tǒng)內(nèi)存一般地系統(tǒng)內(nèi)存被劃分為二個(gè)空間,即程序空間和數(shù)據(jù)空間。程序空間與數(shù)據(jù)空間是分開的,程序空間用于存儲(chǔ)可執(zhí)行代碼指令,數(shù)據(jù)空間用于堆和棧的空間分配。程序空間中存放各個(gè)代碼段指令時(shí),一般是地址連續(xù)存放的,中間沒有空閑存儲(chǔ)區(qū);而數(shù)據(jù)空間中各個(gè)棧區(qū)的空間可隨意開辟,要保證各個(gè)棧的大小夠用,不需考慮棧區(qū)間是否相鄰,同樣堆的空間地址在數(shù)據(jù)區(qū)中也是任意的。2.4.1嵌入式系統(tǒng)內(nèi)存分配示意2.4.2什么是堆堆為應(yīng)用程序級(jí)別的全局變量。定義一個(gè)全局?jǐn)?shù)組,例如:“INT32UmyBuf[10][30];”,即在內(nèi)存中開辟了一個(gè)1200字節(jié)的堆。2.4.3什么是棧棧為任務(wù)級(jí)別的全局變量和局部變量。一般地,使用一維數(shù)組作為任務(wù)的棧,在這個(gè)意義上,可認(rèn)為棧是堆中的一塊固定的靜態(tài)空間。每個(gè)任務(wù)的棧區(qū)保存這個(gè)任務(wù)的運(yùn)行環(huán)境和任務(wù)中調(diào)用的函數(shù)的參數(shù)及其局部變量。2.4.4什么是內(nèi)存碎片內(nèi)存碎片是針對(duì)堆而言的。2.4.5μC/OS-II如何解決內(nèi)存碎片問題使用靜態(tài)二維數(shù)組開辟出一塊大的空間;然后,任務(wù)中動(dòng)態(tài)空間均從該靜態(tài)空間中申請(qǐng),使用完后立即釋放。由于使用靜態(tài)數(shù)組作為動(dòng)態(tài)分配的容器空間,因此,這種方法的優(yōu)點(diǎn)在于可以查詢空間中內(nèi)存的使用情況。2.5內(nèi)核的定義嵌入式實(shí)時(shí)操作系統(tǒng)有時(shí)也簡(jiǎn)稱為內(nèi)核,應(yīng)用程序是加載于內(nèi)核之上的用戶程序。內(nèi)核的主要服務(wù)是任務(wù)調(diào)度,此外內(nèi)核中也提供了時(shí)鐘節(jié)拍服務(wù)和空閑任務(wù)等,常見的內(nèi)核分為二種類型,即不可搶先型內(nèi)核和可搶先型內(nèi)核。2.5.1什么是不可搶先型內(nèi)核2.5.2什么是可搶先型內(nèi)核2.5.3什么是時(shí)鐘節(jié)拍操作系統(tǒng)中每個(gè)任務(wù)都是在等待態(tài)、就緒態(tài)和執(zhí)行態(tài)三種狀態(tài)間有規(guī)律地循環(huán)往復(fù)工作著,時(shí)鐘節(jié)拍管理著那些處于等待態(tài)的任務(wù)的延時(shí),一個(gè)時(shí)鐘節(jié)拍的大小是任務(wù)等待的最小延時(shí),每個(gè)時(shí)鐘節(jié)拍到來(lái)后,系統(tǒng)將把等待態(tài)的每個(gè)任務(wù)的延時(shí)減少一個(gè)時(shí)鐘節(jié)拍值,并判斷每個(gè)任務(wù)是否等待結(jié)束,把結(jié)束等待的任務(wù)調(diào)度到就緒態(tài)。2.5.4時(shí)鐘節(jié)拍為什么不宜過(guò)大或過(guò)小時(shí)鐘節(jié)拍一般由硬件系統(tǒng)的定時(shí)器中斷產(chǎn)生,因此時(shí)鐘節(jié)拍在管理等待態(tài)任務(wù)的延時(shí)時(shí)會(huì)有中斷響應(yīng)和中斷恢復(fù)方面的額外開銷,如果時(shí)鐘節(jié)拍設(shè)定過(guò)小,將導(dǎo)致大量的這類額外開銷的CPU時(shí)間浪費(fèi),故時(shí)鐘節(jié)拍不應(yīng)設(shè)定過(guò)小。相反地,如果時(shí)鐘節(jié)拍值設(shè)定過(guò)大也不合適,會(huì)造成各個(gè)任務(wù)的延時(shí)分辨率大大降低,例如,時(shí)鐘節(jié)拍周期為5秒,那么延時(shí)1秒和延時(shí)9秒的二個(gè)任務(wù),雖然相差8秒,但是都只能設(shè)定延時(shí)一個(gè)時(shí)鐘節(jié)拍。實(shí)際中可根據(jù)任務(wù)的數(shù)量和CPU的處理能力設(shè)定時(shí)鐘節(jié)拍的周期,一般地可設(shè)為1ms-200ms。2.5.5只有時(shí)鐘節(jié)拍中斷時(shí)內(nèi)核服務(wù)情況2.5.6時(shí)鐘節(jié)拍和中斷都存在時(shí)的內(nèi)核服務(wù)情況2.5.7什么是空閑任務(wù)空閑任務(wù)一般不實(shí)現(xiàn)任何功能,只是簡(jiǎn)單地占用了CPU而已;或者讓空閑任務(wù)作簡(jiǎn)單的數(shù)值自增或自減操作,此時(shí)空閑任務(wù)可用于統(tǒng)計(jì)CPU的使用情況。此外,還可以根據(jù)實(shí)際情況使空閑任務(wù)關(guān)閉一些系統(tǒng)外設(shè),使CPU工作在低功耗模式。2.5.8空閑任務(wù)的優(yōu)先級(jí)是多少空閑任務(wù)是系統(tǒng)任務(wù),當(dāng)所有用戶任務(wù)均處于等待態(tài)時(shí),CPU就空閑下來(lái),這時(shí)系統(tǒng)會(huì)提供一個(gè)所謂的空閑任務(wù)進(jìn)入執(zhí)行態(tài)??臻e任務(wù)的優(yōu)先級(jí)最低,且永遠(yuǎn)處于就緒態(tài)中,如果就緒態(tài)中有用戶任務(wù)出現(xiàn),其優(yōu)先級(jí)必然比空閑任務(wù)高,從而搶到CPU使用權(quán)而得到執(zhí)行;當(dāng)就緒態(tài)中沒有用戶任務(wù)時(shí),空閑任務(wù)成為唯一的就緒任務(wù),此時(shí)它得到CPU使用權(quán)。2.6信號(hào)量和互斥信號(hào)量的作用信號(hào)量的主要用途在于使一個(gè)任務(wù)同步另一個(gè)任務(wù)的執(zhí)行。普通的信號(hào)量用于保護(hù)共享資源時(shí)易造成死鎖,此時(shí)應(yīng)使用互斥信號(hào)量。2.6.1什么是信號(hào)量可把信號(hào)量比喻為一個(gè)全局計(jì)數(shù)器,這個(gè)計(jì)數(shù)器的值只能為0,1,2,3,……等自然數(shù)。信號(hào)量被創(chuàng)建時(shí)可以賦一個(gè)初始計(jì)數(shù)值;在任務(wù)中每“釋放”一次信號(hào)量,其計(jì)數(shù)值被加1。在任務(wù)中每“請(qǐng)求”一次信號(hào)量,如果該信號(hào)量的計(jì)數(shù)值大于0,則請(qǐng)求成功,其計(jì)數(shù)值被減1;如果信號(hào)量的計(jì)數(shù)值為0,則請(qǐng)求會(huì)失敗,信號(hào)量的值保持0不變。上述的“釋放”和“請(qǐng)求”是作用于信號(hào)量的二個(gè)主要操作,因此,在一個(gè)任務(wù)中有規(guī)律的釋放信號(hào)量,另一個(gè)任務(wù)持續(xù)不斷地請(qǐng)求信號(hào)量,則必然會(huì)導(dǎo)致請(qǐng)求信號(hào)量的任務(wù)按釋放信號(hào)量的任務(wù)的規(guī)律工作。2.6.2信號(hào)號(hào)請(qǐng)求與釋放示意圖2.6.3信號(hào)量同步示意2.6.4再次討論什么是死鎖假設(shè)任務(wù)A和B都要使用共享資源R1和R2,且任務(wù)A的優(yōu)先級(jí)高于任務(wù)B,使用信號(hào)量S1保護(hù)共享資源R1,信號(hào)量S2保護(hù)共享資源R2,信號(hào)量S1和S2的初值均為1。這二個(gè)任務(wù)執(zhí)行過(guò)程中可能會(huì)出現(xiàn)這種情況:某個(gè)時(shí)刻,任務(wù)B請(qǐng)求到信號(hào)量S1,使S1=0,任務(wù)B占用了共享資源R1,此時(shí)中斷發(fā)生了;然后,中斷返回后,操作系統(tǒng)調(diào)度到優(yōu)先級(jí)更高的任務(wù)A執(zhí)行(不妨認(rèn)為中斷服務(wù)程序使任務(wù)A就緒了),任務(wù)B被放入就緒表中;任務(wù)A執(zhí)行到某處后要使用共享資源R2,于是請(qǐng)求信號(hào)量S2并使S2=0,接著任務(wù)A又要使用共享資源R1,即請(qǐng)求信號(hào)量S1,而S1此時(shí)的值為0,故任務(wù)A處于持續(xù)請(qǐng)求等待狀態(tài);操作系統(tǒng)調(diào)度到任務(wù)B繼續(xù)執(zhí)行,此時(shí)任務(wù)B還在占用共享資源R1,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論