日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uc/os-ii中最高优先级计算(如何查表)

發(fā)布時間:2025/3/21 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uc/os-ii中最高优先级计算(如何查表) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  • 為什么要引入優(yōu)先級表?

? ? Answer:uc/os-ii是個講究實時性的操作系統(tǒng),在有多個任務時,系統(tǒng)需要選擇這些任務中優(yōu)先級最高的任務進行調度。如果單靠計算,有的優(yōu)先級計算費時少,有的很多,實時性得不到保證。如果引入表,我們只要知道表的橫縱坐標就可以直接找到需要的任務,實時性可以得到保證。因此,引入優(yōu)先級表。

  • 優(yōu)先級表(OSUnMapTbl)和就緒表(OSRdyTbl)、就緒組(OSRdyGrp)的關系?如何計算優(yōu)先級?

? ? Answer:實際上是位圖和表格的結合。

????從代碼上看,如下所示:

i = OSUnMapTbl[OSRdyGrp] ;// 找到行號 j = OSUnMapTbl[OSRdyTbl[i]];//找到列號 TaskPrior = 8*i+j=(i<<3)+ j;//找到最高優(yōu)先級號。

? ? 具體解釋為:

1.在OSUnMapTbl表中找到第OSRdyGrp位對應的數(shù)字,該數(shù)字賦值給i,代表優(yōu)先級所在的行號;

2.在OSUnMapTbl表中找到第OSRdyTbl[i] 位對應的數(shù)字,該數(shù)字賦值給j,代表優(yōu)先級所在的列號;

3.看就緒表中i行j列對應的數(shù)值。該數(shù)值為當前任務中最高的優(yōu)先級。

????就緒表如下所示:


這個表是我們將OSRdyGrp和OSRdyTbl二者結合構成的。如下圖:


合成之后就是我們看到的二維的一個表。但是該表實際上并不是以二維形式存在的。

因此,我們在知道橫縱坐標之后,不能直接查表,而是進行一個簡單的計算,即上述代碼語句第三句。將i左移三位,實際上就是i*8(OSRdyTbl是8位,即一行有8位),然后加上在該行的偏移量,也就是j。這樣就可以算出來優(yōu)先級是多少了。這里需要提醒一下:OSRdyTbl坐標是從右往左遞增的順序,不要搞錯了。

具體的操作我們舉個例子來說明一下:

先把相關的圖展示出來:



假設OSRdyGrp=98(d)=01100010(b); ?

????第一步就是在第二個圖所示的表(OSUnMapTbl)中查找第98位的數(shù)字,作為橫坐標。注意一下:98是十進制的,十六進制為0x62。我們鎖定注釋為:/*0x60 to 0x6F*/這一行,從左邊開始數(shù)(第一個數(shù)字數(shù)作0),2對應的表中的數(shù)字就是1u。所以i=1,即橫坐標是1。

? ? 第二步:得到OSRdyTbl[i]對應的值并計算縱坐標。i值第一步計算出來了,所以OSRdyTbl[i]=OSRdyTbl[1]。假設此時OSRdyTbl[1]=01100000(b)=96(d)。我們需要做的就是在OSUnMapTbl表中查找第96位的數(shù)字,查找方式和第一步一樣。可以看到數(shù)值為5u。所以j=5,即縱坐標是5。

? ? 第三步:計算最高優(yōu)先級任務對應的優(yōu)先級。i*8+j=13。所以最高優(yōu)先級任務對應的優(yōu)先級為13。

我們檢驗一下,在第一個圖中拼湊的的二維表中,1行5列的數(shù)值就是13。說明我們計算正確。

可能有人還有疑問:在計算機內我們給的值是什么?難道不直接是優(yōu)先級?

Answer:我們給定的是兩個值:OSRdyGrp和OSRdyTbl值,根據(jù)這兩個值找對應的優(yōu)先級。

又問:為什么不直接給優(yōu)先級然后進行比較找到最高優(yōu)先級任務?

Answer:我們前面提到過,uc/os-ii要保證實時性才引入了表格。在一堆任務中找最高優(yōu)先級任務,如果直接給每個任務的優(yōu)先級,我們就需要兩兩比較,或者將其排序,時間得不到保證。試想一下,如果只有三個任務,找最高優(yōu)先級任務很容易。但如果是30個,300個呢?顯然,用表格查找更符合我們的要求。

還問:那我們怎么從給的兩個值知道所有任務的優(yōu)先級或者說怎樣從這兩個值看出來有幾個任務,各自優(yōu)先級又是多少

Answer:回到上面的例子:OSRdyGrp=0110 0010,OSRdyTbl=0110 0000。OSRdyGrp的第1,5,6位為1,那么就緒組就有3個。OSRdyTbl的第5,6位為1,那么就緒表有2個任務。總共是3*2=6個任務。優(yōu)先級分別是(數(shù)值從低到高):13,14,45,46,53,54。


這里附加介紹一下簡單的找優(yōu)先級的方法:

我們知道優(yōu)先級越高,數(shù)值越低。所以我們只需要保證取到?OSRdyGrp和OSRdyTbl 的最低置1位就可以。還是上面的例子。98=0110 0010,最低置1位是第一位,所以橫坐標就是1。96=0110 0000,最低置1位是第5位,所以縱坐標是5。這樣就可以計算得到最高優(yōu)先級任務對應的優(yōu)先級是多少了。

以上解釋均為個人想法,不當之處還望指出。

????

總結

以上是生活随笔為你收集整理的uc/os-ii中最高优先级计算(如何查表)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。