嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)管理及任務(wù)調(diào)度_第1頁(yè)
嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)管理及任務(wù)調(diào)度_第2頁(yè)
嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)管理及任務(wù)調(diào)度_第3頁(yè)
嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)管理及任務(wù)調(diào)度_第4頁(yè)
嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)管理及任務(wù)調(diào)度_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余2頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、度:系統(tǒng)中每個(gè)任務(wù)都有一個(gè)優(yōu)先級(jí),內(nèi)核總是將CPUCPU 分配給處于就緒態(tài)的優(yōu)先級(jí)最高的1 1、嵌入式實(shí)時(shí)操作系統(tǒng)簡(jiǎn)介1 1 1 1 英文名 EmbeddedEmbedded Real-timeReal-time OperationOperation SystemSystem ,簡(jiǎn)寫為 RTOSRTOS。1.2.11.2.1 定義:當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時(shí),能夠接受并以足夠快的速度予以處理,其處理的 結(jié)果又能在規(guī)定的時(shí)間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng), 并控制所有實(shí)時(shí)任 務(wù)協(xié)調(diào)一致運(yùn)行的嵌入式操作系統(tǒng)。 (注:在工業(yè)控制、軍事設(shè)備、航空航天等領(lǐng)域?qū)ο到y(tǒng) 的響應(yīng)時(shí)間有苛刻的要求, 這就

2、需要使用實(shí)時(shí)系統(tǒng)。 我們常常說的嵌入式操作系統(tǒng)都是嵌入 式實(shí)時(shí)操作系統(tǒng)。比如卩 C/OSIIC/OSII、eCOSeCOS 和 LinuxLinux。故對(duì)嵌入式實(shí)時(shí)操作系統(tǒng)的理解應(yīng)該建立在對(duì)嵌入式系統(tǒng)的理解之上加入對(duì)響應(yīng)時(shí)間的要求。)1.2.21.2.2 IEEEIEEE 定義:嵌入式系統(tǒng)是 “用于控制、監(jiān)視或者輔助操作機(jī)器和設(shè)備的裝置 ”。1.2.31.2.3 一般定義:以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、功能、可靠性、 成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。1 1 . . 3 3 分類:VxWorksVxWorks , uC/OS-uC/OS-n,uClinuxuClin

3、ux , eCoseCos, RTXCRTXC 等。2 2、嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)管理2 21 1 任務(wù)管理:是嵌入式實(shí)時(shí)操作系統(tǒng)的核心和靈魂,決定了操作系統(tǒng)的實(shí)時(shí)性能。它 通常包含優(yōu)先級(jí)設(shè)置、多任務(wù)調(diào)度機(jī)制和時(shí)間確定性等部分。2.1.12.1.1 優(yōu)先級(jí)設(shè)置:嵌入式操作系統(tǒng)支持多任務(wù),每個(gè)任務(wù)都具有優(yōu)先級(jí),任務(wù)越重要,賦予的優(yōu)先級(jí)應(yīng)越高。 優(yōu)先級(jí)的設(shè)置分為靜態(tài)優(yōu)先級(jí)和動(dòng)態(tài)優(yōu)先級(jí)兩種。 靜態(tài)優(yōu)先級(jí)指的是 每個(gè)任務(wù)在運(yùn)行前都被賦予一個(gè)優(yōu)先級(jí), 而且這個(gè)優(yōu)先級(jí)在系統(tǒng)運(yùn)行期間是不能改變的; 動(dòng) 態(tài)優(yōu)先級(jí)則是指每個(gè)任務(wù)的優(yōu)先級(jí)(特別是應(yīng)用程序的優(yōu)先級(jí) )在系統(tǒng)運(yùn)行時(shí)可以動(dòng)態(tài)地改變。2.1.22.1.

