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

          新聞中心

          EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于μC/0S―II的時(shí)問片調(diào)度法設(shè)計(jì)

          基于μC/0S―II的時(shí)問片調(diào)度法設(shè)計(jì)

          作者: 時(shí)間:2009-09-14 來源:網(wǎng)絡(luò) 收藏
          引 言
          μC/0S―II嵌入式實(shí)時(shí)操作系統(tǒng)采用的是基于優(yōu)先級(jí)的可剝奪法?;趦?yōu)先級(jí)的可剝奪法是指,CPU總是讓處于就緒態(tài)的、優(yōu)先級(jí)最高的任務(wù)運(yùn)行;最高優(yōu)先級(jí)的任務(wù)一旦就緒,總能得到CPU的使用權(quán),當(dāng)一個(gè)運(yùn)行著的任務(wù)使一個(gè)比它優(yōu)先級(jí)高的任務(wù)進(jìn)入了就緒態(tài)時(shí),當(dāng)前任務(wù)的CPU使用權(quán)就被剝奪了,更高優(yōu)先級(jí)的任務(wù)立刻得到了CPU的使用權(quán)。除非最高優(yōu)先級(jí)的任務(wù)主動(dòng)放棄CPU的使用權(quán)(通過調(diào)用0STimeDly()、0SSem―Pend()等函數(shù)),否則低優(yōu)先級(jí)的任務(wù)是沒機(jī)會(huì)獲得CPU使用權(quán)的。對(duì)于一個(gè)實(shí)際應(yīng)用系統(tǒng)中耗時(shí)比較長(zhǎng)的任務(wù),為了讓其他任務(wù)能夠得到實(shí)時(shí),可以用兩種方法來處理。第一種方法是把該任務(wù)的優(yōu)先級(jí)設(shè)為最低(當(dāng)然還是比空閑任務(wù)要高);第二種方法就是讓該耗時(shí)任務(wù)運(yùn)行一段時(shí)間后延時(shí)一下再繼續(xù)運(yùn)行,即把整個(gè)任務(wù)劃分為若干步驟來執(zhí)行,如以下的示例代碼:

          本文引用地址:http://www.ex-cimer.com/article/188642.htm

          很多情況下,耗時(shí)長(zhǎng)的任務(wù)并不能設(shè)置為最低優(yōu)先級(jí)任務(wù),而劃分步驟來執(zhí)行的方法不但繁瑣而且每一步執(zhí)行的時(shí)間也是不確定的(其他低優(yōu)先級(jí)任務(wù)獲得CPU使用權(quán)的時(shí)間也會(huì)是不確定的)。筆者在用μC/OS―II開發(fā)一款車載信息娛樂系統(tǒng)的時(shí)候就碰到了這樣的問題,因此設(shè)計(jì)了一種優(yōu)先級(jí)和時(shí)間片相結(jié)合的調(diào)度法(也就是基于μC/0S―II的時(shí)間片調(diào)度法)。

          1 調(diào)度原理
          這種調(diào)度法給處于就緒態(tài)的每一個(gè)任務(wù)都分配一個(gè)時(shí)間片(優(yōu)先級(jí)越高分配的時(shí)間片越長(zhǎng),空閑任務(wù)得不到時(shí)間片的分配),內(nèi)核按照任務(wù)的優(yōu)先級(jí)依次調(diào)度處于就緒態(tài)的任務(wù),即當(dāng)就緒態(tài)中最高優(yōu)先級(jí)的任務(wù)用完自己的時(shí)間片后,CPU控制權(quán)轉(zhuǎn)讓給就緒態(tài)中優(yōu)先級(jí)第二高的任務(wù)。該任務(wù)用完自己的時(shí)間片后,CPU控制權(quán)又轉(zhuǎn)讓給下一優(yōu)先級(jí)的就緒態(tài)任務(wù)……當(dāng)就緒態(tài)的每一個(gè)任務(wù)都被調(diào)度一次之后將重新為它們分配時(shí)間片,然后又開始新一輪的調(diào)度……
          其中要注意的是,在調(diào)度過程中如果有一個(gè)比當(dāng)前任務(wù)優(yōu)先級(jí)更高的任務(wù)由其他態(tài)變成了就緒態(tài)(被創(chuàng)建或獲取了一個(gè)信號(hào)量等),當(dāng)前任務(wù)的CPU控制權(quán)將被剝奪;空閑任務(wù)仍然是等到其他任務(wù)都退出就緒態(tài)才獲得CPU的使用權(quán)。
          圖1解釋了該調(diào)度法的調(diào)度過程(其中任務(wù)1優(yōu)先級(jí)最高,任務(wù)2次之,任務(wù)3最低)。

          ①任務(wù)2和任務(wù)3都處于就緒態(tài),任務(wù)1在等待一個(gè)信號(hào)量,優(yōu)先級(jí)中的任務(wù)2獲得CPU使用權(quán)。
          ②任務(wù)2的時(shí)間片用完,優(yōu)先級(jí)低的任務(wù)3獲得CPU使用權(quán)。
          ③任務(wù)3的時(shí)間片用完,任務(wù)2重新獲得CPU的使用權(quán)。
          ④任務(wù)2的時(shí)間片還沒用完時(shí)中斷來臨,中斷服務(wù)程序獲得CPU使用權(quán)。
          ⑤中斷服務(wù)程序發(fā)送了一個(gè)任務(wù)1等待的信號(hào)量,中斷服務(wù)完成后優(yōu)先級(jí)高的任務(wù)1獲得CPU使用權(quán)。
          ⑥任務(wù)1的時(shí)間片用完,任務(wù)2繼續(xù)運(yùn)行。
          ⑦任務(wù)2的時(shí)間片用完,任務(wù)3獲得CPU使用權(quán)。
          ⑧任務(wù)3的時(shí)間片用完,重新分配時(shí)間片,新一輪調(diào)度開始。


          2 實(shí)現(xiàn)方法
          在調(diào)度算法的實(shí)現(xiàn)過程中,力求做到3點(diǎn):
          ①盡可能少地改動(dòng)μC/0S―II原有的代碼;
          ②增加的代碼在風(fēng)格上保持與原有的相一致;
          ③兼容原有的優(yōu)先級(jí)調(diào)度法(可以很方便地選擇優(yōu)先級(jí)調(diào)度法或是時(shí)間片調(diào)度法)。
          注:對(duì)于該小節(jié)中出現(xiàn)的代碼,如果是筆者增加的部分都用黑體表示。
          2.1 數(shù)據(jù)結(jié)構(gòu)中增加的變量
          在進(jìn)程控制塊中增加兩項(xiàng):

          Typedef struct os_tcb{

          ……

          #if OS_TASK_TIME_SLICE-EN>0

          /*條件編譯,OS_TASK_TIME_SLICE_EN在os_cfg.h中定義,凡是涉及與時(shí)間片調(diào)度相關(guān)的代碼都用條件編譯。這樣,可以通過更改配置文件很方便地選擇任務(wù)調(diào)度法*/

          INT16U OSTCBTimeSlice;

          /*任務(wù)的時(shí)間片大小,在任務(wù)創(chuàng)建時(shí)被初始化,運(yùn)行過程中保持不變*/

          INT16U OSTCBCounter;

          /*任務(wù)運(yùn)行剩余時(shí)間計(jì)數(shù)器,每一輪調(diào)度開始時(shí)該變量被賦值(等于OSTCBTimeSlice),運(yùn)行過程中不斷遞減。當(dāng)其等于0時(shí)任務(wù)被剝奪CPU使用權(quán)*/

          #endif

          }
          由于當(dāng)前任務(wù)的時(shí)間片使用完時(shí),該任務(wù)將被從就緒表OSRdyGrp以及OSRdyTbl[OS_RDY_TBL_SIZE]中清除;新一輪調(diào)度開始時(shí)它又必須被恢復(fù),因此筆者在uC0S_II.h文件中增加以下變量(不妨把它們稱為“時(shí)間片調(diào)度表”)分別用于保存OSRdyGrp和OSRdyTbl[OS_RDY_TBL_SIZE]。
          OS_EXT INT8U OSTSSGrp;
          OS_EXT INT8U OSTSSTbl[OS_RDY_TBL_SIZE];


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: 調(diào)度

          評(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); })();