久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
UCOS的任務(wù)就緒表表算法
[打印本頁]
作者:
xuwei
時(shí)間:
2015-6-13 16:57
標(biāo)題:
UCOS的任務(wù)就緒表表算法
一直在看UCOS,終于今天有所長(zhǎng)進(jìn),僅僅是一點(diǎn)點(diǎn),很微不足道的,對(duì)于我來說卻是很難很難!
操作系統(tǒng)建立任務(wù)后任務(wù)的優(yōu)先級(jí)便建立了,這個(gè)優(yōu)先級(jí)是上下文切換的參照,內(nèi)核的關(guān)鍵在于擦看當(dāng)前任務(wù)的優(yōu)先級(jí)并總是執(zhí)行優(yōu)先級(jí)最高的任務(wù),ucos不支持時(shí)間片輪轉(zhuǎn)調(diào)度,所以內(nèi)部的任務(wù)必須各不相同,也是內(nèi)核切換的核心,但是內(nèi)核又是有什么依據(jù)來調(diào)度任務(wù)的呢,ucos里的調(diào)度是靠建立任務(wù)就緒表作為參照,所以這個(gè)任務(wù)就緒表是個(gè)重點(diǎn),就緒的任務(wù)都在表里,內(nèi)核只要查表就可以知道哪些任務(wù)或者說哪些優(yōu)先級(jí)搞的任務(wù)已經(jīng)準(zhǔn)備好了,內(nèi)核就取出優(yōu)先級(jí)最高的任務(wù)開始執(zhí)行,是怎樣做的呢?
首先就緒任務(wù)寫入就緒表:
OSRdyGrp |=OSMapTbl[prio>>3];
OSRdyTab[prio>>3] |=OSMapTbl[prio&0x07];
在CORE.C文件中定義
INT8U const DT_XDATA OSMapTbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
就構(gòu)成了寫入就緒表算法,
例如:任務(wù)優(yōu)先級(jí)=10,則首先計(jì)算組=OSMapTbl[prio>>3]=OSMapTbl[10>>3]=OSMapTbl[1]=0x02;
計(jì)算位=OSRdyTab[1] =OSMapTbl[10&0x07]=OSMapTbl[2]=0x04;
這事位于矩陣上的10個(gè)單元置1,他的坐標(biāo)分別是(4,2)點(diǎn)。就緒表就寫入了,
至此優(yōu)先級(jí)為10的任務(wù)完成了優(yōu)先級(jí)的寫就緒表。
其次刪除就緒表中的就緒任務(wù):
if((OSRdyTab[prio>>3] )&=~OSMapTbl[prio&0x07])==0)
OSRdyGrp&=~OSMapTbl[prio>>3] ;
例如:任務(wù)優(yōu)先級(jí)=10;刪除就緒表操作
if(OSRdyTab[1]&=~0x04==0)保證OSRdyTab[1]=0;表示沒有任務(wù)進(jìn)入就緒列表才可以執(zhí)行下面的操作,
OSRdyGrp&=~0x04;
即矩陣的(4,2)點(diǎn)的值變?yōu)?;也就清了就緒表
最后是找到優(yōu)先級(jí)最高的任務(wù):
牽扯到另一個(gè)數(shù)組也在CORE.C中定義為:
INT8U const DT_XDATA 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, 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, 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
};
計(jì)算矩陣坐標(biāo)
y=OSUnMapTbl[OSRdyGrp] ;
x=OSUnMapTbl[OSRdyTab[y]];
prio=(y<<3)+x;
例如:OSRdyGrp=0x06;OSRdyTab[1]=0x03;
y=OSUnMapTbl[OSRdyGrp] =1;
x=OSUnMapTbl[OSRdyTab[1]]=OSUnMapTbl[3]=0;
最高級(jí)任務(wù)=8+0=8;
表示:在就緒表組=6,表示行1和行2都有任務(wù)就緒,單是查表得行優(yōu)先級(jí)最高的是1,所以令Y=1,而在這第一行里又有3個(gè)任務(wù)就緒了,在在他們里面找到優(yōu)先級(jí)最高的就是第0位,所以X=0,這時(shí)候就可以找到優(yōu)先級(jí)最高的點(diǎn)坐標(biāo)(1,0)其他的都比他低,比他高的沒有就緒,所以當(dāng)讓就是娶她的值為8,內(nèi)核就知道了原來這么多就緒的任務(wù)當(dāng)中就緒的是你小子啊,找出來了!
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
黄色小视频免费看
|
国产在线观看不卡
|
日韩在线免费播放
|
这里只有精品视频在线观看
|
午夜在线视频观看日韩17c
|
91色网站
|
九色精品
|
国产丝袜视频
|
亚洲色吧
|
亚洲精品一二三
|
国产一级在线
|
日韩成人在线免费观看
|
精品久久久久久久
|
97国产在线视频
|
国产成人精品一区二
|
日韩免费在线视频
|
日韩精品在线免费观看
|
黄色大片av
|
亚洲激情在线播放
|
91一级片
|
一区二区三区在线观看视频
|
91精品国产一区二区三区
|
国产日韩久久
|
精品久久一区二区三区
|
成人免费黄色片
|
操出白浆视频
|
毛片导航
|
91在线精品秘密一区二区
|
日韩三级在线播放
|
国产午夜精品视频
|
一级黄色片免费观看
|
青青五月天
|
成人免费高清视频
|
国产自产21区
|
久草资源在线观看
|
国产精品午夜视频
|
黄色免费片
|
亚洲国产欧美日韩在线
|
午夜免费福利视频
|
日韩在线欧美
|
丁香花在线观看
|