4、2 多任務(wù)調(diào)度機(jī)制:任務(wù)調(diào)度主要是協(xié)調(diào)任務(wù)對(duì)計(jì)算機(jī)系統(tǒng)資源的爭(zhēng)奪使用。對(duì)系統(tǒng)資源非常匱乏的嵌入式系統(tǒng)來說, 任務(wù)調(diào)度尤為重要, 它直接影響到系統(tǒng)的實(shí)時(shí)性能。 通常, 多任務(wù)調(diào)度機(jī)制分為基于優(yōu)先級(jí)搶占式調(diào)度和時(shí)間片輪轉(zhuǎn)調(diào)度。(1 1)基于優(yōu)先級(jí)搶占式調(diào)任務(wù)運(yùn)行。 如果系統(tǒng)發(fā)現(xiàn)就緒隊(duì)列中有比當(dāng)前運(yùn)行任務(wù)更高的優(yōu)先級(jí)任務(wù), 就把當(dāng)前運(yùn)行任 務(wù)置于就緒隊(duì)列中, 調(diào)入高優(yōu)先級(jí)任務(wù)運(yùn)行。 系統(tǒng)采用優(yōu)先級(jí)搶占方式進(jìn)行調(diào)度, 可以保證 重要的突發(fā)事件及時(shí)得到處理。(2 2)時(shí)間片輪轉(zhuǎn)調(diào)度:讓優(yōu)先級(jí)相同的處于就緒狀態(tài)的任務(wù)按時(shí)間片使用 CPUCPU,以防止同優(yōu)先級(jí)的某一任務(wù)長(zhǎng)時(shí)間獨(dú)占CPUCPU。在一般情況下,

5、嵌入式實(shí)時(shí)操作系統(tǒng)采用基于優(yōu)先級(jí)搶占式調(diào)度與時(shí)間片輪轉(zhuǎn)調(diào)度相結(jié)合的調(diào)度機(jī)制。2.1.32.1.3 時(shí)間的可確定性: 嵌入式實(shí)時(shí)操作系統(tǒng)甬?dāng)?shù)調(diào)用與服務(wù)的執(zhí)行時(shí)間應(yīng)具有可確定性。 系統(tǒng)服務(wù)的執(zhí)行時(shí)間不依賴于應(yīng)用程序任務(wù)的多少。 基于此特征, 系統(tǒng)完成某個(gè)確定任務(wù)的 時(shí)間是可預(yù)測(cè)的。2 2 . . 2 2 任務(wù)管理機(jī)制:在內(nèi)核的設(shè)計(jì)過程中,最先應(yīng)考慮的是任務(wù)的狀態(tài)以及遷移時(shí)序, 然后根據(jù)此狀態(tài)設(shè)計(jì)相應(yīng)的隊(duì)列,如就緒隊(duì)列、等待隊(duì)列等。內(nèi)核時(shí)鐘也依賴任務(wù)的狀態(tài)。 可以看出,任務(wù)管理實(shí)現(xiàn)的核心和基礎(chǔ)是任務(wù)狀態(tài)和遷移時(shí)序。2.2.12.2.1 任務(wù)狀態(tài):在多任務(wù)狀態(tài)中,任務(wù)要參與資源的競(jìng)爭(zhēng),只有在所需資源得

6、到滿足的情況下才能得到執(zhí)行。 然而, 任務(wù)擁有的資源情況是不斷變化的, 這將導(dǎo)致任務(wù)狀態(tài)也表現(xiàn) 出不斷變化的特性。 不同的實(shí)時(shí)內(nèi)核實(shí)現(xiàn)方式對(duì)狀態(tài)的定義不盡相同, 但都包括以下三種基 本狀態(tài):( 1 1)等待:任務(wù)在等待 I/OI/O 完成或者等待某事件的發(fā)生;( 2 2)就緒:任務(wù)已經(jīng)得 到需要運(yùn)行的資源,并等待獲得處理器資源;(3 3)執(zhí)行:任務(wù)獲得處理器和其他所有需要的資源,相關(guān)代碼正在被運(yùn)行。在單處理器系統(tǒng)中,任何時(shí)候只有一個(gè)任務(wù)處于運(yùn)行狀態(tài)。如果沒有任何任務(wù)需要運(yùn)行, 那么內(nèi)核會(huì)運(yùn)行一個(gè)空閑任務(wù)。 任何一個(gè)可以執(zhí)行的任務(wù)都必 須處于就緒狀態(tài), 實(shí)時(shí)內(nèi)核會(huì)從所有就緒的任務(wù)中, 使用合適的

