- 相關(guān)推薦
基于μC/OS-II操作系統(tǒng)的任務調(diào)度機制
論文關(guān)鍵詞:μC/OS-II;多任務;任務調(diào)度
論文摘要:μC/OS-II操作系統(tǒng)之所以在10多年的時間里作為一個嵌入式實時的多任務操作系統(tǒng)得到了廣泛的應用,原因之一是它的任務機制存在許多的優(yōu)點。多任務運行的最大難點就在于多任務的調(diào)度。
WANG Yu-rong,ZHU Jian-bin
(Computer Science College Wuhan University of Science and Engineering,Wuhan 430073,China)
Abstract:As a multi-task embedded real time operation system, μC/OS-II Operating Systems has been widely used in more ten years.One of the reason is that the Operating Systems has many advantages.The hardest point is the schedul of tasks when we run multi-task Operating Systems.
Key words:μC/OS-II;Multi-task;task-scheduling
1 引言
嵌入式系統(tǒng)是一種應用范圍非常廣泛的系統(tǒng)?梢赃@樣理解,除了桌面和服務器外所有計算設備都屬于嵌入式系統(tǒng)。在短短十多年的時間里,伴隨著微技術(shù)、軟件技術(shù)的發(fā)展,嵌入式系統(tǒng)被廣泛的用于如生物儀器、智能汽車、設備、網(wǎng)絡設備、儀器儀表、手持設備等諸多領(lǐng)域。[1] 它是以應用為中心的,而嵌入式操作系統(tǒng)則是嵌入式系統(tǒng)應用中的核心。
嵌入式系統(tǒng)是計算機硬件和軟件的結(jié)合體,或許還加上等其他部分,被設計來完成專門的功能。在一些情況下,嵌入式系統(tǒng)是一個大的系統(tǒng)或產(chǎn)品的一部分,就象汽車上的防抱死裝置,與通用計算機相對。最初的嵌入式系統(tǒng)是不帶操作系統(tǒng)的,只是用來完成某一個特定的單一功能,隨著軟硬件技術(shù)的發(fā)展,完成單一功能的嵌入式系統(tǒng)已經(jīng)不能適應的需要,因此出現(xiàn)了帶操作系統(tǒng)的嵌入式系統(tǒng)。現(xiàn)在嵌入式系統(tǒng)的準確定義是:以嵌入式計算機為技術(shù)核心,面向用戶、面向產(chǎn)品、面向應用,軟硬件可剪裁的,適用于對功能、可靠性、、體積、功耗等綜合性能有嚴格要求的專用計算機系統(tǒng)。[2]
μC/OS-II操作系統(tǒng)是一個完整的,可移植、固化、裁剪的占先式實時多任務操作系統(tǒng)。它之所以這么受歡迎,其中一個很重要的方面是因為它的實時性和多任務管理機制。由此可見它對任務的管理是成功的。在μC/OS-II操作系統(tǒng)中,一個任務,也稱作一個線程,就是一個簡單的程序,這個程序在執(zhí)行時可以任務CPU完全屬于該程序自己。而多任務的運行實際上并不是有多個CPU讓多任務使用,而是靠CPU在多個任務間的轉(zhuǎn)換和調(diào)度。
2 任務狀態(tài)
μC/OS-II操作系統(tǒng)的任務狀態(tài)有五種,分別是睡眠態(tài)、就緒態(tài)、運行態(tài)、等待狀態(tài)和中斷服務態(tài)。
睡眠態(tài)是指程序還在存儲設備中,還沒有被μC/OS-II操作系統(tǒng)管理,此時的任務只能通過任務創(chuàng)建函數(shù)才能脫離此狀態(tài),調(diào)用創(chuàng)建任務函數(shù)后,任務才能從睡眠態(tài)變成就緒態(tài),在這個意義上來說,睡眠態(tài)就是μC/OS-II操作系統(tǒng)的入口,而任務創(chuàng)建函數(shù)就是入口的鑰匙。[3]
任務被建立后,任務就進入到了就緒態(tài),準備運行了。如果新建立任務的優(yōu)先級高于就緒態(tài)中的其他任務的優(yōu)先級,則新建立的任務就會立即得到CPU的使用權(quán),會被優(yōu)先執(zhí)行,從而進入到運行態(tài);而在就緒態(tài)的任務也可以通過調(diào)用任務刪除函數(shù)回到睡眠態(tài)。
由于任何時刻只有一個任務處于運行態(tài),所以一旦運行態(tài)中的任務被剝奪了CPU的使用權(quán),它就從運行態(tài)回到等待狀態(tài)。也可以通過人為的控制郵箱、信號量、延遲時間等使正在運行的任務從運行態(tài)轉(zhuǎn)到等待狀態(tài)。如果正在運行的任務是允許中斷的,此時若中斷服務程序正好到來,正在運行的任務也會進入中斷服務狀態(tài),而進入中斷服務狀態(tài)的任務只有中斷任務把CPU的控制權(quán)還給中斷前的任務時,才能從中斷服務狀態(tài)退出來。運行態(tài)的任務也是可以被刪除的,如果此時調(diào)用了任務刪除函數(shù),運行態(tài)的任務也會直接回到睡眠態(tài)。
一旦正在運行的任務通過將自己延遲一段時間或是由于要等待某一事件的發(fā)生而進入到了等待狀態(tài),如果延遲時間滿,或是等待的某一事件發(fā)生了,任務就進入到了就緒態(tài);或者等待狀態(tài)的任務被刪除了,那么它也會進入到睡眠態(tài)。由此看來,睡眠態(tài)又是μC/OS-II操作系統(tǒng)的出口,而出口的鑰匙是任務刪除函數(shù),與任務建立函數(shù)相對。
3 任務調(diào)度
μC/OS-II操作系統(tǒng)總是運行進入就緒態(tài)任務中優(yōu)先級最高的任務。它可以管理多達64個任務,但目前的版本里已經(jīng)有兩個任務被系統(tǒng)占用。一般來說用戶可以使用從優(yōu)先級4到優(yōu)先級OS_LOWEST_PRIO-4一共56個優(yōu)先級。對于多任務的管理,μC/OS-II操作系統(tǒng)是通過調(diào)度器完成了。其中任務級的調(diào)度是由函數(shù)OSSched()完成,而中斷級的調(diào)度是通過函數(shù)OSIntExiT()完成。這兩個函數(shù)是很相似的,所不同的其中一點就是OSSched()調(diào)用了任務切換函數(shù)OS_TASK_SW(),而退出中斷服務子程序OSIntExiT()卻調(diào)用的是OSIntCtxSw()函數(shù)。這是因為中斷服務子程序已經(jīng)將CPU寄存器存入到中斷了的任務的堆棧中,所以只需要恢復堆棧中的內(nèi)容即可。
μC/OS-II操作系統(tǒng)是一個商業(yè)用的實時操作系統(tǒng)。這是因為它是可剝奪型內(nèi)核?蓜儕Z型內(nèi)核是指當有高優(yōu)先級任務到來時,不用等待低優(yōu)先級的任務執(zhí)行完畢,可以直接切換到高優(yōu)先級的任務執(zhí)行,即高優(yōu)先級任務可以剝奪低優(yōu)先級任務的CPU的使用權(quán)。μC/OS-II操作系統(tǒng)是一個多任務的實時操作系統(tǒng)。對于多任務的調(diào)度,它主要通過以下四類方法的使用來完成。
3.1優(yōu)先級
對于μC/OS-II操作系統(tǒng)定義的每一個任務,在創(chuàng)建任務之初,一定會給這個任務分配一個合適的優(yōu)先級。如果一個操作系統(tǒng)在調(diào)度算法選擇上只是基于優(yōu)先級調(diào)度,即支持靜態(tài)優(yōu)先級,那么這個操作系統(tǒng)只是一個準實時操作系統(tǒng)。而在μC/OS-II操作系統(tǒng)中,任務的優(yōu)先級是可變的,即支持動態(tài)優(yōu)先級。因此μC/OS-II操作系統(tǒng)是一個實時操作系統(tǒng)。改變?nèi)蝿諆?yōu)先級的函數(shù)是OSTaskChangePrio()。
3.2互斥信號量與信號量
在μC/OS-II操作系統(tǒng)中,互斥信號量被定義為一個二值信號,可以實現(xiàn)對共享資源的獨占式占用。當這個資源被一個任務占用時,就被定義為1。其他的需要這個資源的任務如果檢查到互斥型信號量是1,則進入等待狀態(tài),當占用此資源的任務釋放這個資源時,互斥型信號量則被置為0,此時等待這個資源的任務隊列中優(yōu)先級最高的任務則可以獲得這個資源而得以執(zhí)行。
在μC/OS-II操作系統(tǒng)中,信號量有兩種用法:一種是執(zhí)行與互斥信號量相同的功能。二是如果一個資源允許多個任務調(diào)用,但現(xiàn)在要調(diào)用此資源的任務數(shù)目卻多于允許使用此資源的數(shù)目,此時就需要用到信號量。這種情況下就會為資源設置一個計數(shù)器,如果被一個任務調(diào)用一次就自動減一,被一個任務釋放一次就自動加一,只要這個計數(shù)器是大于零的,其他的任務就可以調(diào)用這個資源。
3.3消息郵箱和消息隊列
用來傳遞消息緩沖區(qū)指針的數(shù)據(jù)結(jié)構(gòu)叫做消息郵箱。消息郵箱所傳遞的是指向消息的指針,并非消息本身。如果一個任務獲得了這個指針,即獲得了該指針指向的一個特定數(shù)據(jù)結(jié)構(gòu)。
消息郵箱不僅用來傳遞一個消息,而且也可定義一個指針數(shù)組,讓數(shù)組的每個元素都存放一個消息緩沖區(qū)指針。那么任務就可通過這個指針數(shù)組指針的方法來傳遞多個消息。這種可以傳遞多個消息的數(shù)據(jù)結(jié)構(gòu)叫做消息隊列。
消息郵箱和消息隊列在功能上的不同點是郵箱中只能存放一則消息指針,而隊列可以存放多則消息指針。
3.4事件標志組
當某個任務需要與多個任務同步時,必須要使用事件標志組。事件標志組一旦建立之后,只有當某個任務需要事件標志組中的某些事件標志位(置位或者清0),這個任務才能繼續(xù)運行。而且?guī)讉任務可以同時得到所需要的事件標志而進入就緒態(tài)。因此只要任務所需要的標志位滿足要求,任務便可以進入就緒態(tài)。而使用信號量的任務是在等待該信號量的任務中優(yōu)先級最高的任務才能得到信號量進入就緒態(tài)。
事件標志組可以使一個任務與多個任務同步,而信號量只能使一個任務與另一個任務同步。這是事件標志組與信號量的不同之處。
4 結(jié)論
本文在理論上對μC/OS-II操作系統(tǒng)的任務調(diào)度原理及方法進行了詳細的研究,了解了μC/OS-II操作系統(tǒng)所定義的任務狀態(tài),找到了整個狀態(tài)循環(huán)過程中的出口和入口,并分析了此操作系統(tǒng)是如何運用優(yōu)先級、信號量等一些方法進行任務的調(diào)度。在研究的同時,也使得我們了解了μC/OS-II操作系統(tǒng)不同于其他一些操作系統(tǒng)的地方。正是由于這些不同點,使得μC/OS-II操作系統(tǒng)在短短十多年的時間里迅速發(fā)展起來并得到了廣泛的應用。
參考文獻:
[1]季志均,馬文麗,陳虎,鄭文嶺.四種嵌入式實時操作系統(tǒng)關(guān)鍵技術(shù)分析[J].應用研究,2005,(9):4-8.
[2]張.兩種嵌入式實時操作系統(tǒng)的分析和比較[J].移動,2003.
[3]Jean J. Labrosse. 邵貝貝.等.μC/OS2Ⅱ源碼公開的實時嵌入式操作系統(tǒng)(第2 版)[M].北京:北京航空航天大學出版社,2003.
[4]任哲.嵌入式實時操作系統(tǒng)μC/OS-II原理及應用[M].北京: 北京航空航天大學出版社,2005.
[5]涂剛,陽富民,胡貫榮。嵌入式操作系統(tǒng)綜述[J].計算機應用研究,2000,(11):4-9.
【基于μC/OS-II操作系統(tǒng)的任務調(diào)度機制】相關(guān)文章:
C語言教法初探05-19
定向增發(fā)機制研究06-03
刑事訴訟監(jiān)視機制的完善與創(chuàng)新04-29
試析基于勝任素質(zhì)的薪酬模式構(gòu)建01-03
基于戰(zhàn)略治理的企業(yè)環(huán)境風險研究08-28
任務書和開題報告區(qū)別02-23
基于軟交換的固網(wǎng)智能化05-11