<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > μC/OS2Ⅱ中優(yōu)先級(jí)調(diào)度算法的改進(jìn)及實(shí)現(xiàn)

          μC/OS2Ⅱ中優(yōu)先級(jí)調(diào)度算法的改進(jìn)及實(shí)現(xiàn)

          作者: 時(shí)間:2012-04-06 來(lái)源:網(wǎng)絡(luò) 收藏


          該算法在擴(kuò)展了系統(tǒng)可管理任務(wù)數(shù)目的同時(shí),考慮了如何在任務(wù)數(shù)目增大時(shí),還能夠快速進(jìn)行最高就緒任務(wù)判定的問(wèn)題,并給出了一種快速的判定方法。在介紹判定最高就緒任務(wù)的方法之前,先描述μC/OS2Ⅱ中原有的判定表格OSUnMapTbl ( [256]),該表格為16×16的數(shù)組,每個(gè)數(shù)組元素的值是固定的。當(dāng)使用該表格時(shí),數(shù)組下標(biāo)轉(zhuǎn)換為相應(yīng)的八位二進(jìn)制,其中高四位對(duì)應(yīng)數(shù)組的行,低四位對(duì)應(yīng)數(shù)組的列(假設(shè)最右邊的一位是第0位bit0) ,由此就可查表判斷一組任務(wù)就緒態(tài)任務(wù)中優(yōu)先級(jí)最高的那個(gè)任務(wù)所在的位置(查表后返回的值在0到7之間) ,再經(jīng)過(guò)計(jì)算,就可得到最高優(yōu)先級(jí)就緒任務(wù)的優(yōu)先級(jí)。

          為了減少不必要的工作,在判定最高優(yōu)先級(jí)就緒任務(wù)的方法中,利用了上面介紹的優(yōu)先級(jí)判定表格OSUnMapTbl ( [256]) ,把改進(jìn)后的優(yōu)先級(jí)看作一個(gè)類似二維坐標(biāo)的平面(如圖3所示) ,使256個(gè)



          任務(wù)優(yōu)先級(jí)平均分布在4個(gè)象限中(圖中的數(shù)字0~255表示256個(gè)任務(wù)優(yōu)先級(jí),每個(gè)位置實(shí)際存放的是任務(wù)優(yōu)先級(jí)的狀態(tài)信息) ,同時(shí)使用了兩個(gè)變量ox和oy來(lái)共同確定任務(wù)的優(yōu)先級(jí)所在象限,并由此進(jìn)一步查找最高優(yōu)先級(jí)的就緒任務(wù)。

          變量ox和oy的取值情況如圖3所示,下面的查找最高優(yōu)先級(jí)算法首先從判斷優(yōu)先級(jí)所在的象限開始進(jìn)行查找。具體代碼如下:
          oy=OSRdyGrp 0X00FF ;
          if ( oy==0)
           y=OSUnMapTbl[OSRdyGrp> > 8]+ 8;
          else
           y=OSUnMapTbl[oy];
          ox=OSRdyTbl[y] 0X00FF ;
          if ( ox==0)
           x=OSUnMapTbl[OSRdyTbl[y]> > 8]+ 8;
          else
           x=OSUnMapTbl[ox];
          prio=( y 4) + x;

          例如,如果OSRdyGrp的值為0X0068,則利用上面的代碼,首先可以判斷oy! =0,則查優(yōu)先級(jí)判定表格得到OSUnMapTbl[oy]的值為3,假設(shè)OSRdyTbl[3]的值為0X00E4,則可判斷ox! =0,再查優(yōu)先級(jí)判定表格得到OSUnMapTbl[ox]的值為2,最后計(jì)算得到任務(wù)的優(yōu)先級(jí)prio為50。

          μC/OS2Ⅱ中優(yōu)先級(jí)調(diào)度算法的第二種改進(jìn)方法

          在μC/OS2Ⅱ中,原來(lái)的優(yōu)先級(jí)調(diào)度算法只使用了一個(gè)字節(jié)中的6位,剩余兩位空閑。在第一種改進(jìn)方法中,我們是直接擴(kuò)展了定位就緒任務(wù)優(yōu)先級(jí)在中位置的行和列信息的比特位。現(xiàn)在介紹的第二種方法是利用原來(lái)存放優(yōu)先級(jí)的字節(jié)中剩余的兩位作為索引,重建,使任務(wù)優(yōu)先級(jí)擴(kuò)展到256個(gè)。這里需要增加一個(gè)變量OSRdyXY,用于存放索引信息,另外還要使用變量OSRdyGrp[]存放任務(wù)優(yōu)先級(jí)的行信息,OSRdyTbl0[ ],OSRdyTbl1[ ],OSRdyTbl2[ ]和OSRdyTbl3[ ]4個(gè)8位數(shù)組用于存放每個(gè)優(yōu)先級(jí)的任務(wù)是否就緒的信息。這種方法的任務(wù)優(yōu)先級(jí)字節(jié)的定義如圖4所示。


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();