7、調(diào)度策略選擇一個(gè)運(yùn)行。 當(dāng) 一個(gè)任務(wù)請(qǐng)求 I/OI/O 操作,或者等待信號(hào)量將會(huì)處于等待狀態(tài)。2.2.22.2.2 任務(wù)狀態(tài)轉(zhuǎn)移:在一定條件下,任務(wù)會(huì)在不同的狀態(tài)之間進(jìn)行轉(zhuǎn)化,稱為任務(wù)狀態(tài) 遷移,如圖 1 1 所示。圖 1 1 任務(wù)狀態(tài)遷移圖圖 2 2 實(shí)際實(shí)現(xiàn)的任務(wù)狀態(tài)轉(zhuǎn)換圖圖 2 2 在描述任務(wù)狀態(tài)遷移的同時(shí),也描述了任務(wù)的生存周期,任務(wù)的生命期從新建態(tài)時(shí)開始直到結(jié)束態(tài)時(shí)結(jié)束。 在給定的時(shí)刻,任務(wù)的狀態(tài)一定處在這六種狀態(tài)之一。新建狀態(tài)是指任務(wù)被創(chuàng)建的過程,在這個(gè)過程中主要工作有: 為任務(wù)分配 TCBTCB 和??臻g以及其他資源。 當(dāng)任務(wù)創(chuàng)建完成以后,任務(wù)就具備運(yùn)行的能力了,與此同時(shí),任務(wù)進(jìn)

8、入就緒狀態(tài), 并等待調(diào)度器為它分配運(yùn)行的機(jī)會(huì)。當(dāng)任務(wù)得到運(yùn)行的機(jī)會(huì),任務(wù)開始執(zhí)行。處于運(yùn)行態(tài)的任務(wù)會(huì)在 任意時(shí)刻由運(yùn)行態(tài)進(jìn)入休眠態(tài)、就緒態(tài)或結(jié)束狀態(tài)。其中進(jìn)入休眠態(tài)是任務(wù)的主動(dòng)過程,這主要是任務(wù)調(diào)用了內(nèi)核提供的休眠函數(shù),任務(wù)在休眠狀態(tài),如果沒有其他任務(wù)喚醒它,它將永遠(yuǎn)休眠下去直到系統(tǒng)關(guān)閉,這種方式也可用于任務(wù)同步。等待狀態(tài)主要由兩種原因引起, 一種是等待某事件的發(fā)生,如等待信號(hào)量;第二種為任務(wù)主動(dòng)等待多少個(gè)ticktick。最后,任務(wù) 可以將自己殺死進(jìn)入結(jié)束態(tài)。茯猖CPU休運(yùn)行就繕孝待圖 3 3 任務(wù)狀態(tài)遷移示意圖圖 3 3 描述了三個(gè)任務(wù)狀態(tài)遷移過程。圖中包含三個(gè)任務(wù)和一個(gè)調(diào)度程序。調(diào)度程序

9、確定下一個(gè)需要投入運(yùn)行的任務(wù),因此調(diào)度程序本身也占用一定的處理時(shí)間。3 3、嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)調(diào)度3.3. 1 1 任務(wù)調(diào)度:調(diào)度是內(nèi)核的主要職責(zé)之一,調(diào)度的主要任務(wù)就是要決定該輪到哪個(gè)任務(wù)運(yùn)行。多數(shù)實(shí)時(shí)內(nèi)核采用基于優(yōu)先級(jí)調(diào)度的算法?;趦?yōu)先級(jí)的調(diào)度算法是指,每個(gè)任務(wù)根據(jù)重要程度被賦予一定的優(yōu)先級(jí),CPUCPU 總是讓處在就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)運(yùn)行。然而,究竟何時(shí)讓高優(yōu)先級(jí)任務(wù)掌握 CPUCPU 的使用權(quán),有兩種不同的情況,這取決于內(nèi)核的類型(是 可剝奪型的還是可剝奪型內(nèi)核)。當(dāng)調(diào)度程序決定新的任務(wù)獲得CPUCPU 的使用權(quán)時(shí),這時(shí)內(nèi)核將執(zhí)行任務(wù)切換。任務(wù)切換過程為:首先保存當(dāng)前任務(wù)的

