![時間片輪詢多任務(wù)具體操作系統(tǒng)教材_第1頁](http://file4.renrendoc.com/view/0d28d6703dc95cfd732732ee2b406fb5/0d28d6703dc95cfd732732ee2b406fb51.gif)
![時間片輪詢多任務(wù)具體操作系統(tǒng)教材_第2頁](http://file4.renrendoc.com/view/0d28d6703dc95cfd732732ee2b406fb5/0d28d6703dc95cfd732732ee2b406fb52.gif)
![時間片輪詢多任務(wù)具體操作系統(tǒng)教材_第3頁](http://file4.renrendoc.com/view/0d28d6703dc95cfd732732ee2b406fb5/0d28d6703dc95cfd732732ee2b406fb53.gif)
![時間片輪詢多任務(wù)具體操作系統(tǒng)教材_第4頁](http://file4.renrendoc.com/view/0d28d6703dc95cfd732732ee2b406fb5/0d28d6703dc95cfd732732ee2b406fb54.gif)
![時間片輪詢多任務(wù)具體操作系統(tǒng)教材_第5頁](http://file4.renrendoc.com/view/0d28d6703dc95cfd732732ee2b406fb5/0d28d6703dc95cfd732732ee2b406fb55.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 目 錄1概述 2整體規(guī)劃 3任務(wù)控制塊 4內(nèi)部變量初始化 5創(chuàng)建任務(wù)6啟動多任務(wù)環(huán)境 longjmpInIsr() 97時鐘節(jié)拍中斷 810刪除任務(wù) 11運行的任務(wù)難以得知其他任務(wù)狀態(tài),任務(wù)切換時機難以把握。如果一個任務(wù)死掉,勢必造成整個系統(tǒng)死掉。協(xié)作式多任務(wù)系統(tǒng) 任務(wù) 協(xié)作式多任務(wù)系統(tǒng)的特點 安全性 復(fù)雜性 協(xié)作式多任務(wù)系統(tǒng)中,任務(wù)切換需正在運行的任務(wù)主動讓出CPU,這不僅帶來一些平安隱患,而且使程序設(shè)計相當?shù)膹?fù)雜。任務(wù)調(diào)度任務(wù)調(diào)度交給操作系統(tǒng),引入調(diào)度算法 調(diào)度算法 時間片輪詢 1優(yōu)先級調(diào)度2帶優(yōu)先級調(diào)度的時間片輪詢 3調(diào)度算法 時間片輪詢 1t t 任務(wù)的運行時間 時間片輪詢系統(tǒng)中任務(wù)
2、運行情況 在時間片輪詢操作系統(tǒng)中,CPU的執(zhí)行時間被劃分為假設(shè)干時間片,然后讓處于就緒狀態(tài)的任務(wù),按順序輪流占用CPU。當時間片用完時,即使任務(wù)未執(zhí)行完,系統(tǒng)也剝奪此任務(wù)的CPU使用權(quán)力。時間片長度t一般為110ms 優(yōu)先級調(diào)度2帶優(yōu)先級調(diào)度的時間片輪詢 3任務(wù)A 任務(wù)B任務(wù)C 所有任務(wù)相同對待,分時運行。調(diào)度算法 時間片輪詢 1優(yōu)先級調(diào)度2帶優(yōu)先級調(diào)度的時間片輪詢 3+ 低優(yōu)先級 + 中優(yōu)先級 + 高優(yōu)先級 任務(wù)A 任務(wù)B任務(wù)C t 高優(yōu)先級任務(wù)先運行 t 高優(yōu)先級任務(wù)搶占低優(yōu)先級任務(wù) 不同任務(wù)不同對待,優(yōu)先級高任務(wù)的先運行。調(diào)度算法 時間片輪詢 1優(yōu)先級調(diào)度2帶優(yōu)先級調(diào)度的時間片輪詢 3
3、這種調(diào)度算法情況較復(fù)雜,類型較多,自己去學(xué)習(xí)了解。任務(wù)切換時機 分配給任務(wù)的時間片已到 任務(wù)主動請求調(diào)度 12 任務(wù)在調(diào)用操作系統(tǒng)提供的“管理類效勞如刪除任務(wù)等和“等待類效勞如延時、獲取信號量、等待消息等時,會主動請求調(diào)度。 操作系統(tǒng)采用一個周期性的中斷來管理時間片,在這個中斷效勞函數(shù)中,判斷運行的任務(wù)是否用完了時間片。中斷中切換任務(wù) 使用時間片輪詢調(diào)度的操作系統(tǒng)中,會在兩種下進行任務(wù)切換。 目 錄2整體規(guī)劃 1概述 34任務(wù)控制塊 內(nèi)部變量初始化 時間片輪詢操作系統(tǒng)規(guī)劃 時間片輪詢調(diào)度算法時間片輪詢多任務(wù)操作系統(tǒng)協(xié)作式多任務(wù)系統(tǒng) TinyOS51 V1.0 TinyOS51 V1.1 Tin
4、yOS51 V1.1采用最簡單的時間片輪詢調(diào)度算法,在每個時鐘節(jié)拍中斷時調(diào)度,即分配給任務(wù)的時間片為一個時鐘節(jié)拍。 這樣,在任務(wù)控制塊中不僅不需要保存時鐘任務(wù)剩余的時鐘節(jié)拍,而且也不必編寫計算任務(wù)的剩余時間和設(shè)置任務(wù)時間片的代碼。TinyOS51從V1.0到V1.1的改變 TinyOS51 V1.0TinyOS51 v1.1任務(wù)調(diào)度函數(shù)tnOsSched()_tnOsSched()任務(wù)延時函數(shù)無tnOsTimeDly()時鐘節(jié)拍處理函數(shù)無tnOsTimeTick()TinyOS51 V1.0和TinyOS51 V1.1的API不同點 提供操作系統(tǒng)的一種根本效勞延時效勞,延時以時鐘節(jié)拍為單位。
5、在TinyOS51中,時鐘節(jié)拍中斷由用戶實現(xiàn),在時鐘節(jié)拍中斷處理函數(shù)中調(diào)用tnOsTimeTick()。void task0(void) TMOD = (TMOD & 0 xF0) | 0 x01; TL0 = 0 x00; / TH0 = 0 x00; / 初始化timer0,即 TR0 = 1; / 初始化時鐘節(jié)拍 ET0 = 1; / 中斷。 TF0 = 0; / while (1) _GucTask0+; /* * 一個簡單的任務(wù),無限循環(huán)中讓 * _GucTask0+。 */void task1(void) while (1) _GucTask0+; /* * 用戶實現(xiàn)時鐘節(jié)拍中斷效
6、勞函數(shù), * 并調(diào)用tnOsTimeTick()。 */void timer0ISR(void) _interrupt1 tnOsTimeTick();/* * 1. 初始化系統(tǒng) * 2. 創(chuàng)立任務(wù) * 3. 啟動系統(tǒng) */void main(void) tnOsInit(); tnOsTaskCreate(task0, _GucTaskStks0; tnOsTaskCreate(task1, _GucTaskStk1); tnOsStart();資源配置與例如 任務(wù)函數(shù) task0()和task1() 時鐘節(jié)拍中斷效勞函數(shù)timer0ISR() main函數(shù) main() static id
7、ata unsigned char _GucTaskStk232;static unsigned char _GucTask0;static unsigned char _GucTask1;/ 分配任務(wù)堆棧/ 任務(wù)0測試變量 / 任務(wù)1測試變量 全局變量定義 函數(shù)實現(xiàn) 目 錄3任務(wù)控制塊 45內(nèi)部變量初始化 創(chuàng)立任務(wù) 12概述 整體規(guī)劃任務(wù)控制塊 TinyOS51 V1.1增加了延時效勞功能,因此,在TCB中增加了一個記錄時間的成員uiTicks。#define _TN_TASK_FLG_DEL 0 x00 / 任務(wù)被刪除#define _TN_TASK_FLG_RDY 0 x01 / 任務(wù)就
8、緒#define _TN_TASK_FLG_DLY 0 x02 / 任務(wù)延時struct tn_os_tcb jmp_buf jbTaskContext; / 任務(wù)上下文 unsigned char ucTaskStat; / 任務(wù)狀態(tài) unsigned int uiTicks; / 任務(wù)延時時間 ;typedef struct tn_os_tcb TN_OS_TCB;static data TN_OS_TCB _GtcbTasksTN_OS_MAX_TASKS; / 任務(wù)控制塊數(shù)組與任務(wù)控制塊相關(guān)代碼: 目 錄4內(nèi)部變量初始化 56創(chuàng)立任務(wù) 啟動多任務(wù)環(huán)境 23整體規(guī)劃 任務(wù)控制塊 tnOs
9、Init() void tnOsInit (void) TN_OS_TASK_HANDLE thTask; / 操作的任務(wù) for (thTask = 0; thTask TN_OS_MAX_TASKS; thTask+) _GtcbTasksthTask.ucTaskStat = _TN_TASK_FLG_DEL; / 任務(wù)初始處于刪除狀態(tài) _GtcbTasksthTask.uiTicks = 0; / 設(shè)置初值 _GthTaskCur = 0; / 初始運行0號任務(wù) 由于TCB增加了一個uiTicks,那么在tnOsInit()中進行初始化。 OS初始化函數(shù)代碼: 目 錄5創(chuàng)立任務(wù)67啟動
10、多任務(wù)環(huán)境 任務(wù)調(diào)度 34任務(wù)控制塊內(nèi)部變量初始化 通常,為了提高可移植性,采用一個宏或函數(shù)來編寫實現(xiàn)開中斷和關(guān)中斷程序。由于TinyOS51僅適合80C51系列單片機,故直接使用“EA=0和“EA=1。創(chuàng)立任務(wù)函數(shù)tnOsTaskCreate() 由于tnOsTaskCreate()要操作TCB,而時鐘節(jié)拍中斷中也要操作TCB,因此tnOsTaskCreate()中操作TCB的代碼為臨界區(qū)代碼,要防止被時鐘節(jié)拍中斷打斷。 TinyOS51中采用開/關(guān)中斷的方式解決此問題。TN_OS_TASK_HANDLE tnOsTaskCreate(void (*pfuncTask)(void), ida
11、ta unsgined char *pucStk)TN_OS_TASK_HANDLE thRt;for (thRt = 0; thRt TN_OS_MAX_TASKS; thRt+) EA = 0; / 禁止中斷if (_GtcbTasksthRt.ucTaskStat = _TN_TASK_FLG_DEL) setTaskJmp(pfuncTask, pucStk, _GtcbTasksthRt.jbTaskContext); _GtcbTaskthRt.ucTaskStat = _TN_TASK_FLG_RDY; EA = 1; / 允許中斷 return thRt;EA = 1; / 允
12、許中斷 目 錄6啟動多任務(wù)環(huán)境 78任務(wù)調(diào)度 時鐘節(jié)拍中斷 45內(nèi)部變量初始化 創(chuàng)立任務(wù) tnOsStart() 在TinyOS51 V1.1中,如果不允許中斷,那么時鐘節(jié)拍中斷效勞程序不會運行,因此,在tnOsStart()中增加允許中斷的代碼。 void tnOsStart (void) EA = 1; / 允許中斷l(xiāng)ongjmp (_GtcbTask0.jbTaskContext); / 執(zhí)行0號任務(wù) tnOsInit()中_GthTaskCur = 0,即當前運行任務(wù)為0號任務(wù)。 目 錄7任務(wù)調(diào)度 89時鐘節(jié)拍中斷 longjmpInIsr() 56創(chuàng)立任務(wù) 啟動多任務(wù)環(huán)境 _tnOs
13、Sched() tnOsSched() 開/關(guān)中斷代碼_tnOsSched() TinyOS51 V1.0 TinyOS51 V1.1 任務(wù)調(diào)度函數(shù)_tnOsSched()中也要操作TCB,因此也需要參加開/關(guān)中斷代碼包含臨界區(qū)。另外,_tnOsSched()不再提供給任務(wù)直接調(diào)用,僅供內(nèi)部調(diào)用,因此添加前綴“_。保護臨界資源 目 錄8時鐘節(jié)拍中斷 9longjmpInIsr() 任務(wù)延時 67啟動多任務(wù)環(huán)境 任務(wù)調(diào)度 10如果uiTicks不為0,那么uiTicks-,即縮短延時時間。未使用任務(wù)狀態(tài)標志判斷任務(wù)是否處于延時狀態(tài)。這是因為TinyOS51更高的版本具有超時功能,需要使用uiTi
14、cks來判斷任務(wù)是否超時。如果uiTicks為0,那么將任務(wù)設(shè)置為就緒狀態(tài)。為了向上兼容超時代碼,即區(qū)分系統(tǒng)效勞是正常返回還是超時返回,未直接將任務(wù)設(shè)置為就緒狀態(tài),而使用“|=操作。時鐘節(jié)拍中斷 大多數(shù)操作系統(tǒng)中的延時管理和中斷效勞程序中的任務(wù)切換功能,分別是用兩個函數(shù)實現(xiàn)的,由于TinyOS51 V1.1是純粹的時間片輪詢操作系統(tǒng),非時鐘節(jié)拍中斷的中斷效勞程序不進行任務(wù)切換操作,因此將二者合二為一。 for (thTask = 0; thTask TN_OS_MAX_TASKS;thTask+) if (_GtcbTasksthTask.uiTicks != 0) _GtcbTasksthT
15、ask.uiTicks-; / 縮短延時時間 if (_GtcbTasksthTask.uiTicks = 0) _GtcbTasksthTask.ucTaskStat |= _TN_TASK_FLG_RDY; / 設(shè)置任務(wù)就緒狀態(tài)位 延時管理 1任務(wù)切換 2 對于80C51來說,規(guī)定:一般函數(shù)返回使用RET指令,而中斷返回使用RETI指令。由于longjmp()函數(shù)是使用RET指令返回的,如果在時鐘節(jié)拍中斷中繼線使用longjmp(),那么任務(wù)切換后CPU會認為中斷仍未退出,同級中斷包括自身將被屏蔽,從而造成整個系統(tǒng)執(zhí)行錯誤。因此必須將longjmp()函數(shù)改為longjmpInIsr()。
16、時鐘節(jié)拍中斷 大多數(shù)操作系統(tǒng)中的延時管理和中斷效勞程序中的任務(wù)切換功能,分別是用兩個函數(shù)實現(xiàn)的,由于TinyOS51 V1.1是純粹的時間片輪詢操作系統(tǒng),非時鐘節(jié)拍中斷的中斷效勞程序不進行任務(wù)切換操作,因此將二者合二為一。 for (thTask = 0; thTask = TN_OS_MAX_TASKS) thTmp2 = 0; if (_GtcbTasksthTmp2.ucTaskStat & _TN_TASK_FLG_RDY) != 0) cTmp1 = setjump(_GtcbTask_GthTaskCur.jbTaskContext); / 保持上下文 if (cTmep1 = 0
17、) _GthTaskCur = thTmp2; longjmpInIsr(_GtcbTasksthTmp2.jbTaskContext); / 中斷中切換上下文 延時管理 1任務(wù)切換 2 目 錄9longjmpInIsr() 任務(wù)延時 刪除任務(wù) 78任務(wù)調(diào)度 時鐘節(jié)拍中斷 1110中斷中切換任務(wù) 在中斷中切換任務(wù),不能再使用longjmp(),因為中斷需要使用專用返回指令RETI,非RET指令。char longjmpInIsr (jmp_buf Buf) _naked unsigned char ucSpSave; / 用于保存堆棧指針的變量 data unsigned char *pucB
18、uf = (data void *)0; / 指向上下文信息存儲位置的指針 pucBuf = (data unsigned char *)jbBuf; ucSpSave = *pucBuf+; bp = *pucBuf+; *(data unsigned char *)(char)(ucSpSave) = *pucBuf+; *(data unsigned char *)(char)(ucSpSave 1) = *pucBuf; SP = ucSpSave; DPL = 1; _asm RETI _endasm;將DPL設(shè)置為1 ,使返回值為1。因為SDCC51規(guī)定:char類型返回值保存在DPL中。采用_naked修飾,表示此函數(shù)是無保護的,即編譯器不會生成此函數(shù)的起始和結(jié)尾代碼。使用者將完全控制這個過程,這里用于參加RETI指令。 目 錄任務(wù)延時 刪除任務(wù) 78時鐘節(jié)拍中斷 longjmpInIsr() 1110任務(wù)延時函數(shù)tnOsTimeDly() void delay ( unsigned int uiDly) unsigned int i, j; for (i = 0; i uiDly; i+) for (j = 0; j 1000; j+) CPU處于空轉(zhuǎn)狀態(tài),效率太低。傳統(tǒng)延時 void tnOsTimeDly (unsigned int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年加盟市場經(jīng)營合作合同
- 2025年醫(yī)學(xué)專家指導(dǎo)合同
- 2025貸款正規(guī)合同
- 2025【合同范本】簡單房屋個人轉(zhuǎn)讓協(xié)議
- 2025年健身房裝修材料合同
- 2025年三方廠房租賃合同標準版本(2篇)
- 2025個人水產(chǎn)品店鋪出售合同
- 工廠員工勞動合同
- 2025三方物業(yè)租賃合同
- 廚房承包合同協(xié)議書工資
- 梁山伯與祝英臺小提琴譜樂譜
- 我國全科醫(yī)生培訓(xùn)模式
- 《摔跤吧爸爸》觀后感PPT
- 機構(gòu)編制重要事項的報告范文(5篇)
- DBJ51-T 188-2022 預(yù)拌流態(tài)固化土工程應(yīng)用技術(shù)標準
- 《長津湖》電影賞析PPT
- 多維閱讀第10級 who is who 看看都是誰
- 滑雪運動介紹
- 高二下學(xué)期英語閱讀限時訓(xùn)練(一)
- 半導(dǎo)體制造工藝-13薄膜沉積(下)綜述課件
- 大數(shù)據(jù)和人工智能知識考試題庫600題(含答案)
評論
0/150
提交評論