近期在網(wǎng)絡上看到有很多感興趣的技術同行作了大量引用和轉(zhuǎn)載。根據(jù)在實際項目中的應用經(jīng)驗,有必要對其再議,主要原因如下:①多任務的時間片調(diào)度在嵌入式領域有實用價值。一方面是很多嵌入式軟件系統(tǒng)升級有這種需求,舊的軟件模塊基于Endless Loop實現(xiàn),升級到μC/OS-II后,若要最大限度地復用舊的軟件模塊,時間片調(diào)度算法是實現(xiàn)舊的設計模式到新架構(gòu)之間最簡單的橋梁。另一方面,對于控制領域,存在大量的耗時任務無法自動釋放控制權,時間片調(diào)度降低了任務設計的復雜度。剛剛發(fā)布不久的μC/OS-II,推出的重大改進之一就是增加了對Round Robin的支持,更是表明μC/OS-II的使用者們對該功能的實際需求是切實存在的。
②不更改μC/OS-II內(nèi)核代碼實現(xiàn)時間片調(diào)度?!痘讦藽/OS-II的時間片調(diào)度法設計》對OS內(nèi)核代碼作了修改,雖然很少但增加了系統(tǒng)耦合度,對日后的項目維護和第三方升級都是不利的。如果存在完全不用更改內(nèi)核而僅基于OS服務的正常調(diào)用的實現(xiàn)方案,對系統(tǒng)的可靠性和移植性都是有益的。
③相對μC/OS-III,μC/OS-II仍然有廣泛的應用領域。μC/OS-III作出了重大的改進,增加了時間片調(diào)度,擴展了任務數(shù)的限制,允許了同等優(yōu)先級任務的存在,更多新特性的引入帶來了內(nèi)核結(jié)構(gòu)的重整以及運行時開銷的增加。雖然可以通過配置優(yōu)化系統(tǒng),但就大部分的應用而言,μC/OS-II完全能夠勝任,至少不需要僅僅為了時間片調(diào)度功能而選用μC/OS-III.
1調(diào)度原理
該調(diào)度算法對系統(tǒng)的要求有兩點:首先要建立一個額外的調(diào)度任務用于管理待調(diào)度的用戶任務時間片計時及其切換,我們將其命名為TaskRB_Scheduler;其次是保證其任務優(yōu)先級高于所有的待調(diào)度時間片任務,保證調(diào)度任務能搶占所有被調(diào)度任務的控制權。
我們假設系統(tǒng)中有3個任務需要分享時間片,分別為TaskRB_1、TaskRB_2、TaskRB_3.為了實現(xiàn)時間片的調(diào)度功能,還需要額外的調(diào)度任務TaskRB Scheduler,于是系統(tǒng)中的將會有4個任務。其中,TaskRB Scheduler由初始化代碼創(chuàng)建,而待調(diào)度的3個用戶任務的創(chuàng)建和管理完全由TaskRB Scheduler任務來完成。
TaskRB_Scheduler的運行分為兩個階段:首先是初始化階段,負責所有時間片任務的創(chuàng)立并確保其處于Suspend狀態(tài);然后是調(diào)度運行階段,如圖1所示。