10、上下文,即CPUCPU 寄存器中的全部?jī)?nèi)容。這些內(nèi)容可以保存在任務(wù)的自己的棧中,也可以保存在TCBTCB 中。然后,將需要運(yùn)行的任務(wù)的上下文從該任務(wù)的棧中重新裝入CPUCPU 的寄存器,并開始運(yùn)行。任務(wù)切換過程增加了應(yīng)用程序的額外負(fù)荷。CPUCPU 的內(nèi)部寄存器越多,額外負(fù)荷就越重。3.3. 2 2 調(diào)度算法3.2.13.2.1 時(shí)間片輪轉(zhuǎn)調(diào)度算法:當(dāng)兩個(gè)或兩個(gè)以上任務(wù)有同樣優(yōu)先級(jí),內(nèi)核允許一個(gè)任務(wù)運(yùn)行事先確定的一段時(shí)間, 該段時(shí)間叫做時(shí)間片, 然后切換給另一個(gè)任務(wù)。 內(nèi)核在滿足以下條 件時(shí),把 CPCPU U控制權(quán)交給下一個(gè)就緒態(tài)的任務(wù): 當(dāng)前任務(wù)運(yùn)行的時(shí)間片到期; 當(dāng)前任 務(wù)在時(shí)間片還沒結(jié)

11、束時(shí)已經(jīng)完成了。3.2.23.2.2基于優(yōu)先級(jí)的調(diào)度算法:每個(gè)任務(wù)都賦予優(yōu)先級(jí)。任務(wù)越重要,賦予的優(yōu)先級(jí)就越 高。優(yōu)先級(jí)的分配方式可分為靜態(tài)分配和動(dòng)態(tài)分配的方式。 靜態(tài)優(yōu)先級(jí)是指應(yīng)用程序執(zhí)行過 程中諸任務(wù)的優(yōu)先級(jí)不變。 在靜態(tài)優(yōu)先級(jí)系統(tǒng)中, 各個(gè)任務(wù)以及它們的時(shí)間約束在程序編譯 時(shí)是已知的。動(dòng)態(tài)優(yōu)先級(jí)指應(yīng)用程序執(zhí)行過程中,任務(wù)的優(yōu)先級(jí)是可變的。LinuxLinux 采取的調(diào)度策略結(jié)合了這幾種調(diào)度方案。 在 LinuxLinux 系統(tǒng)中,調(diào)度算法最基本的一類 就是基于優(yōu)先級(jí)的調(diào)度。 優(yōu)先級(jí)高的任務(wù)先運(yùn)行, 相同優(yōu)先級(jí)的任務(wù)按照輪轉(zhuǎn)方式進(jìn)行調(diào)度。 LinuxLinux 也實(shí)現(xiàn)了基于動(dòng)態(tài)優(yōu)先級(jí)的調(diào)度

12、方法。一開始,利用靜態(tài)優(yōu)先級(jí)的方法設(shè)置任務(wù)的優(yōu) 先級(jí),然而它允許調(diào)度程序根據(jù)需要來提升、降低優(yōu)先級(jí)。3.3. 3 3 調(diào)度器實(shí)現(xiàn): 在整個(gè)任務(wù)管理中, 任務(wù)調(diào)度無疑是系統(tǒng)的核心, 任務(wù)調(diào)度通常由內(nèi)核 中的調(diào)度器實(shí)現(xiàn)。 調(diào)度器的實(shí)現(xiàn)與任務(wù)運(yùn)行狀態(tài)遷移, 任務(wù)隊(duì)列有密切的聯(lián)系, 可以說任務(wù) 運(yùn)行狀態(tài)遷移和任務(wù)隊(duì)列決定了調(diào)度器的實(shí)現(xiàn)。 調(diào)度器的主要作用是在就緒隊(duì)列中選擇優(yōu)先 級(jí)最高的任務(wù)運(yùn)行, 如果優(yōu)先級(jí)最高的任務(wù)不止一個(gè), 則選擇隊(duì)頭的任務(wù)運(yùn)行。 雖然整個(gè)調(diào) 度器的功能可以用上面的幾句話概括, 但調(diào)度器的實(shí)現(xiàn)遠(yuǎn)遠(yuǎn)沒有那么簡(jiǎn)單, 主要困難來源下 面的原因:確定調(diào)度器運(yùn)行的時(shí)機(jī);中斷處理程序完了后,是

