久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 10683|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

uC/OS-II學(xué)習(xí)筆記—任務(wù)就緒表和就緒組

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51773 發(fā)表于 2013-7-14 16:08 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
內(nèi)核在進(jìn)行任務(wù)調(diào)度時(shí),必須知道哪個(gè)任務(wù)在運(yùn)行、哪個(gè)任務(wù)是就緒的最高優(yōu)先級(jí)的任務(wù)。實(shí)時(shí)任務(wù)調(diào)度的關(guān)鍵在于速度,要求無(wú)論系統(tǒng)的運(yùn)行情況如何,調(diào)度的時(shí)間是確定的,不能把時(shí)間都用在調(diào)度上。因此就需要設(shè)計(jì)高效的多任務(wù)調(diào)度方法。查找高優(yōu)先級(jí)的任務(wù),與正在運(yùn)行的任務(wù)的優(yōu)先級(jí)進(jìn)行比較以確定是否進(jìn)行任務(wù)切換是內(nèi)核在每個(gè)時(shí)鐘中斷都需要做的事情。為滿(mǎn)足這樣的需要,uC/OS-II的開(kāi)發(fā)者采用了就緒表和就緒組這樣的數(shù)據(jù)結(jié)構(gòu),圍繞它們又定義了兩張查找表。
就緒組和就緒表的相關(guān)定義如下所示:




已經(jīng)知道,OS_LOWEST_PRIO是最低優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí),因?yàn)閡C/OS-II最多可以同時(shí)有64個(gè)就緒任務(wù),而優(yōu)先級(jí)是從0開(kāi)始,因此最大可以設(shè)置為63.如果設(shè)置為63,則OS_RDY_TBL_SIZE就為8,那么OSRdyTbl最多有8個(gè)元素。
OSRdyGrp是就緒組,類(lèi)型是INT8U,INT8U等同于無(wú)符號(hào)的字符型,也就是8位無(wú)符號(hào)數(shù)。OSRdyTbl就是每個(gè)元素都為8位無(wú)符號(hào)數(shù)的數(shù)組,數(shù)組中元素的個(gè)數(shù)是OS_RDY_TBL_SIZE。
如果把OSRdyTbl直接定義為INT8U OSRdyTbl[8]是不是也可以呢?答案是肯定的,但是如果任務(wù)數(shù)沒(méi)有那么多,沒(méi)有必要把OS_LOWEST_PRIO設(shè)置為63,假設(shè)是3,那么只要定義為INT8U OSRdy[1]就可以了,這樣做可以節(jié)約內(nèi)存空間。
uC/OS-II規(guī)定,每個(gè)就緒的任務(wù)在就緒表中的對(duì)應(yīng)位置為1,反之為0。只要就緒表OSRdyTbl[n]所有的位都為0,OSRdyGrp的第n位才為0。
在操作系統(tǒng)還沒(méi)有創(chuàng)建任務(wù)的時(shí)候,就緒表和就緒組如下圖所示:


在上圖中,因?yàn)闆](méi)有就緒任務(wù),所以就緒表中所有位都是0,即從OSRdyTbl[0]到OSRdyTbl[7]都是0,所以O(shè)SRdyGrp也是0。當(dāng)創(chuàng)建了空閑任務(wù)和統(tǒng)計(jì)任務(wù)后,就緒表和就緒組如下圖所示:


在上圖中,創(chuàng)建了優(yōu)先級(jí)最小的兩個(gè)任務(wù)——空閑任務(wù)和統(tǒng)計(jì)任務(wù)。空閑任務(wù)的優(yōu)先級(jí)是63,空閑任務(wù)就緒,那么OSRdyTbl[7]的最高位為1.統(tǒng)計(jì)任務(wù)的優(yōu)先級(jí)是62,統(tǒng)計(jì)任務(wù)也就緒,那么OSRdyTbl[7]的次高位為1。OSRdyTbl[7]不是0,所以O(shè)SRdyGrp的第7位為1。如果我們?cè)賱?chuàng)建一個(gè)優(yōu)先級(jí)是11的任務(wù),創(chuàng)建后就緒表和就緒組就應(yīng)該如下圖所示。


通過(guò)上面3個(gè)任務(wù)的創(chuàng)建過(guò)程可以看出,如果有新的就緒任務(wù),就需要將就緒表中與該任務(wù)優(yōu)先級(jí)對(duì)應(yīng)的項(xiàng)置1.如果該就緒任務(wù)在第n行,就將OSRdyGrp的第n位置1。
于是,如果有一個(gè)優(yōu)先級(jí)為prio的任務(wù)就緒,應(yīng)執(zhí)行如下的代碼:



在任務(wù)調(diào)度的時(shí)候,要查找優(yōu)先級(jí)最高的任務(wù)。采用分組管理的方法就是為了使查找的時(shí)候時(shí)間是確定的,速度是最快的。如果不采用分組管理的方法,那么就要從OSRdyTbl[0]開(kāi)始查找,如果一直找不到,就要查找到OSRdyTbl[7],所以時(shí)間比較長(zhǎng),且不能確定。采用就緒組后,查找程序代碼如下所示:


