版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心嵌入式系統(tǒng)及應(yīng)用嵌入式系統(tǒng)及應(yīng)用第五章第五章任務(wù)管理與調(diào)度任務(wù)管理與調(diào)度1電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心主要內(nèi)容主要內(nèi)容 任務(wù)簡(jiǎn)介任務(wù)簡(jiǎn)介 任務(wù)控制塊任務(wù)控制塊 任務(wù)管理任務(wù)管理 任務(wù)調(diào)度任務(wù)調(diào)度 優(yōu)先級(jí)反轉(zhuǎn)優(yōu)先級(jí)反轉(zhuǎn)2電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心第一節(jié)第一節(jié)任任 務(wù)務(wù) 任務(wù)的定義及其主要特性任務(wù)的定義及其主要特性任務(wù)的內(nèi)容任務(wù)的內(nèi)容任務(wù)的分類任務(wù)的分類任務(wù)參數(shù)任務(wù)參數(shù)3電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心 在嵌入式實(shí)時(shí)系統(tǒng)中任務(wù)是操作系統(tǒng)內(nèi)核調(diào)度在
2、嵌入式實(shí)時(shí)系統(tǒng)中任務(wù)是操作系統(tǒng)內(nèi)核調(diào)度的基本單位。的基本單位。 任務(wù)主要包含以下內(nèi)容:任務(wù)主要包含以下內(nèi)容: 代碼代碼:一段可執(zhí)行的程序一段可執(zhí)行的程序 數(shù)據(jù)數(shù)據(jù):程序所需要的相關(guān)數(shù)據(jù)(變量、工作:程序所需要的相關(guān)數(shù)據(jù)(變量、工作空間、緩沖區(qū)等)空間、緩沖區(qū)等) 堆棧堆棧 程序執(zhí)行的上下文環(huán)境程序執(zhí)行的上下文環(huán)境4電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心 void yourtask (void *pdata) for (;) /* 用用戶戶代代碼碼; 調(diào)調(diào)用用uc/os-ii的某些功能函的某些功能函數(shù)數(shù)*/: osflagpend(); osmboxpend(); osmu
3、texpend(); osqpend(); ossempend(); ostaskdel(os_prio_self); ostasksuspend(os_prio_self); ostimedly(); ostimedlyhmsm(); /* 用用戶戶代代碼碼 */ 任務(wù)的代碼通常是一個(gè)無限循環(huán),如下面代碼所示:任務(wù)的代碼通常是一個(gè)無限循環(huán),如下面代碼所示: 任務(wù)代碼的定義需注意兩點(diǎn):任務(wù)代碼的定義需注意兩點(diǎn):1.1.返回參數(shù)必須定義成返回參數(shù)必須定義成voidvoid。2.2.當(dāng)任務(wù)開始執(zhí)行時(shí),可傳遞一個(gè)任何類型的參數(shù)。當(dāng)任務(wù)開始執(zhí)行時(shí),可傳遞一個(gè)任何類型的參數(shù)。( (參數(shù)類型是參數(shù)類型是v
4、oid void 指針指針) )5電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心 void yourtask (void *pdata) /* 用用戶戶代代碼碼; ostaskdel(os_prio_self); 當(dāng)任務(wù)完成后,任務(wù)可以自我刪除,如下面代當(dāng)任務(wù)完成后,任務(wù)可以自我刪除,如下面代碼。碼。需注意:任務(wù)代碼不是真的刪除了,只是內(nèi)核簡(jiǎn)需注意:任務(wù)代碼不是真的刪除了,只是內(nèi)核簡(jiǎn)單地不會(huì)再這個(gè)任務(wù),這個(gè)任務(wù)的代碼也不會(huì)再單地不會(huì)再這個(gè)任務(wù),這個(gè)任務(wù)的代碼也不會(huì)再運(yùn)行了。運(yùn)行了。6電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心int main(void) / 初始
5、化初始化 ucos內(nèi)內(nèi)核核. osinit(); / 在在開開始多任始多任務(wù)務(wù)之前必之前必須須先建立一先建立一個(gè)個(gè)任任務(wù)務(wù) ostaskcreate(testtask1, (void *) 11, &testtaskstk1task_stk_size, 11); /第第1個(gè)參數(shù)個(gè)參數(shù)是指向是指向該該任任務(wù)運(yùn)務(wù)運(yùn)行代行代碼碼的指的指針針,第,第2個(gè)參數(shù)個(gè)參數(shù)是一是一個(gè)個(gè)指向任指向任務(wù)務(wù)初始化初始化數(shù)數(shù)據(jù)的指據(jù)的指針針, /第第3個(gè)參數(shù)個(gè)參數(shù)是任是任務(wù)務(wù)的堆的堆棧棧起始地址(高地址向低地址增起始地址(高地址向低地址增長(zhǎng)長(zhǎng)),), /第第4個(gè)參數(shù)個(gè)參數(shù)是任是任務(wù)務(wù)的的優(yōu)優(yōu)先先級(jí)級(jí),數(shù)值數(shù)值越
6、小,越小,優(yōu)優(yōu)先先級(jí)級(jí)越高。越高。 / 開開始多任始多任務(wù)務(wù),控制,控制權(quán)權(quán)交交給內(nèi)給內(nèi)核核 osstart(); void testtask1(void *pdata) printf(%4u: * test task 1 first call *n, ostime); /創(chuàng)創(chuàng)建其他任建其他任務(wù)務(wù) ostaskcreate(testtask2, (void *) 22, &testtaskstk2task_stk_size, 22); while (1) printf(%4u: * test task 11 *n, ostime); ostimedly(1); 7電子科技大學(xué)嵌入式軟件
7、工程中心電子科技大學(xué)嵌入式軟件工程中心void testtask2(void *pdata) while (1) printf(%4u: * test task 22 *n, ostime); ostimedly(1); 注:注:1. 堆堆棧棧大小有上限,大小有上限,對(duì)對(duì)于于x86處處理器,理器,os_stk變變量量類類型是型是16位位變變量,所以堆量,所以堆棧棧大大小是小是1024b;2. 內(nèi)內(nèi)核允核允許許建立多建立多達(dá)達(dá)63個(gè)個(gè)用用戶戶任任務(wù)務(wù),必,必須給這須給這些任些任務(wù)務(wù)分配一分配一個(gè)獨(dú)個(gè)獨(dú)一無二的介于一無二的介于0-62的的優(yōu)優(yōu)先先級(jí)級(jí)。0是最高是最高優(yōu)優(yōu)先先級(jí)級(jí)。3. osstar
8、t()函函數(shù)并數(shù)并不返回不返回main函函數(shù)數(shù)。8電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)的主要特性任務(wù)的主要特性 任務(wù)具有以下特性:任務(wù)具有以下特性: 動(dòng)態(tài)性動(dòng)態(tài)性:任務(wù)狀態(tài)是不斷變化的。 一般分為就緒態(tài)、運(yùn)行態(tài)和等待態(tài)。一般分為就緒態(tài)、運(yùn)行態(tài)和等待態(tài)。 在多任務(wù)系統(tǒng)中,任務(wù)的狀態(tài)將隨著系統(tǒng)的需要不斷進(jìn)在多任務(wù)系統(tǒng)中,任務(wù)的狀態(tài)將隨著系統(tǒng)的需要不斷進(jìn)行變化。行變化。 并發(fā)性并發(fā)性(并行性?并行性?): 系統(tǒng)中同時(shí)存在多個(gè)任務(wù),這些任務(wù)在宏觀上是同時(shí)運(yùn)系統(tǒng)中同時(shí)存在多個(gè)任務(wù),這些任務(wù)在宏觀上是同時(shí)運(yùn)行的行的。 異步獨(dú)立性異步獨(dú)立性: 每個(gè)任務(wù)各自按相互獨(dú)立的不可預(yù)知的速
9、度運(yùn)行,走走每個(gè)任務(wù)各自按相互獨(dú)立的不可預(yù)知的速度運(yùn)行,走走停停停停。 9電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心 任務(wù)與程序的區(qū)別:任務(wù)與程序的區(qū)別: 任務(wù)能真實(shí)地體現(xiàn)工作內(nèi)容的任務(wù)能真實(shí)地體現(xiàn)工作內(nèi)容的并發(fā)性并發(fā)性,而程,而程序不能;序不能; 程序是任務(wù)的組成部分程序是任務(wù)的組成部分 除程序外,任務(wù)還包括數(shù)據(jù)、堆棧及其上下文環(huán)除程序外,任務(wù)還包括數(shù)據(jù)、堆棧及其上下文環(huán)境等內(nèi)容;境等內(nèi)容; 程序是靜態(tài)的,任務(wù)是動(dòng)態(tài)的;程序是靜態(tài)的,任務(wù)是動(dòng)態(tài)的; 任務(wù)有任務(wù)有生命周期生命周期,有誕生、有消亡,是短暫,有誕生、有消亡,是短暫的;而程序是相對(duì)長(zhǎng)久的;的;而程序是相對(duì)長(zhǎng)久的;
10、一個(gè)程序可對(duì)應(yīng)多個(gè)任務(wù),反之亦然;一個(gè)程序可對(duì)應(yīng)多個(gè)任務(wù),反之亦然; 任務(wù)具有創(chuàng)建其他任務(wù)的功能,而程序沒有任務(wù)具有創(chuàng)建其他任務(wù)的功能,而程序沒有。 10電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心采用多任務(wù)的好處:采用多任務(wù)的好處: 任務(wù)的任務(wù)的規(guī)模較小規(guī)模較小 每個(gè)任務(wù)更容易編碼和調(diào)試,其質(zhì)量也更容易得到每個(gè)任務(wù)更容易編碼和調(diào)試,其質(zhì)量也更容易得到保證保證 不少不少應(yīng)用本身應(yīng)用本身就是由多個(gè)任務(wù)構(gòu)成的就是由多個(gè)任務(wù)構(gòu)成的 如一個(gè)應(yīng)用可能需要進(jìn)行以下任務(wù)的處理:計(jì)算、如一個(gè)應(yīng)用可能需要進(jìn)行以下任務(wù)的處理:計(jì)算、從網(wǎng)絡(luò)獲取數(shù)據(jù)和刷新顯示屏幕從網(wǎng)絡(luò)獲取數(shù)據(jù)和刷新顯示屏幕 采用多任
11、務(wù)的處理方式是應(yīng)用問題的一個(gè)采用多任務(wù)的處理方式是應(yīng)用問題的一個(gè)非常自然非常自然的解決方式的解決方式 任務(wù)之間具有較高的獨(dú)立性,耦合性小任務(wù)之間具有較高的獨(dú)立性,耦合性小 通過增加新的任務(wù)就能方便的通過增加新的任務(wù)就能方便的擴(kuò)充系統(tǒng)功能擴(kuò)充系統(tǒng)功能 實(shí)時(shí)性強(qiáng)實(shí)時(shí)性強(qiáng) 保證緊急事件得到優(yōu)先處理成為可能保證緊急事件得到優(yōu)先處理成為可能11電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)任務(wù)1 1任務(wù)任務(wù)2 2任務(wù)任務(wù)3 3內(nèi)核內(nèi)核內(nèi)核代碼內(nèi)核代碼內(nèi)核數(shù)據(jù)內(nèi)核數(shù)據(jù)棧棧數(shù)據(jù)數(shù)據(jù)任務(wù)任務(wù)控制塊控制塊代碼代碼棧棧數(shù)據(jù)數(shù)據(jù)任務(wù)任務(wù)控制塊控制塊代碼代碼棧棧數(shù)據(jù)數(shù)據(jù)任務(wù)任務(wù)控制塊控制塊代碼代碼任
12、務(wù)任務(wù)1 1任務(wù)任務(wù)2 2任務(wù)任務(wù)3 312電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心實(shí)時(shí)系統(tǒng)中任務(wù)的分類實(shí)時(shí)系統(tǒng)中任務(wù)的分類 按照到達(dá)情況的可預(yù)測(cè)性,任務(wù)可以劃分按照到達(dá)情況的可預(yù)測(cè)性,任務(wù)可以劃分為:為: 周期任務(wù)周期任務(wù)(periodic task) 非周期任務(wù)非周期任務(wù) 按照重要程度,可分為:按照重要程度,可分為: 關(guān)鍵任務(wù)關(guān)鍵任務(wù)(critical task) 非關(guān)鍵任務(wù)非關(guān)鍵任務(wù)(noncritical task)13電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心實(shí)時(shí)系統(tǒng)中任務(wù)的分類實(shí)時(shí)系統(tǒng)中任務(wù)的分類 周期任務(wù)與非周期任務(wù)周期任務(wù)與非周期任務(wù) 周期
13、任務(wù)每隔一個(gè)固定的時(shí)間間隔就會(huì)執(zhí)行周期任務(wù)每隔一個(gè)固定的時(shí)間間隔就會(huì)執(zhí)行一次。一次。 舉例:飛行器可能需要每隔舉例:飛行器可能需要每隔100ms獲得一次關(guān)獲得一次關(guān)于飛行器的速度、高度和姿態(tài)數(shù)據(jù),控制傳感器于飛行器的速度、高度和姿態(tài)數(shù)據(jù),控制傳感器獲取這些數(shù)據(jù)就需要通過周期任務(wù)來進(jìn)行。獲取這些數(shù)據(jù)就需要通過周期任務(wù)來進(jìn)行。 非周期任務(wù)執(zhí)行的間隔時(shí)間則為不確定的。非周期任務(wù)執(zhí)行的間隔時(shí)間則為不確定的。 舉例:移動(dòng)通信設(shè)備中的通信任務(wù),該任務(wù)只有舉例:移動(dòng)通信設(shè)備中的通信任務(wù),該任務(wù)只有在需要進(jìn)行通信的情況下才會(huì)得到執(zhí)行。在需要進(jìn)行通信的情況下才會(huì)得到執(zhí)行。 非周期任務(wù)分為:非周期任務(wù)分為: sp
14、oradic task:有最小到達(dá)間隔時(shí)間限制有最小到達(dá)間隔時(shí)間限制 aperiodic task:沒有到達(dá)時(shí)間限制沒有到達(dá)時(shí)間限制14電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心實(shí)時(shí)系統(tǒng)中任務(wù)的分類實(shí)時(shí)系統(tǒng)中任務(wù)的分類 關(guān)鍵任務(wù)與非關(guān)鍵任務(wù)關(guān)鍵任務(wù)與非關(guān)鍵任務(wù) 關(guān)鍵任務(wù):關(guān)鍵任務(wù): 為需要得到需要得到及時(shí)執(zhí)行及時(shí)執(zhí)行的任務(wù),否則將出現(xiàn)災(zāi)難性的的任務(wù),否則將出現(xiàn)災(zāi)難性的后果后果 舉例:飛行器中用于處理生命支持系統(tǒng)和穩(wěn)定性控制系統(tǒng)舉例:飛行器中用于處理生命支持系統(tǒng)和穩(wěn)定性控制系統(tǒng)的任務(wù)的任務(wù) 非關(guān)鍵任務(wù):非關(guān)鍵任務(wù): 如果沒有得到及時(shí)執(zhí)行,則不會(huì)產(chǎn)生嚴(yán)重后果如果沒有得到及時(shí)執(zhí)行,
15、則不會(huì)產(chǎn)生嚴(yán)重后果 15電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)參數(shù)任務(wù)參數(shù) 任務(wù)參數(shù):任務(wù)參數(shù): 優(yōu)先級(jí)(優(yōu)先級(jí)(priority) 周期(周期(period) 計(jì)算時(shí)間(計(jì)算時(shí)間(computation time) 就緒時(shí)間(就緒時(shí)間(ready time) 截止時(shí)間(截止時(shí)間(deadline)16電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)參數(shù)任務(wù)參數(shù) 任務(wù)的優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí) 表示任務(wù)對(duì)應(yīng)工作內(nèi)容在處理上的表示任務(wù)對(duì)應(yīng)工作內(nèi)容在處理上的優(yōu)先程度優(yōu)先程度 優(yōu)先級(jí)越高,表明任務(wù)越需要得到優(yōu)先處理優(yōu)先級(jí)越高,表明任務(wù)越需要得到優(yōu)先處理 飛行器中處
16、理穩(wěn)定性控制的任務(wù),就需要具有較飛行器中處理穩(wěn)定性控制的任務(wù),就需要具有較高的優(yōu)先級(jí),一旦執(zhí)行條件得到滿足,應(yīng)及時(shí)得高的優(yōu)先級(jí),一旦執(zhí)行條件得到滿足,應(yīng)及時(shí)得到執(zhí)行到執(zhí)行 任務(wù)的優(yōu)先級(jí)分為任務(wù)的優(yōu)先級(jí)分為靜態(tài)優(yōu)先級(jí)靜態(tài)優(yōu)先級(jí)和和動(dòng)態(tài)優(yōu)先級(jí)動(dòng)態(tài)優(yōu)先級(jí)。 靜態(tài)優(yōu)先級(jí):任務(wù)的優(yōu)先級(jí)被確定后,在系統(tǒng)運(yùn)靜態(tài)優(yōu)先級(jí):任務(wù)的優(yōu)先級(jí)被確定后,在系統(tǒng)運(yùn)行過程中將不再發(fā)生變化;行過程中將不再發(fā)生變化; 動(dòng)態(tài)優(yōu)先級(jí):系統(tǒng)運(yùn)行過程中,任務(wù)的優(yōu)先級(jí)是動(dòng)態(tài)優(yōu)先級(jí):系統(tǒng)運(yùn)行過程中,任務(wù)的優(yōu)先級(jí)是可以動(dòng)態(tài)變化的。可以動(dòng)態(tài)變化的。 17電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)參數(shù)任務(wù)參數(shù) uc/os中可
17、以管理中可以管理64個(gè)任務(wù),每個(gè)任務(wù)必須有個(gè)個(gè)任務(wù),每個(gè)任務(wù)必須有個(gè)不同的優(yōu)先級(jí)。優(yōu)先級(jí)的數(shù)值越低,任務(wù)的優(yōu)先不同的優(yōu)先級(jí)。優(yōu)先級(jí)的數(shù)值越低,任務(wù)的優(yōu)先級(jí)就越高。級(jí)就越高。 uc/os總是選擇優(yōu)先級(jí)最高的任務(wù)執(zhí)總是選擇優(yōu)先級(jí)最高的任務(wù)執(zhí)行。行。 最低優(yōu)先級(jí)最低優(yōu)先級(jí)63被系統(tǒng)保留,用戶不能使用。被系統(tǒng)保留,用戶不能使用。 在目前的版本中,任務(wù)的優(yōu)先級(jí)也是與任務(wù)在目前的版本中,任務(wù)的優(yōu)先級(jí)也是與任務(wù)id。18電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)參數(shù)任務(wù)參數(shù) 周期周期 周期任務(wù)所具有的參數(shù),表示任務(wù)周期性執(zhí)行的間隔時(shí)間 任務(wù)的計(jì)算時(shí)間任務(wù)的計(jì)算時(shí)間 任務(wù)在特定硬件環(huán)境下
18、特定硬件環(huán)境下被完整執(zhí)行所需要的時(shí)間,也被稱為是任務(wù)的執(zhí)行時(shí)間任務(wù)的執(zhí)行時(shí)間(execution time)。 由于任務(wù)每次執(zhí)行的軟件環(huán)境的差異性,導(dǎo)致任務(wù)在各次具體執(zhí)行過程中的計(jì)算時(shí)間各有不同。 通常用最壞情況下的執(zhí)行時(shí)間最壞情況下的執(zhí)行時(shí)間(worst case time)或是需要的最長(zhǎng)執(zhí)行時(shí)間來表示,也可用統(tǒng)計(jì)時(shí)間統(tǒng)計(jì)時(shí)間(statistical time)來表示。 19電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)參數(shù)任務(wù)參數(shù) 任務(wù)的就緒時(shí)間任務(wù)的就緒時(shí)間任務(wù)具備了在處理器上被執(zhí)行所需要條件時(shí)的時(shí)間。 任務(wù)的截止時(shí)間任務(wù)的截止時(shí)間 意味著任務(wù)需要在該時(shí)間到來之前被執(zhí)行
19、完成。 截止時(shí)間可以通過絕對(duì)截止時(shí)間絕對(duì)截止時(shí)間(absolute deadline)和相對(duì)截止時(shí)間相對(duì)截止時(shí)間(relative time)兩種方式來表示 相對(duì)截止時(shí)間為任務(wù)的絕對(duì)截止時(shí)間減去任務(wù)的就緒時(shí)間。 截止時(shí)間可以分為強(qiáng)截止時(shí)間強(qiáng)截止時(shí)間(hard deadline)和弱截弱截止時(shí)間止時(shí)間(soft deadline)兩種情況: 具有強(qiáng)截止時(shí)間的任務(wù)即為關(guān)鍵任務(wù)關(guān)鍵任務(wù),如果截止時(shí)間不能得到滿足,就會(huì)出現(xiàn)嚴(yán)重的后果。 擁有關(guān)鍵任務(wù)的實(shí)時(shí)系統(tǒng)又被稱為強(qiáng)實(shí)時(shí)強(qiáng)實(shí)時(shí)(hard real-time)系統(tǒng),否則稱為弱實(shí)時(shí)弱實(shí)時(shí)(soft real-time)系統(tǒng)。 20電子科技大學(xué)嵌入式軟件工
20、程中心電子科技大學(xué)嵌入式軟件工程中心第二節(jié)第二節(jié)任務(wù)控制塊任務(wù)控制塊任務(wù)狀態(tài)與變遷任務(wù)狀態(tài)與變遷空閑任務(wù)空閑任務(wù)任務(wù)控制塊任務(wù)控制塊任務(wù)切換任務(wù)切換任務(wù)隊(duì)列任務(wù)隊(duì)列優(yōu)先級(jí)位圖算法優(yōu)先級(jí)位圖算法21電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)狀態(tài)與變遷任務(wù)狀態(tài)與變遷 任務(wù)擁有的任務(wù)擁有的資源情況資源情況是不斷變化的,導(dǎo)致是不斷變化的,導(dǎo)致任務(wù)狀態(tài)任務(wù)狀態(tài)也表現(xiàn)出不斷變化的特性。也表現(xiàn)出不斷變化的特性。 不同的實(shí)時(shí)內(nèi)核實(shí)現(xiàn)方式對(duì)任務(wù)狀態(tài)的定不同的實(shí)時(shí)內(nèi)核實(shí)現(xiàn)方式對(duì)任務(wù)狀態(tài)的定義不盡相同,但是都可以概括為三種基本義不盡相同,但是都可以概括為三種基本的狀態(tài):的狀態(tài): 等待等待(wa
21、iting):任務(wù)在等待某個(gè)事件的發(fā)):任務(wù)在等待某個(gè)事件的發(fā)生;生; 就緒就緒(ready):): 任務(wù)等待獲得處理器資源;任務(wù)等待獲得處理器資源; 執(zhí)行執(zhí)行(running):任務(wù)獲得處理器資源,所):任務(wù)獲得處理器資源,所包含的代碼內(nèi)容正在被執(zhí)行包含的代碼內(nèi)容正在被執(zhí)行。 22電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)狀態(tài)與變遷任務(wù)狀態(tài)與變遷 在單處理器系統(tǒng)中:在單處理器系統(tǒng)中: 任何時(shí)候都任何時(shí)候都只有一個(gè)任務(wù)在只有一個(gè)任務(wù)在cpucpu中執(zhí)行中執(zhí)行 如果沒有任何事情可做,就運(yùn)行如果沒有任何事情可做,就運(yùn)行空閑任務(wù)空閑任務(wù)執(zhí)行空?qǐng)?zhí)行空操作操作 任何一個(gè)可以執(zhí)行的任
22、務(wù)都必須處于任何一個(gè)可以執(zhí)行的任務(wù)都必須處于就緒狀態(tài)就緒狀態(tài) 調(diào)度程序從任務(wù)的調(diào)度程序從任務(wù)的就緒隊(duì)列就緒隊(duì)列中選擇下一個(gè)需要執(zhí)中選擇下一個(gè)需要執(zhí)行的任務(wù)。行的任務(wù)。 處于就緒狀態(tài)的任務(wù)擁有除處于就緒狀態(tài)的任務(wù)擁有除cpu以外的其他所有以外的其他所有需要的資源。需要的資源。 任務(wù)還可能處于任務(wù)還可能處于等待狀態(tài)等待狀態(tài) 如果任務(wù)在需要等待如果任務(wù)在需要等待i/o設(shè)備或其他任務(wù)提供的數(shù)設(shè)備或其他任務(wù)提供的數(shù)據(jù),而數(shù)據(jù)又還沒有到達(dá)該任務(wù)的情況下,就處據(jù),而數(shù)據(jù)又還沒有到達(dá)該任務(wù)的情況下,就處于等待狀態(tài)于等待狀態(tài)23電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)狀態(tài)與變遷任務(wù)狀態(tài)與
23、變遷 任務(wù)會(huì)在不同的狀態(tài)之間進(jìn)行轉(zhuǎn)換,即任務(wù)會(huì)在不同的狀態(tài)之間進(jìn)行轉(zhuǎn)換,即任務(wù)狀態(tài)的變遷任務(wù)狀態(tài)的變遷就緒態(tài)就緒態(tài)運(yùn)行態(tài)運(yùn)行態(tài)等待態(tài)等待態(tài)獲得獲得cpucpu被高優(yōu)先級(jí)被高優(yōu)先級(jí)任務(wù)搶占或任務(wù)搶占或超時(shí)超時(shí)獲得資源獲得資源需要需要資源資源24電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)任務(wù)1 1任務(wù)任務(wù)2 2任務(wù)任務(wù)3 3調(diào)度調(diào)度程序程序0 05 5101015152020252530303535404045455050運(yùn)行運(yùn)行等待等待就緒就緒三個(gè)任務(wù)進(jìn)行狀態(tài)轉(zhuǎn)換的過程三個(gè)任務(wù)進(jìn)行狀態(tài)轉(zhuǎn)換的過程 包含三個(gè)任務(wù)和一個(gè)調(diào)度程序。調(diào)度程序用來確定下一個(gè)包含三個(gè)任務(wù)和一個(gè)調(diào)度程序。
24、調(diào)度程序用來確定下一個(gè)需要投入運(yùn)行的任務(wù),因此需要投入運(yùn)行的任務(wù),因此調(diào)度程序本身也需要占用一定調(diào)度程序本身也需要占用一定的處理時(shí)間的處理時(shí)間。 25電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心osmboxpost()osqpost()osqpostfront()ossempost()ostaskresume()ostimedlyresume()ostimetick()osmboxpend()osqpend()ossempend()ostasksuspend()ostimedly()ostimedlyhmsm()interruptosintexit()osstart()osin
25、texit()os_task_sw()ostaskdel()ostaskcreate()ostaskcreateext()ostaskdel()task is preemptedostaskdel()等待狀態(tài)等待狀態(tài)睡眠態(tài)睡眠態(tài)就緒態(tài)就緒態(tài)運(yùn)行態(tài)運(yùn)行態(tài)中斷服中斷服務(wù)態(tài)務(wù)態(tài)26電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心uc/os任務(wù)狀態(tài)任務(wù)狀態(tài) 睡眠態(tài):指任務(wù)駐留在程序空間睡眠態(tài):指任務(wù)駐留在程序空間(rom(rom或或ram),ram),還沒還沒有交給有交給ucosucos來管理。把任務(wù)交給來管理。把任務(wù)交給ucosucos來管理,是來管理,是通過調(diào)用下述通過調(diào)用下述2 2個(gè)
26、函數(shù)之一:個(gè)函數(shù)之一:ostaskcreate()ostaskcreate()和和ostaskcreateext()ostaskcreateext()來實(shí)現(xiàn)的。這些調(diào)用告訴內(nèi)核,來實(shí)現(xiàn)的。這些調(diào)用告訴內(nèi)核,任務(wù)程序的起始地址在哪里,優(yōu)先級(jí)是多少,任任務(wù)程序的起始地址在哪里,優(yōu)先級(jí)是多少,任務(wù)要使用多少??臻g等。務(wù)要使用多少??臻g等。27電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心uc/os任務(wù)狀態(tài)任務(wù)狀態(tài) 就緒態(tài):任務(wù)一旦建立,就進(jìn)入了就緒態(tài)。任務(wù)就緒態(tài):任務(wù)一旦建立,就進(jìn)入了就緒態(tài)。任務(wù)的建立可以是在多任務(wù)運(yùn)行開始之前,也可以動(dòng)的建立可以是在多任務(wù)運(yùn)行開始之前,也可以動(dòng)態(tài)地由
27、一個(gè)運(yùn)行著的任務(wù)建立。如果多任務(wù)已經(jīng)態(tài)地由一個(gè)運(yùn)行著的任務(wù)建立。如果多任務(wù)已經(jīng)啟動(dòng),且一個(gè)任務(wù)是被另一個(gè)任務(wù)建立的,而新啟動(dòng),且一個(gè)任務(wù)是被另一個(gè)任務(wù)建立的,而新建立的任務(wù)的優(yōu)先級(jí)高于建立它的任務(wù)的優(yōu)先級(jí),建立的任務(wù)的優(yōu)先級(jí)高于建立它的任務(wù)的優(yōu)先級(jí),則剛剛被建立的新任務(wù)將立即獲得則剛剛被建立的新任務(wù)將立即獲得cpucpu的使用權(quán)。的使用權(quán)。 一個(gè)任務(wù)可以通過調(diào)用一個(gè)任務(wù)可以通過調(diào)用ostaskdel()ostaskdel()返回到睡眠態(tài),返回到睡眠態(tài),或通過調(diào)用該函數(shù)讓另一個(gè)任務(wù)進(jìn)入睡眠態(tài)?;蛲ㄟ^調(diào)用該函數(shù)讓另一個(gè)任務(wù)進(jìn)入睡眠態(tài)。28電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心
28、uc/os任務(wù)狀態(tài)任務(wù)狀態(tài) 運(yùn)行態(tài):調(diào)用運(yùn)行態(tài):調(diào)用osstartosstart()函數(shù)可以啟動(dòng)多任務(wù)。()函數(shù)可以啟動(dòng)多任務(wù)。osstartosstart()函數(shù)只能在啟動(dòng)時(shí)調(diào)用一次,該函數(shù)()函數(shù)只能在啟動(dòng)時(shí)調(diào)用一次,該函數(shù)選擇用戶初始化代碼中已經(jīng)建立的、進(jìn)入就緒態(tài)選擇用戶初始化代碼中已經(jīng)建立的、進(jìn)入就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)來進(jìn)行執(zhí)行。的優(yōu)先級(jí)最高的任務(wù)來進(jìn)行執(zhí)行。 等待態(tài):從運(yùn)行態(tài)到等待態(tài)有兩種可能的原因等待態(tài):從運(yùn)行態(tài)到等待態(tài)有兩種可能的原因: :1.1.正在運(yùn)行的任務(wù)調(diào)用正在運(yùn)行的任務(wù)調(diào)用ostimedlyostimedly()()函數(shù)將自身延函數(shù)將自身延遲一段時(shí)間,則該任務(wù)進(jìn)入等待
29、態(tài)。遲一段時(shí)間,則該任務(wù)進(jìn)入等待態(tài)。2.2.正在執(zhí)行的任務(wù)需要等待某一事件的發(fā)生,如信正在執(zhí)行的任務(wù)需要等待某一事件的發(fā)生,如信號(hào)量和消息,若該事件未發(fā)生或未獲得,該任務(wù)進(jìn)號(hào)量和消息,若該事件未發(fā)生或未獲得,該任務(wù)進(jìn)入等待態(tài)。入等待態(tài)。29電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心uc/os任務(wù)狀態(tài)任務(wù)狀態(tài) 中斷服務(wù)態(tài):被中斷了的任務(wù)進(jìn)入中斷服務(wù)態(tài)。中斷服務(wù)態(tài):被中斷了的任務(wù)進(jìn)入中斷服務(wù)態(tài)。響應(yīng)中斷時(shí),正在執(zhí)行的任務(wù)被掛起,中斷服務(wù)響應(yīng)中斷時(shí),正在執(zhí)行的任務(wù)被掛起,中斷服務(wù)子程序控制了子程序控制了cpucpu使用權(quán)。中斷服務(wù)子程序可能會(huì)使用權(quán)。中斷服務(wù)子程序可能會(huì)使一個(gè)或多個(gè)
30、任務(wù)進(jìn)入就緒態(tài)。在中斷服務(wù)子程使一個(gè)或多個(gè)任務(wù)進(jìn)入就緒態(tài)。在中斷服務(wù)子程序返回之前,內(nèi)核要判定,被中斷的任務(wù)是否還序返回之前,內(nèi)核要判定,被中斷的任務(wù)是否還是就緒態(tài)任務(wù)中優(yōu)先級(jí)最高的。若已經(jīng)不是,則是就緒態(tài)任務(wù)中優(yōu)先級(jí)最高的。若已經(jīng)不是,則新進(jìn)入就緒態(tài)的這個(gè)優(yōu)先級(jí)更高的任務(wù)將得以運(yùn)新進(jìn)入就緒態(tài)的這個(gè)優(yōu)先級(jí)更高的任務(wù)將得以運(yùn)行,否則,原來被中斷了的任務(wù)將繼續(xù)運(yùn)行。行,否則,原來被中斷了的任務(wù)將繼續(xù)運(yùn)行。30電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)控制塊任務(wù)控制塊 內(nèi)核對(duì)任務(wù)管理是通過對(duì)內(nèi)核對(duì)任務(wù)管理是通過對(duì)任務(wù)控制塊任務(wù)控制塊(task task control bloc
31、kcontrol block,tcbtcb)的操作來實(shí)現(xiàn)的。)的操作來實(shí)現(xiàn)的。 任務(wù)控制塊任務(wù)控制塊是包含任務(wù)相關(guān)信息的數(shù)據(jù)結(jié)構(gòu)是包含任務(wù)相關(guān)信息的數(shù)據(jù)結(jié)構(gòu) 包含了任務(wù)執(zhí)行過程中所需要的所有信息。包含了任務(wù)執(zhí)行過程中所需要的所有信息。 任務(wù)控制塊大都包括以下信息:任務(wù)控制塊大都包括以下信息: 任務(wù)的名字任務(wù)的名字 任務(wù)執(zhí)行的起始地址任務(wù)執(zhí)行的起始地址 任務(wù)的優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí) 任務(wù)的狀態(tài)任務(wù)的狀態(tài) 任務(wù)的硬件上下文(堆棧指針、任務(wù)的硬件上下文(堆棧指針、pc和寄存器等和寄存器等) 任務(wù)的隊(duì)列指針等內(nèi)容任務(wù)的隊(duì)列指針等內(nèi)容 31電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)控制
32、塊任務(wù)控制塊 一旦任務(wù)建立,一個(gè)任務(wù)控制塊一旦任務(wù)建立,一個(gè)任務(wù)控制塊os_tcbos_tcb就被賦就被賦值,能夠保存任務(wù)被其他任務(wù)搶占時(shí)的狀態(tài)。值,能夠保存任務(wù)被其他任務(wù)搶占時(shí)的狀態(tài)。當(dāng)任務(wù)重新得到當(dāng)任務(wù)重新得到cpucpu的使用權(quán)后,任務(wù)控制塊的使用權(quán)后,任務(wù)控制塊能夠確保任務(wù)從當(dāng)時(shí)被中斷的那一點(diǎn)絲毫不差能夠確保任務(wù)從當(dāng)時(shí)被中斷的那一點(diǎn)絲毫不差的繼續(xù)執(zhí)行。的繼續(xù)執(zhí)行。 下面是下面是uc/osuc/os的的os_tcbos_tcb源代碼。源代碼。32電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心typedef struct os_tcb os_stk *ostcbstkptr;
33、 /*指向指向當(dāng)當(dāng)前任前任務(wù)務(wù)堆堆棧棧頂棧棧頂?shù)闹傅闹羔樶?,每每個(gè)個(gè)任任務(wù)務(wù)的堆的堆棧棧容量可以是任意的容量可以是任意的*/#if os_task_create_ext_en 0 /*允允許許建立任建立任務(wù)務(wù)函函數(shù)數(shù)的的擴(kuò)擴(kuò)展展*/ void *ostcbextptr; /* 指向用指向用戶戶自定自定義義的任的任務(wù)務(wù)控制控制塊擴(kuò)塊擴(kuò)展展 */ os_stk *ostcbstkbottom; /* 棧棧底指底指針針*/ int32u ostcbstksize; /* 棧棧空空間間,以,以棧棧元元為單為單位位 */ int16u ostcbopt; /* 把把“ “選擇項(xiàng)選擇項(xiàng)” ”傳給傳給函函數(shù)
34、數(shù) ostaskcreateext()。目前支持三目前支持三個(gè)選擇項(xiàng)個(gè)選擇項(xiàng):os_task_opt_chk用于告知用于告知內(nèi)內(nèi)核在任核在任務(wù)務(wù)建立建立時(shí)時(shí)允允許許建立任建立任務(wù)棧務(wù)棧檢驗(yàn)檢驗(yàn),該檢驗(yàn)該檢驗(yàn)功能由用功能由用戶戶程序程序?qū)崿F(xiàn)實(shí)現(xiàn);os_task_opt_stk_clr表示任表示任務(wù)務(wù)建立建立時(shí)時(shí),任,任務(wù)棧務(wù)棧要要清清0;os_task_opt_save_fp表示任表示任務(wù)務(wù)要做浮點(diǎn)要做浮點(diǎn)數(shù)運(yùn)數(shù)運(yùn)算。算。 */ int16u ostcbid; /* 保留保留 */#endif struct os_tcb *ostcbnext; struct os_tcb *ostcbprev;
35、 /* 用于任用于任務(wù)務(wù)控制控制塊雙塊雙向向鏈鏈表的前后表的前后查查找。找。*/33電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心#if (os_q_en0)&(os_max_qs0)|(os_mbox_en0)|(os_sem_en0)|(os_mutex_en0) /* 若不打算使用信若不打算使用信號(hào)號(hào)量、互斥信量、互斥信號(hào)號(hào)量、消息量、消息隊(duì)隊(duì)列、消息列、消息郵郵箱,箱,則對(duì)應(yīng)則對(duì)應(yīng)的的變變量不量不會(huì)會(huì)在在tcb中出中出現(xiàn)現(xiàn)*/ os_event *ostcbeventptr; /* 指向事件控制指向事件控制塊塊的指的指針針 */#endif#if (os_q_en
36、 0) & (os_max_qs 0) | (os_mbox_en 0) void *ostcbmsg; /* 傳遞給傳遞給任任務(wù)務(wù)的消息指的消息指針針*/#endif34電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心#if (os_version = 251) & (os_flag_en 0) & (os_max_flags 0)#if os_task_del_en 0 os_flag_node *ostcbflagnode; /* 指向事件指向事件標(biāo)標(biāo)志志節(jié)節(jié)點(diǎn)的指點(diǎn)的指針針*/#endif os_flags ostcbflagsrdy; /* 當(dāng)當(dāng)任
37、任務(wù)務(wù)等待事件等待事件標(biāo)標(biāo)志志組時(shí)組時(shí),是使任,是使任務(wù)務(wù)進(jìn)進(jìn)入就入就緒態(tài)緒態(tài)的事件的事件標(biāo)標(biāo)志志*/#endif int16u ostcbdly; /* 任任務(wù)務(wù)允允許許等待事件等待事件發(fā)發(fā)生的最多生的最多時(shí)鐘節(jié)時(shí)鐘節(jié)拍拍數(shù)數(shù), ostimetick()使用使用這個(gè)鏈這個(gè)鏈表表來來刷新各任刷新各任務(wù)務(wù)的任的任務(wù)務(wù)延延遲變遲變量量.ostcbdly */ int8u ostcbstat; /* 任任務(wù)狀態(tài)務(wù)狀態(tài)*/ int8u ostcbprio; /* 任任務(wù)優(yōu)務(wù)優(yōu)先先級(jí)級(jí) */35電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心 int8u ostcbx; int8u ostc
38、by; int8u ostcbbitx; int8u ostcbbity; /* 這這四四個(gè)變個(gè)變量用于找出具有最高量用于找出具有最高優(yōu)優(yōu)先先級(jí)級(jí)的任的任務(wù)務(wù)。這這些些值值是在任是在任務(wù)務(wù)建立建立時(shí)計(jì)時(shí)計(jì)算,或者算,或者是在改是在改變變?nèi)稳蝿?wù)優(yōu)務(wù)優(yōu)先先級(jí)時(shí)計(jì)級(jí)時(shí)計(jì)算。算。 */ #if os_task_del_en 0 boolean ostcbdelreq; /* 表示任表示任務(wù)務(wù)是否需要是否需要?jiǎng)h刪除除 */#endif os_tcb;36電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心空任務(wù)控制塊鏈表空任務(wù)控制塊鏈表ostcbnextostcbnextostcbfreelis
39、tostcbtbl(0)ostcbtbl(1)null37所有的所有的os_tcb都存放在任務(wù)控制塊列表數(shù)組都存放在任務(wù)控制塊列表數(shù)組ostcbtbl 中的。中的。電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)控制塊任務(wù)控制塊 為節(jié)約內(nèi)存,為節(jié)約內(nèi)存,任務(wù)數(shù)量任務(wù)數(shù)量通常需要進(jìn)行預(yù)先通常需要進(jìn)行預(yù)先配置配置 按照配置的任務(wù)數(shù)量初始化任務(wù)控制塊,一個(gè)任務(wù)對(duì)按照配置的任務(wù)數(shù)量初始化任務(wù)控制塊,一個(gè)任務(wù)對(duì)應(yīng)一個(gè)初始的任務(wù)控制塊,形成一個(gè)應(yīng)一個(gè)初始的任務(wù)控制塊,形成一個(gè)空閑任務(wù)控制塊空閑任務(wù)控制塊鏈鏈。 在任務(wù)創(chuàng)建時(shí),實(shí)時(shí)內(nèi)核從空閑任務(wù)控制在任務(wù)創(chuàng)建時(shí),實(shí)時(shí)內(nèi)核從空閑任務(wù)控制塊鏈中為
40、任務(wù)分配一個(gè)任務(wù)控制塊。塊鏈中為任務(wù)分配一個(gè)任務(wù)控制塊。 隨后對(duì)任務(wù)的操作,都是基于對(duì)應(yīng)的隨后對(duì)任務(wù)的操作,都是基于對(duì)應(yīng)的任務(wù)控制塊任務(wù)控制塊來進(jìn)來進(jìn)行的。行的。 當(dāng)任務(wù)被刪除后,對(duì)應(yīng)的任務(wù)控制塊又會(huì)被實(shí)時(shí)內(nèi)核當(dāng)任務(wù)被刪除后,對(duì)應(yīng)的任務(wù)控制塊又會(huì)被實(shí)時(shí)內(nèi)核回收到回收到空閑任務(wù)控制塊鏈空閑任務(wù)控制塊鏈。 38電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心初始化任務(wù)控制塊初始化任務(wù)控制塊 任務(wù)建立時(shí),函數(shù)任務(wù)建立時(shí),函數(shù)os_tcbinit()os_tcbinit()初始化任務(wù)控制初始化任務(wù)控制塊塊os_tcb.os_tcb.39int8u os_tcbinit( int8u pri
41、o, os_stk *ptos, os_stk * pbos, int16u id, int32u stk_size, void *pext, int16u opt) /* prio是任是任務(wù)優(yōu)務(wù)優(yōu)先先級(jí)級(jí), ptos指向指向棧頂棧頂指指針針, pbos指向指向棧棧底的指底的指針針, id是任是任務(wù)標(biāo)識(shí)務(wù)標(biāo)識(shí)符符, stk_size是堆是堆棧棧的容量的容量, pext是是os_tcb的的擴(kuò)擴(kuò)展指展指針針, opt是是選擇項(xiàng)選擇項(xiàng) */ os_tcb *ptcb; os_enter_critical(); ptcb=ostcbfreelist; if (ptcb!=(os_tcb *)0)電子科
42、技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心40初始化任務(wù)控制塊初始化任務(wù)控制塊 ostcbfreelist = ptcb - ostcbnext; os_exit_critical(); ptcb - ostcbstkptr = ptos; /棧頂棧頂指指針針 ptcb - ostcbprio = (int8u)prio; ptcb - ostcbstat = os_stat_rdy; ptcb - ostcbdly = 0;# if os_task_create_ext_en 0 ptcb - ostcbextptr = pext; / os_tcb的的擴(kuò)擴(kuò)展指展指針針 ptcb
43、 - ostcbstksize = stk_size; / stk_size是堆是堆棧棧的容量的容量 ptcb - ostcbstkbottom = pbos; /棧棧底指底指針針 ptcb - ostcbopt = opt; /選擇項(xiàng)選擇項(xiàng) ptcb - ostcbid = id; / id是任是任務(wù)標(biāo)識(shí)務(wù)標(biāo)識(shí)符符#endif 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心41初始化任務(wù)控制塊初始化任務(wù)控制塊#if os_task_del_en 0 ptcb - ostcbdelreq = os_no_err;#endif ptcb - ostcby = prio 3; ptc
44、b - ostcbbity = osmaptblptcb-ostcby; ptcb - ostcbx = prio & 0 x07; ptcb - ostcbbitx = osmaptblptcb-ostcbx;#if os_event_en0 ptcb - ostcbeventptr = (os_event *)0; /事件指事件指針為針為空空 #endif#if (os_version = 251) & (os_flag_en 0) & (os_max_flags 0) & (os_task_del_en 0) ptcb - ostcbflagnode =
45、(os_flag_node *)0; /事件事件標(biāo)標(biāo)志志節(jié)節(jié)點(diǎn)指點(diǎn)指針為針為空空#endif 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心42初始化任務(wù)控制塊初始化任務(wù)控制塊#if (os_q_en 0) & (os_max_qs 0) | (os_mbox_en 0) ptcb - ostcbmsg = (void *)0; /消息指消息指針為針為空空#endif os_enter_critical();/把把os_tcb插插入到已入到已經(jīng)經(jīng)建立任建立任務(wù)務(wù)的的雙雙向向鏈鏈表中,需表中,需關(guān)關(guān)中中斷斷 ostcbpriotblprio = ptcb; ptcb-ost
46、cbnext = ostcblist; ptcb-ostcbprev = (os_tcb *)0; if (ostcblist!=(os_tcb *)0) ostcblist-ostcbprev = ptcb; ostcblist = ptcb; osrdygrp |= ptcb-ostcbbity; osrdytblptcb-ostcby |= ptcb-ostcbbitx; os_exit_critical(); return(os_no_err);/返回返回值值用于用于內(nèi)內(nèi)核掌握核掌握?qǐng)?zhí)執(zhí)行情行情況況 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心43初始化任務(wù)控制塊初始化
47、任務(wù)控制塊 os_exit_critical(); return (os_no_more_tcb);/返回返回值值用于用于內(nèi)內(nèi)核掌握核掌握?qǐng)?zhí)執(zhí)行情行情況況 總結(jié):總結(jié):1.目前,內(nèi)核對(duì)tcb維護(hù)了3個(gè)全局?jǐn)?shù)組:任務(wù)控制塊表ostcbtbl(用于決定內(nèi)核最多可用tcb數(shù)),任務(wù)優(yōu)先級(jí)tcb表ostcbpriotbl,任務(wù)就緒表osrdytbl和 osrdygrp。2.目前,對(duì)tcb維護(hù)了2個(gè)全局鏈表:任務(wù)控制塊空閑鏈表ostcbfreelist(指向下一個(gè)可以分配的tcb);已建立任務(wù)控制塊鏈表ostcblist。電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心已建立任務(wù)控制塊鏈表o
48、stcblist task nametask idtask statustask prioritytask contexttask nametask idtask statustask prioritytask contexttask nametask idtask statustask prioritytask contextostcblist隊(duì)列隊(duì)列tcb1tcb2tcbnnull44電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心就緒表就緒表 每個(gè)就緒的任務(wù)都放在就緒表每個(gè)就緒的任務(wù)都放在就緒表osrdytblosrdytbl中。當(dāng)中。當(dāng)任務(wù)就緒時(shí),任務(wù)就緒時(shí), osrdyt
49、blosrdytbl中相應(yīng)位置中相應(yīng)位置1.1.45電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心就緒表就緒表思考:思考:對(duì)于按優(yōu)先級(jí)大小存放的對(duì)于按優(yōu)先級(jí)大小存放的數(shù)據(jù)結(jié)構(gòu),如果我們想找數(shù)據(jù)結(jié)構(gòu),如果我們想找出最高優(yōu)先級(jí)的任務(wù),應(yīng)出最高優(yōu)先級(jí)的任務(wù),應(yīng)當(dāng)怎么操作呢?當(dāng)怎么操作呢?46電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心就緒表就緒表 還有一個(gè)全局變量,還有一個(gè)全局變量,osrdygrp:osrdygrp:47電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心就緒表就緒表 此外,還有一個(gè)全局變量,此外,還有一個(gè)全局變量,osmaptblosmapt
50、bl的的值值: :48下標(biāo)二進(jìn)制值000000001100000010200000100300001000400010000500100000601000000710000000電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心就緒表就緒表49/假假設(shè)當(dāng)設(shè)當(dāng)前任前任務(wù)優(yōu)務(wù)優(yōu)先先級(jí)為級(jí)為35,使任,使任務(wù)進(jìn)務(wù)進(jìn)入就入就緒態(tài)緒態(tài)osrdygrp |= osmaptblprio3;osrdytblprio3 |= osmaptblprio&0 x07; 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心就緒表就緒表50/假假設(shè)當(dāng)設(shè)當(dāng)前任前任務(wù)優(yōu)務(wù)優(yōu)先先級(jí)為級(jí)為35,使任,
51、使任務(wù)脫務(wù)脫離就離就緒態(tài)緒態(tài)if (osrdytblprio3&= osmaptblprio&0 x07) = =0)/*先先將將osrdytbl中的相中的相應(yīng)應(yīng)位位清清0,然后判,然后判斷該斷該位所在的行是否都位所在的行是否都為為0,若都若都為為0,則則再再清清除除osrdygrp的相的相應(yīng)應(yīng)位。位。*/ osrdygrp &= osmaptblprio3; 電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心就緒表就緒表 上面介紹了增加和脫離就緒態(tài)的任務(wù)的操作。那么如何找上面介紹了增加和脫離就緒態(tài)的任務(wù)的操作。那么如何找出最高優(yōu)先級(jí)的就緒態(tài)任務(wù)?出最高優(yōu)先級(jí)
52、的就緒態(tài)任務(wù)?51int8u const osunmaptbl = 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1
53、, 0, 2, 0, 1, 0,5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,6,
54、 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,/* 0 x00 to 0 x0f */* 0 x10 to 0 x1f */* 0 x60 to 0 x6f */* 0 x70 to 0 x7f */* 0 x80 to 0 x8f */* 0 x90 to 0 x9f *
55、/* 0 xa0 to 0 xaf */* 0 xb0 to 0 xbf */* 0 xc0 to 0 xcf */* 0 xd0 to 0 xdf */* 0 xe0 to 0 xef */* 0 x20 to 0 x2f */* 0 x30 to 0 x3f */* 0 x40 to 0 x4f */ /* 0 x50 to 0 x5f */* 0 xf0 to 0 xff */;電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心找出進(jìn)入就緒態(tài)的最高優(yōu)先級(jí)找出進(jìn)入就緒態(tài)的最高優(yōu)先級(jí)任務(wù)任務(wù)y= osunmaptblosrdygrp;x = osunmaptblosrdytbly;
56、 priority = (y 4/high3bit 0 x88-3/low3bitosrdytbl0osrdytbl1osrdytbl2osrdytbl3osrdytbl4osrdytbl5osrdytbl6osrdytbl752電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心另一種實(shí)現(xiàn)方式:任務(wù)隊(duì)列另一種實(shí)現(xiàn)方式:任務(wù)隊(duì)列 在非實(shí)時(shí)系統(tǒng)中,可以考慮通過任務(wù)隊(duì)列在非實(shí)時(shí)系統(tǒng)中,可以考慮通過任務(wù)隊(duì)列實(shí)現(xiàn)對(duì)系統(tǒng)中所有任務(wù)的管理。實(shí)現(xiàn)對(duì)系統(tǒng)中所有任務(wù)的管理。新任務(wù)新任務(wù)cpucpu就緒隊(duì)列就緒隊(duì)列等待隊(duì)列等待隊(duì)列超時(shí)超時(shí)調(diào)度調(diào)度等待資源等待資源獲得資源獲得資源釋放釋放cpucpu53電子
57、科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)隊(duì)列任務(wù)隊(duì)列 單等待隊(duì)列單等待隊(duì)列 資源對(duì)應(yīng)的事件發(fā)生時(shí),實(shí)時(shí)內(nèi)核需要掃描資源對(duì)應(yīng)的事件發(fā)生時(shí),實(shí)時(shí)內(nèi)核需要掃描整個(gè)等待隊(duì)列,搜索等待該資源的任務(wù),并整個(gè)等待隊(duì)列,搜索等待該資源的任務(wù),并按照一定的策略按照一定的策略選取任務(wù),把任務(wù)的任務(wù)控選取任務(wù),把任務(wù)的任務(wù)控制塊放置到就緒隊(duì)列。制塊放置到就緒隊(duì)列。 如果系統(tǒng)的資源和任務(wù)比較多,搜索等待該如果系統(tǒng)的資源和任務(wù)比較多,搜索等待該資源的任務(wù)所需要的時(shí)間就比較長(zhǎng),會(huì)影響資源的任務(wù)所需要的時(shí)間就比較長(zhǎng),會(huì)影響整個(gè)系統(tǒng)的實(shí)時(shí)性。整個(gè)系統(tǒng)的實(shí)時(shí)性。 可采用一種可采用一種多等待隊(duì)列多等待隊(duì)列的處
58、理方式的處理方式 資源對(duì)應(yīng)的事件發(fā)生時(shí),能夠在較短的時(shí)間資源對(duì)應(yīng)的事件發(fā)生時(shí),能夠在較短的時(shí)間內(nèi)確立等待該資源的任務(wù)等待隊(duì)列內(nèi)確立等待該資源的任務(wù)等待隊(duì)列。 54電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心新任務(wù)新任務(wù)cpucpu就緒隊(duì)列就緒隊(duì)列資源資源1 1等待隊(duì)列等待隊(duì)列超時(shí)超時(shí)調(diào)度調(diào)度等待資源等待資源1 1獲得資源獲得資源1 1釋放釋放cpucpu資源資源2 2等待隊(duì)列等待隊(duì)列等待資源等待資源2 2獲得資源獲得資源2 2資源資源n n等待隊(duì)列等待隊(duì)列等待資源等待資源n n獲得資源獲得資源n n55電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)隊(duì)列任務(wù)隊(duì)列
59、 對(duì)于就緒任務(wù),如果采用上述隊(duì)列方式進(jìn)對(duì)于就緒任務(wù),如果采用上述隊(duì)列方式進(jìn)行管理,在基于優(yōu)先級(jí)的調(diào)度處理中,要行管理,在基于優(yōu)先級(jí)的調(diào)度處理中,要獲得當(dāng)前具有獲得當(dāng)前具有最高優(yōu)先級(jí)最高優(yōu)先級(jí)的就緒任務(wù):的就緒任務(wù): 方式一:任務(wù)就緒時(shí),把就緒任務(wù)的任務(wù)控方式一:任務(wù)就緒時(shí),把就緒任務(wù)的任務(wù)控制塊放在就緒隊(duì)列的末尾制塊放在就緒隊(duì)列的末尾。 調(diào)度程序需要從就緒隊(duì)列的頭部到尾部進(jìn)行一次調(diào)度程序需要從就緒隊(duì)列的頭部到尾部進(jìn)行一次遍歷,才能獲得就緒隊(duì)列中具有最高優(yōu)先級(jí)的任遍歷,才能獲得就緒隊(duì)列中具有最高優(yōu)先級(jí)的任務(wù);務(wù); 方式二:就緒隊(duì)列按照優(yōu)先級(jí)從高到低的順方式二:就緒隊(duì)列按照優(yōu)先級(jí)從高到低的順序排列
60、序排列。 新的就緒任務(wù)到達(dá)時(shí),需要插入到就緒隊(duì)列的合新的就緒任務(wù)到達(dá)時(shí),需要插入到就緒隊(duì)列的合適位置,確保就緒隊(duì)列保持優(yōu)先級(jí)從高到低排列適位置,確保就緒隊(duì)列保持優(yōu)先級(jí)從高到低排列的順序性。的順序性。56電子科技大學(xué)嵌入式軟件工程中心電子科技大學(xué)嵌入式軟件工程中心任務(wù)調(diào)度任務(wù)調(diào)度 uc/osuc/os總是選擇總是選擇就緒態(tài)任務(wù)中優(yōu)先級(jí)最高就緒態(tài)任務(wù)中優(yōu)先級(jí)最高的任務(wù)執(zhí)行的任務(wù)執(zhí)行。 確定哪個(gè)任務(wù)優(yōu)先級(jí)最高,下面該哪個(gè)任務(wù)運(yùn)行了確定哪個(gè)任務(wù)優(yōu)先級(jí)最高,下面該哪個(gè)任務(wù)運(yùn)行了的工作是由調(diào)度器完成的。的工作是由調(diào)度器完成的。 uc/osuc/os的任務(wù)級(jí)調(diào)度是由函數(shù)的任務(wù)級(jí)調(diào)度是由函數(shù)os_sched()os_sched()完成的。完成的。 中斷級(jí)的調(diào)度是由另一個(gè)函數(shù)中斷級(jí)的調(diào)度是由另一個(gè)函數(shù)osintexit()o
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公文基礎(chǔ)知識(shí)培訓(xùn)課件
- 春節(jié)新媒體風(fēng)向標(biāo)
- 發(fā)動(dòng)機(jī)行業(yè)知識(shí)培訓(xùn)課件
- 總經(jīng)理年終總結(jié)
- 培訓(xùn)部門年終總結(jié)
- 立適合中國(guó)國(guó)情的長(zhǎng)期護(hù)理保險(xiǎn)制度模式
- 二零二五年度商業(yè)地產(chǎn)項(xiàng)目反擔(dān)保合同3篇
- 國(guó)際海關(guān)日介紹
- Unit 7 Happy Birthday Section A(2a-2e)說課稿 2024-2025學(xué)年人教版(2024)七年級(jí)英語上冊(cè)
- 專項(xiàng)學(xué)習(xí)像工程師那樣 說課稿-2024-2025學(xué)年科學(xué)二年級(jí)上冊(cè)蘇教版
- 醫(yī)院工會(huì)經(jīng)費(fèi)使用與管理辦法、制度規(guī)則
- 2022年外交學(xué)院輔導(dǎo)員招聘筆試題庫及答案解析
- 磁致伸縮液位傳感器KYDM-路線設(shè)置使用
- (完整版)建筑業(yè)10項(xiàng)新技術(shù)(2017年最新版)
- 收割機(jī)轉(zhuǎn)讓協(xié)議
- 中學(xué)歷史教育中的德育狀況調(diào)查問卷
- 煤礦煤業(yè)掘進(jìn)工作面班組安全確認(rèn)工作記錄表 模板
- 第8期監(jiān)理月報(bào)(江蘇版)
- 建筑工程質(zhì)量管理體系文件
- 乙丙橡膠電力電纜絕緣一步法硅烷交聯(lián)工藝
- 中止施工安全監(jiān)督申請(qǐng)書(范例)
評(píng)論
0/150
提交評(píng)論