13、執(zhí)行當(dāng)前任務(wù),還是 馬上調(diào)度;調(diào)度器的性能;調(diào)度中伴隨著任務(wù)上下文的切換,尤其對(duì)處理器架構(gòu)有 關(guān)的上下文,應(yīng)該設(shè)計(jì)良好的接口以便移植。對(duì)于實(shí)時(shí)系統(tǒng)來說,中斷處理程序執(zhí)行完畢后,應(yīng)該馬上執(zhí)行調(diào)度,這是因?yàn)橹袛喑3?伴隨著有新的任務(wù)處于就緒隊(duì)列中, 在這些任務(wù)中可能會(huì)有高優(yōu)先級(jí)的任務(wù)就緒, 所以在實(shí) 時(shí)內(nèi)核中要求必須支持在中斷后馬上進(jìn)行任務(wù)調(diào)度。 不管是在實(shí)時(shí)系統(tǒng), 還是在其他系統(tǒng)中, 調(diào)度器性能顯得非常重要, 常常要求調(diào)度器的時(shí)間復(fù)雜度至少應(yīng)該為線性, 當(dāng)然常數(shù)是最好 的。對(duì)于不同的處理器架構(gòu),其提供的寄存器,狀態(tài)寄存器都有很大的區(qū)別,調(diào)度器應(yīng)該留 出良好的接口給不同的處理器,以便以后方便移植。

14、在實(shí)現(xiàn)調(diào)度器時(shí),基本上考慮了上面的幾個(gè)基本問題。根據(jù)任務(wù)狀態(tài)遷移、內(nèi)核隊(duì)列等方面 的內(nèi)容, 在 byCorebyCore中實(shí)現(xiàn)了一個(gè)叫 scheduler(scheduler( ) ) 的調(diào)度程序。在 scheduler(scheduler( ) )中調(diào)用幾個(gè)與硬 件相關(guān)的函數(shù),這幾個(gè)函數(shù)主要用于實(shí)現(xiàn)任務(wù)硬件上下文的切換,這部分代碼用匯編完成, 并且與處理器有關(guān)。圖 4 4 描述了 scheduler(scheduler( ) )的算法流程圖。無舊任務(wù)忖瀆1_M11在中師蕊NS功輻任揮在中斷垂下任野騎用任爭(zhēng)圳松堆跆前仔務(wù)圖 4 4 scheduleschedule )的算法流程圖該調(diào)度程序的算

15、法非常簡(jiǎn)單,首先,在允許調(diào)度的情況下,如果有高優(yōu)先級(jí)任務(wù)就緒,調(diào)螫就軸仏列辻于爭(zhēng)SHFF .為荊圧尋招併*空1越在中昕限笛程VIN則進(jìn)行任務(wù)切換。任務(wù)切換會(huì)發(fā)生在兩種處理器模式下,一種是處理器處于正常的運(yùn)行態(tài),另一種發(fā)生在中斷態(tài)中。因此,內(nèi)核使用兩組函數(shù)分別處理這兩種情況。在兩種處理器狀態(tài)下都有啟動(dòng)新任務(wù)”和新舊任務(wù)切換”函數(shù)接口實(shí)現(xiàn)最后的任務(wù)切換工作,這兩組函數(shù)與處理器有關(guān),并由匯編實(shí)現(xiàn)。啟動(dòng)新任務(wù)”的主要功能是將任務(wù)的初始上下文復(fù)制給處理器的 各個(gè)寄存器,這包括通用寄存器、堆棧指針寄存器、狀態(tài)寄存器和指令指針寄存器等。這些初始值在新任務(wù)創(chuàng)建時(shí)被初始化。啟動(dòng)新任務(wù)發(fā)生的時(shí)機(jī)有兩種情況,第一種情況是內(nèi)核初始化完畢后,啟動(dòng)第一個(gè)任務(wù);第二種情況為任務(wù)主動(dòng)結(jié)束后,當(dāng)前任務(wù)指針被置位 NULLNULL 時(shí)?!叭蝿?wù)切換 ”發(fā)生在兩個(gè)任務(wù)之間,一個(gè)是被換切換出去的任務(wù),另一個(gè)是將要執(zhí)行的任 務(wù)。任務(wù)切換函數(shù)也由匯編代碼實(shí)現(xiàn)。它所要完成的工作主要有兩個(gè), 第一是將舊任務(wù) (被 換切換出去的任務(wù)) 的上下文保存到自己的棧中, 第二是新任務(wù)(將要執(zhí)行的任務(wù))將保存 在棧中的上下文復(fù)制到處理器的相關(guān)寄存器中。任

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論