可見(jiàn),獲取就緒任務(wù)中的最高優(yōu)先級(jí)的方法是以O(shè)SRdyGrp的值為依據(jù)查優(yōu)先級(jí)判定表OSUnMapTbl獲得最高優(yōu)先級(jí)任務(wù)的高5位,然后將其賦值給y。然后,以O(shè)SRdyTbl[y]的值再一次查表,得到低3位,再將高5位左移3位與低3位相或,得到優(yōu)先級(jí)。這樣的查找方法是迅速的,查找時(shí)間也是恒定的。但是這樣做的依據(jù)是什么呢?
如果我們要找到優(yōu)先級(jí)最高的任務(wù),那么應(yīng)該先分析OSRdyGrp。假設(shè)OSRdyGrp中最低的為1的位為y號(hào)位,決定了我們?cè)诰途w表中的哪一行來(lái)查找優(yōu)先級(jí)最高的任務(wù)。也就是說(shuō),先查找到就緒表中的行號(hào)。有了行號(hào),接下來(lái)再找是哪一列,這樣就知道最低優(yōu)先級(jí)的任務(wù)是多少了。OSUnMapTbl這張表就是為了達(dá)到這樣的目的而設(shè)計(jì)的!
OSUnMapTbl的定義如下所示:


首先根據(jù)OSRdyGrp查找優(yōu)先級(jí)判定表,原理是根據(jù)優(yōu)先級(jí)立即查找到OSRdyTbl[]中對(duì)應(yīng)元素,即OSRdyGrp中從低位到高位第一個(gè)為1的位的位置(從0到7)。例如,如果OSRdyGrp為11001000B,那么最低的為1的位是3號(hào)位,于是查表得到3,就是說(shuō)最高優(yōu)先級(jí)在OSRdyTbl[3]中。如果是01001000B,同樣查找到3,這就是程序中為什么有那么多列是相同的原因。
假設(shè)OSRdyGrp為0,那么沒(méi)有任務(wù)就緒,但是在多任務(wù)啟動(dòng)后沒(méi)有任務(wù)就緒是不可能的,因?yàn)橹辽倏臻e任務(wù)是就緒的,所以我們添一個(gè)0占一個(gè)位置。假設(shè)OSRdyGrp的最低位為1,那么就緒表中的0行有任務(wù)就緒,也就是優(yōu)先級(jí)為0~7的任務(wù)有就緒的,我們應(yīng)該去查看OSRdyTbl[0]中是哪一位為1了。OSRdyGrp的最低位為1的情況有很多,但是所有這些情況下查找得到的值都是0.
優(yōu)先級(jí)判定表OSUnMapTbl就是根據(jù)一個(gè)8位的無(wú)符號(hào)數(shù)的數(shù)值來(lái)確定最低的為1的位的位置的,OSUnMapTbl[n]就是n的最低的為1的位的位號(hào)。
y=OSUnMapTbl[OSRdyGrp]是將就緒組中最低為1的位的位號(hào)取出來(lái)放在y中,是就緒表中的行號(hào)。OSRdyTbl[y]是取得就緒表中對(duì)應(yīng)行的值,OSUnMapTbl[OSRdyTbl[y]]是該行中最低的為1的位的位號(hào),也就是就緒表中的列號(hào)。然后(y<<3)是將y左移3位,再加上行號(hào),正好就是最高優(yōu)先級(jí)的任務(wù)的優(yōu)先級(jí)。
查找最高優(yōu)先級(jí)的任務(wù)也是用了兩條語(yǔ)句,時(shí)間快且確定。
最后舉例驗(yàn)證一下,就緒表和就緒組如下所示:


由圖可知,OSRdyGrp為10000010B(十進(jìn)制130),應(yīng)對(duì)應(yīng)OSRdyTbl[1],而OSRdyTbl[1]為00001000,故最高優(yōu)先級(jí)任務(wù)為8+3=11。用程序代碼計(jì)算,OSUnMapTbl[130]為1,y值為1,表示對(duì)應(yīng)1號(hào)行,OSRdyTbl[1]的值為00001000B,OSUnMapTbl[OSRdyTbl[y]]的值為3,于是OSPrioHighRdy=1<<8+3=11,驗(yàn)證成功。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩视频在线播放 | 超碰人人91 | 国产欧美日韩二区 | 久久爱一区 | 日韩成人一区 | 欧美一区二区免费视频 | 五月天婷婷综合 | 成人精品鲁一区一区二区 | 一区二区三区中文 | 精品欧美一区二区久久久伦 | 日韩在线不卡 | 波多野结衣中文视频 | 狠狠色综合网站久久久久久久 | 一区二区三区观看视频 | m豆传媒在线链接观看 | 久草视频在 | 亚洲一区二区在线播放 | 日韩精品一区二区三区中文字幕 | 少妇特黄a一区二区三区88av | 成人免费在线 | 国产精品中文字幕在线 | 午夜精品一区二区三区在线视 | 伊人精品 | 欧美亚洲综合久久 | 日本高清视频网站 | 午夜理伦三级理论三级在线观看 | 亚洲精品电影在线观看 | 日韩手机在线看片 | 国产精品99久久久精品免费观看 | www.亚洲| 激情欧美日韩一区二区 | 亚洲精品视频观看 | 国产网站在线免费观看 | 狠狠干美女 | 国产精品不卡一区 | 亚洲欧美日韩精品久久亚洲区 | www久| 日韩中文字幕网 | 日韩一区精品 | 一区二区三区网站 | 高清视频一区二区三区 |