侯慧娟,李夢(mèng)溪,郭思維
(國(guó)網(wǎng)河南省電力公司營(yíng)銷(xiāo)服務(wù)中心,鄭州 450052)
隨著IR46智能電能表、智能物聯(lián)電能表(新一代智能電能表)的快速發(fā)展[1],軟件迭代更新、系統(tǒng)功能管理、維護(hù)等需求也隨之受到了研發(fā)人員的廣泛關(guān)注,其中運(yùn)行可靠性和實(shí)時(shí)性成為了新一代智能電能表軟件開(kāi)發(fā)的重點(diǎn)[2-4]。嵌入式操作系統(tǒng)作為一種用途廣泛的系統(tǒng)軟件,提供任務(wù)調(diào)度和管理、內(nèi)存管理、任務(wù)間同步與通信、時(shí)間管理等功能,具有執(zhí)行效率高、實(shí)時(shí)性能優(yōu)良和擴(kuò)展性強(qiáng)等特點(diǎn)。因此,將其部署到智能物聯(lián)電能表軟件系統(tǒng)中,是新一代智能電能表邁向高性能、高穩(wěn)定性、可擴(kuò)展性和高可靠性的關(guān)鍵技術(shù)。
目前,實(shí)時(shí)嵌入式操作系統(tǒng)的種類(lèi)繁多,但由于智能電能表RAM等資源的限制,使得所移植的嵌入式操作系統(tǒng)必須滿(mǎn)足輕量級(jí)、可裁剪、可移植和高可靠性等特性。微內(nèi)核作為嵌入式操作系統(tǒng)內(nèi)核的精簡(jiǎn)版本,具有占用內(nèi)存小、移植性強(qiáng)等特點(diǎn)[5],為智能物聯(lián)電能表嵌入式系統(tǒng)開(kāi)發(fā)提供了可能,并將為其優(yōu)異的性能發(fā)揮強(qiáng)大的潛力。
在嵌入式操作系統(tǒng)中,任務(wù)調(diào)度是其中最為核心的功能[6]。根據(jù)任務(wù)調(diào)度方式的不同,通常可將嵌入式操作系統(tǒng)內(nèi)核分為非搶占式和搶占式兩種,因此對(duì)于任務(wù)調(diào)度而言,搶占式任務(wù)調(diào)度更加能夠體現(xiàn)任務(wù)響應(yīng)的實(shí)時(shí)性。例如μC/OS操作系統(tǒng)采用最高優(yōu)先級(jí)作為任務(wù)調(diào)度方法,任務(wù)優(yōu)先級(jí)越高,當(dāng)處于就緒態(tài)時(shí),其切換至運(yùn)行態(tài)的可能性越大[7-8]。然而,針對(duì)任務(wù)集中優(yōu)先級(jí)較低的任務(wù),因其時(shí)常被高優(yōu)先級(jí)搶占而得不到執(zhí)行,文獻(xiàn)[9]提出了一種任務(wù)補(bǔ)償調(diào)度機(jī)制,使得在設(shè)定的時(shí)間內(nèi)對(duì)較低優(yōu)先級(jí)任務(wù)進(jìn)行補(bǔ)償調(diào)度。文獻(xiàn)[10]首先將任務(wù)劃分為實(shí)時(shí)任務(wù)、分時(shí)任務(wù)和后臺(tái)任務(wù),實(shí)時(shí)任務(wù)采用優(yōu)先級(jí)最高執(zhí)行調(diào)度,而分時(shí)任務(wù)采用時(shí)間片調(diào)度算法,后臺(tái)任務(wù)則以中斷響應(yīng)為主,實(shí)現(xiàn)整個(gè)操作系統(tǒng)任務(wù)的調(diào)度。在上述嵌入式系統(tǒng)中,任務(wù)優(yōu)先級(jí)通常屬于靜態(tài),不具有動(dòng)態(tài)變化特性,從而限制了任務(wù)調(diào)度的靈活性以及系統(tǒng)的進(jìn)一步擴(kuò)展。
針對(duì)任務(wù)優(yōu)先級(jí)動(dòng)態(tài)設(shè)置問(wèn)題,國(guó)內(nèi)外研究者分別提出了多種經(jīng)典的任務(wù)調(diào)度算法,其中最早截止時(shí)間優(yōu)先調(diào)度(eearliest deadline first,EDF)可以根據(jù)任務(wù)的截止時(shí)間排序執(zhí)行任務(wù)調(diào)度[11-12],從而大幅提升處理器的利用率。然而當(dāng)系統(tǒng)任務(wù)過(guò)載時(shí),容易引發(fā)任務(wù)錯(cuò)失截止時(shí)間而影響后續(xù)其他任務(wù)的執(zhí)行,為此文獻(xiàn)[13]綜合考慮任務(wù)截止時(shí)間、執(zhí)行價(jià)值和消耗能耗三種因素確定任務(wù)優(yōu)先級(jí),并通過(guò)希爾排序算法對(duì)任務(wù)進(jìn)行選擇,從而降低任務(wù)錯(cuò)失率。文獻(xiàn)[14]在EDF算法基礎(chǔ)上,綜合截止期和關(guān)鍵度兩種特征參數(shù),提出一種動(dòng)態(tài)截止期-關(guān)鍵度調(diào)度算法,通過(guò)構(gòu)建判斷函數(shù)執(zhí)行任務(wù)調(diào)度,從而降低任務(wù)錯(cuò)失率和保障重要任務(wù)的調(diào)度成功率。文獻(xiàn)[15]針對(duì)混合任務(wù)調(diào)度問(wèn)題,提出了一種靜態(tài)周期性可搶占式混合任務(wù)調(diào)度策略,該策略問(wèn)題同時(shí)支持中斷級(jí)與任務(wù)級(jí)的任務(wù)切換,并采用EDF算法對(duì)被搶占的時(shí)間觸發(fā)任務(wù)進(jìn)行恢復(fù),提高系統(tǒng)資源利用率,并最大限度保證任務(wù)實(shí)時(shí)性。然而,動(dòng)態(tài)優(yōu)先級(jí)調(diào)度方法只針對(duì)任務(wù)的時(shí)間特性,并沒(méi)有考慮任務(wù)的重要程度,容易引起資源的競(jìng)爭(zhēng),引發(fā)優(yōu)先級(jí)反轉(zhuǎn)、死鎖等隱患,一定程度上增加了任務(wù)調(diào)度算法設(shè)計(jì)的難度。此外,針對(duì)不同的應(yīng)用,如何綜合多種因素實(shí)現(xiàn)穩(wěn)定可靠的任務(wù)調(diào)度,也成為了任務(wù)調(diào)度算法研究的熱點(diǎn)[16-20]。
文中針對(duì)智能物聯(lián)電能表實(shí)際應(yīng)用,在其RAM等資源受限等情況下,通過(guò)引入微內(nèi)核架構(gòu)設(shè)計(jì)軟件及相應(yīng)任務(wù),提出一種微內(nèi)核動(dòng)態(tài)優(yōu)先級(jí)任務(wù)調(diào)度方法。首先,根據(jù)智能物聯(lián)電能表功能需求,采用功能模塊任務(wù)化設(shè)計(jì),劃分為周期性任務(wù)和事件觸發(fā)任務(wù),并引入最高優(yōu)先級(jí)、最早截止時(shí)間調(diào)度以及補(bǔ)償調(diào)度等方法,通過(guò)構(gòu)建動(dòng)態(tài)優(yōu)先級(jí)分配方法,確保任務(wù)調(diào)度的實(shí)時(shí)性和可靠性。最后,通過(guò)仿真分析驗(yàn)證文中方法的有效性。
隨著新一代智能電能表中多芯的引入,微內(nèi)核作為小型嵌入式操作系統(tǒng)的核心,已經(jīng)成為了嵌入式系統(tǒng)開(kāi)發(fā)的一個(gè)重要方向。圖1給出了目前智能物聯(lián)電能表硬件架構(gòu)圖,其包含了自身的電量計(jì)量模組,同時(shí)增加了擴(kuò)展模組、管理模組等。此外,MCU、計(jì)量芯以及擴(kuò)展模組等多芯的使用,使得智能電能表管理芯面臨代碼執(zhí)行效率優(yōu)化以及各模塊運(yùn)行的實(shí)時(shí)性跟進(jìn)等問(wèn)題。
圖1 智能物聯(lián)電能表框圖
目前,整個(gè)電能表管理芯的功能框架主要包含了10種功能的開(kāi)發(fā),例如LCD顯示、按鍵控制、繼電器、存儲(chǔ)器、通信以及計(jì)量等,具體如表1所示。顯然,在底層軟件開(kāi)發(fā)過(guò)程中,不僅需要滿(mǎn)足表計(jì)法制計(jì)量功能的要求,而且面對(duì)下行擴(kuò)展功能模塊的通信與交互同樣要求具備實(shí)時(shí)響應(yīng)特性。為此,微內(nèi)核的引入,并將各個(gè)功能模塊任務(wù)化,一方面可大大降低其編程的復(fù)雜度,同時(shí)也可利用任務(wù)調(diào)度算法提高各個(gè)功能模塊的實(shí)時(shí)響應(yīng)能力。
表1 智能電能表硬件驅(qū)動(dòng)
由表1以及圖1可知,整個(gè)智能物聯(lián)電能表需要實(shí)現(xiàn)的功能主要包括:電能量計(jì)量、數(shù)據(jù)凍結(jié)、事件記錄、顯示、通信(藍(lán)牙、串口交互)等功能。為了使得各功能模塊具有并發(fā)處理能力,文中將各個(gè)功能模塊與任務(wù)建立對(duì)應(yīng)關(guān)系,具體如表2所示。
表2 智能物聯(lián)電能表任務(wù)的構(gòu)建
同時(shí),利用嵌入式操作系統(tǒng)任務(wù)調(diào)度執(zhí)行整個(gè)智能電能表軟件系統(tǒng),具體設(shè)計(jì)如下:
1)任務(wù)類(lèi)型的設(shè)計(jì)。
根據(jù)表2可知,任務(wù)可劃分為周期性任務(wù)和事件觸發(fā)任務(wù),其中任務(wù)1~任務(wù)6屬于周期性任務(wù);任務(wù)7~任務(wù)11為事件觸發(fā)任務(wù)??紤]到在周期性任務(wù)中存在事件觸發(fā),文中將其事件觸發(fā)修改為判斷全局變量值來(lái)保證任務(wù)只執(zhí)行周期性任務(wù)。例如任務(wù)6,在按鈕中斷響應(yīng)中改變?nèi)肿兞康闹?而在該任務(wù)周期執(zhí)行中,加入對(duì)這個(gè)全局變量的判斷執(zhí)行相應(yīng)的功能;
2)任務(wù)調(diào)度算法的設(shè)計(jì)。
為了確保整個(gè)操作系統(tǒng)穩(wěn)定、可靠的運(yùn)行,在上述任務(wù)中,針對(duì)周期性任務(wù),可采用最高優(yōu)先級(jí)的方式進(jìn)行調(diào)度;而通信部分采用的是事件觸發(fā)機(jī)制,即可在通信接收中斷函數(shù)中發(fā)放信號(hào)量等,使得等待信號(hào)量的各個(gè)通信接收處理任務(wù)能夠獲得CPU而執(zhí)行。因此,相對(duì)于周期性任務(wù)而言,其要求任務(wù)調(diào)度具有一定的實(shí)時(shí)性。為了滿(mǎn)足這個(gè)特性,可采用EDF等動(dòng)態(tài)優(yōu)先級(jí)任務(wù)調(diào)度算法;
3)任務(wù)之間的同步與通信的設(shè)計(jì)。
在嵌入式操作系統(tǒng)內(nèi)核管理中,各個(gè)任務(wù)間不允許相互調(diào)用,需通過(guò)同步與通信機(jī)制來(lái)進(jìn)行協(xié)調(diào)。例如在數(shù)據(jù)通信中,通常采用串口中斷的方式實(shí)現(xiàn)數(shù)據(jù)的接收。因此,在中斷函數(shù)中接收到一幀數(shù)據(jù)后,通過(guò)發(fā)放信號(hào)量的方式觸發(fā)相應(yīng)的任務(wù),使得等待該信號(hào)量的任務(wù)能夠執(zhí)行,例如任務(wù)7和任務(wù)9。
為了清晰描述各個(gè)任務(wù)以及與中斷之間關(guān)聯(lián)特性,圖2給出了整體軟件系統(tǒng)框架。整個(gè)嵌入式系統(tǒng)的處理主要分為三大部分:周期性任務(wù)處理、中斷響應(yīng)處理以及事件觸發(fā)任務(wù)處理,其中在中斷響應(yīng)中,負(fù)責(zé)協(xié)調(diào)周期性任務(wù)和事件觸發(fā)任務(wù)。
圖2 軟件系統(tǒng)框架
為了確保周期性任務(wù)和事件觸發(fā)任務(wù)的實(shí)時(shí)性,文中采用搶占式嵌入式操作系統(tǒng)設(shè)計(jì),并引入最高優(yōu)先級(jí)調(diào)度以及最早截止時(shí)間優(yōu)先調(diào)度算法。
最高優(yōu)先級(jí)優(yōu)先是一種高效的調(diào)度算法,它可以通過(guò)查表法快速查找優(yōu)先級(jí),具體如圖3所示,定義一個(gè)OSEventGrp字節(jié)變量,其中從低位開(kāi)始第i位表示數(shù)組OSEventTbl[i]中對(duì)應(yīng)的那一行是否存在就緒任務(wù);然后再根據(jù)OSEventTbl[i],從最低位開(kāi)始查看每一位是否存在相對(duì)應(yīng)的就緒任務(wù)。
圖3 μC/OS II 最高優(yōu)先級(jí)查找法
為了能夠快速查找最高優(yōu)先級(jí)任務(wù),通常采用OSUnMapTbl[256]數(shù)組[7],記錄一個(gè)字節(jié)變量所對(duì)應(yīng)從低位到高位第一次出現(xiàn)為1的位置,此時(shí)最高優(yōu)先級(jí)通過(guò)以下三步即可找到:
y=OSUnMapTbl[OSEventGrp]
(1)
x=OSUnMapTbl[OSEventTbl[y]]
(2)
prio=(y<<3)+x
(3)
當(dāng)需要尋找次優(yōu)先級(jí)時(shí),可以將OSEventTbl[y]中最高優(yōu)先級(jí)所在位賦0,繼續(xù)尋找更低一級(jí)優(yōu)先級(jí),從而遍歷所有就緒任務(wù)。
最早截止時(shí)間優(yōu)先(EDF)算法是一種經(jīng)典的實(shí)時(shí)調(diào)度算法。在每一個(gè)新的就緒狀態(tài)到來(lái)時(shí),調(diào)度器都將從那些已就緒或者當(dāng)前沒(méi)有完全處理完畢的任務(wù)中根據(jù)最早截止時(shí)間排出新的執(zhí)行次序,并且按照新任務(wù)的截止時(shí)間的先后決定是否調(diào)度該新任務(wù)。為了便于清晰說(shuō)明,圖4給出了最早截止時(shí)間優(yōu)先調(diào)度的一個(gè)示例。
圖4 最早截止時(shí)間優(yōu)先調(diào)度
式中任務(wù)P1的周期為t=25,任務(wù)P2周期t=35。整個(gè)執(zhí)行過(guò)程如下:
1)任務(wù)P1和P2處于就緒態(tài)。由于P1的截止時(shí)間最早,即t=50,因此它的初始化優(yōu)先級(jí)要比任務(wù)P2高而開(kāi)始執(zhí)行,直至任務(wù)P1執(zhí)行完成一個(gè)周期 (t=25),此時(shí)P2開(kāi)始執(zhí)行;
2)當(dāng)P2執(zhí)行完一個(gè)周期,此時(shí)任務(wù)P1就緒,并給定截止時(shí)間t=100,優(yōu)先于其給定的任務(wù)2的截止時(shí)間,P1開(kāi)始執(zhí)行,直至任務(wù)P1結(jié)束(t=85),此時(shí),任務(wù)P2開(kāi)始運(yùn)行;
3)在時(shí)刻t=100處,任務(wù)P1處于就緒態(tài),由于其截止時(shí)間(t=150)要比任務(wù)P2的截止時(shí)間(t=160)要早,因此任務(wù)P2被任務(wù)P1搶占,當(dāng)其完成后任務(wù)切換,任務(wù)P2恢復(fù)執(zhí)行,直至任務(wù)P2完成。
通常,在嵌入式操作系統(tǒng)中,最高優(yōu)先級(jí)調(diào)度屬于固定優(yōu)先級(jí)調(diào)度算法,而EDF算法則屬于動(dòng)態(tài)優(yōu)先級(jí)調(diào)度算法,為了能夠提高任務(wù)調(diào)度的實(shí)時(shí)性和可靠性,文中融合了最高優(yōu)先級(jí)調(diào)度和最早時(shí)間截止調(diào)度方法。針對(duì)周期性任務(wù),采用最高優(yōu)先級(jí)調(diào)度,而對(duì)于事件觸發(fā)任務(wù),采用了最早截止時(shí)間調(diào)度機(jī)制,并通過(guò)優(yōu)先級(jí)的換算,集中采用最高優(yōu)先級(jí)查找,執(zhí)行最高優(yōu)先級(jí)任務(wù)。此外,為了避免出現(xiàn)因任務(wù)低優(yōu)先級(jí)而得不到執(zhí)行等問(wèn)題,文中引入了任務(wù)補(bǔ)償調(diào)度方法,使得整個(gè)系統(tǒng)能夠穩(wěn)定、可靠地運(yùn)行。
在事件觸發(fā)任務(wù)中,引入一個(gè)衡量?jī)?yōu)先級(jí)的度量值Pi,其包括任務(wù)價(jià)值Vi和截止時(shí)間Ci兩個(gè)重要度參數(shù),其計(jì)算如下:
Pi=ceil(kvVi+kcCi-0.5)
(4)
式中kv、kc分別表示任務(wù)價(jià)值和運(yùn)行時(shí)間的權(quán)重,滿(mǎn)足kv+kc=1;ceil(·)表示向上取整。
式(4)中,將任務(wù)價(jià)值Vi設(shè)置為用戶(hù)初始化任務(wù)時(shí)設(shè)置的靜態(tài)優(yōu)先級(jí),表示當(dāng)任務(wù)優(yōu)先級(jí)值越小,任務(wù)價(jià)值越大。而截止時(shí)間Ci與當(dāng)前運(yùn)行時(shí)刻t和任務(wù)截止運(yùn)行時(shí)間有關(guān)。同樣地,截止時(shí)間越短,則任務(wù)優(yōu)先級(jí)越高。為了描述其優(yōu)先級(jí)動(dòng)態(tài)變化特性,Ci直接采用距離截止時(shí)間遠(yuǎn)近來(lái)度量,即:
Ci=Pmax×(Ti-t)/Ti
(5)
式中Ti表示任務(wù)i的截止時(shí)刻;Pmax為靜態(tài)優(yōu)先級(jí)最大值。當(dāng)t接近Ti時(shí),Ci值越小,式(4)計(jì)算得到的Pi越小,表示優(yōu)先級(jí)越高。當(dāng)t超過(guò)Ti時(shí),此時(shí)引入補(bǔ)償調(diào)度機(jī)制,確保當(dāng)前任務(wù)能夠獲得執(zhí)行。
進(jìn)一步地,kv、kc這兩個(gè)靜態(tài)參數(shù)決定了任務(wù)的優(yōu)先級(jí)。由于Vi在設(shè)計(jì)中采用靜態(tài)優(yōu)先級(jí)值,因此,式(4)中優(yōu)先級(jí)值的變化主要由Ci決定,而系數(shù)kc則將控制優(yōu)先級(jí)調(diào)節(jié)范圍。顯然,當(dāng)kc=0時(shí),此時(shí)得到的優(yōu)先級(jí)即為用戶(hù)設(shè)置的靜態(tài)優(yōu)先級(jí);而當(dāng)kc逐漸增大,任務(wù)優(yōu)先級(jí)則逐步由最早截止時(shí)間優(yōu)先級(jí)決定。因此,該權(quán)重參數(shù)需要根據(jù)實(shí)際應(yīng)用具體設(shè)置。另外,需要注意的是,當(dāng)計(jì)算得到的任務(wù)優(yōu)先級(jí)存在相同情況,采用時(shí)間片輪轉(zhuǎn)的方式進(jìn)行調(diào)度。
隨著系統(tǒng)中任務(wù)的執(zhí)行,當(dāng)高優(yōu)先級(jí)任務(wù)處于就緒隊(duì)列時(shí)其總能夠得到執(zhí)行,而低優(yōu)先級(jí)任務(wù)則有可能因此得不到調(diào)度。為此,文中引入任務(wù)補(bǔ)償調(diào)度方法。其基本思想是在任務(wù)中設(shè)置截止運(yùn)行時(shí)間作為一個(gè)補(bǔ)償調(diào)度周期,即任務(wù)在進(jìn)入就緒態(tài)后就開(kāi)始啟動(dòng)補(bǔ)償計(jì)時(shí),如果在設(shè)定的截止運(yùn)行時(shí)間前任務(wù)被執(zhí)行了,則重新補(bǔ)償計(jì)時(shí);如果在截止運(yùn)行時(shí)間之后還未執(zhí)行,則進(jìn)入補(bǔ)償隊(duì)列,并啟動(dòng)任務(wù)補(bǔ)償調(diào)度,以確保低優(yōu)先級(jí)任務(wù)響應(yīng)的實(shí)時(shí)性。
圖5為整個(gè)補(bǔ)償調(diào)度機(jī)制的流程圖。當(dāng)任務(wù)進(jìn)入就緒隊(duì)列后,通過(guò)與其內(nèi)在的截止運(yùn)行時(shí)間進(jìn)行比較,當(dāng)超過(guò)了截止運(yùn)行時(shí)間,則修改該任務(wù)的截止時(shí)間為最先,并啟動(dòng)補(bǔ)償調(diào)度時(shí)間計(jì)數(shù)器。在補(bǔ)償調(diào)度過(guò)程中如果出現(xiàn)補(bǔ)償調(diào)度時(shí)間片已經(jīng)用完,但補(bǔ)償調(diào)度任務(wù)還未執(zhí)行完成時(shí),中止該任務(wù),并將其任務(wù)恢復(fù)初始截止運(yùn)行時(shí)間并轉(zhuǎn)入就緒態(tài);如果任務(wù)在補(bǔ)償調(diào)度時(shí)間內(nèi)執(zhí)行完成時(shí),任務(wù)恢復(fù)初始截止運(yùn)行時(shí)間并進(jìn)入下一輪調(diào)度。
圖5 補(bǔ)償算法執(zhí)行流程
另外,在任務(wù)補(bǔ)償調(diào)度過(guò)程中,補(bǔ)償調(diào)度時(shí)間的設(shè)置對(duì)于被中斷的當(dāng)前任務(wù)的正常運(yùn)行是存在一定影響。通常設(shè)置補(bǔ)償調(diào)度時(shí)間短,執(zhí)行完一次任務(wù)可能需要被執(zhí)行多次補(bǔ)償調(diào)度,而任務(wù)補(bǔ)償調(diào)度時(shí)間較長(zhǎng),可能會(huì)影響當(dāng)前被中斷的任務(wù)的實(shí)時(shí)響應(yīng)。因此,這個(gè)補(bǔ)償時(shí)間通常相對(duì)比較短,在實(shí)際應(yīng)用中,需要用戶(hù)根據(jù)實(shí)際需要來(lái)設(shè)置。
為了驗(yàn)證文中的任務(wù)調(diào)度方法,文中針對(duì)表2中的任務(wù)集,并根據(jù)智能物聯(lián)電能表實(shí)際應(yīng)用開(kāi)發(fā),給出了具體任務(wù)集及其參數(shù),如表3所示。其中設(shè)置優(yōu)先級(jí)最大值Pmax=15,周期性任務(wù)和事件觸發(fā)任務(wù)優(yōu)先級(jí)權(quán)重kv,kc均設(shè)置為0.5。為了不頻繁發(fā)生調(diào)度,更改動(dòng)態(tài)優(yōu)先級(jí)的步長(zhǎng)t設(shè)置為50 ms。此外,設(shè)置任務(wù)補(bǔ)償調(diào)度時(shí)間為50 ms,對(duì)于相同優(yōu)先級(jí)任務(wù),時(shí)間片輪轉(zhuǎn)設(shè)置為50 ms,且忽略在任務(wù)切換中MCU的消耗。
表3 智能物聯(lián)電能表任務(wù)集及其參數(shù)
圖6給出了周期性任務(wù)t1~t6按最高優(yōu)先級(jí)調(diào)度的執(zhí)行時(shí)序圖,不難發(fā)現(xiàn),在沒(méi)有事件觸發(fā)任務(wù)情況下,這些任務(wù)都能夠得到有效執(zhí)行。然而,當(dāng)執(zhí)行完這些周期任務(wù)時(shí),在周期1 s內(nèi)空閑時(shí)間為90 ms,這對(duì)于后續(xù)執(zhí)行事件觸發(fā)的任務(wù)而言,會(huì)影響任務(wù)調(diào)度的實(shí)時(shí)性,如圖7所示,在事件觸發(fā)下,任務(wù)t5和t6需要在下一個(gè)周期內(nèi)獲得MCU。
圖6 任務(wù)執(zhí)行過(guò)程時(shí)序圖
圖7 事件觸發(fā)任務(wù)執(zhí)行時(shí)序圖
圖7給出了文中方法在事件觸發(fā)任務(wù)t7發(fā)生下任務(wù)運(yùn)行的時(shí)序圖,其中t=300 ms時(shí)刻任務(wù)t7就緒。由式(4)計(jì)算可得,當(dāng)前任務(wù)動(dòng)態(tài)優(yōu)先級(jí)為10,因當(dāng)前執(zhí)行的任務(wù)t4優(yōu)先級(jí)為8,高于任務(wù)t7優(yōu)先級(jí),故t4繼續(xù)執(zhí)行;當(dāng)t=450 ms時(shí),t4執(zhí)行完成,此時(shí)t7優(yōu)先級(jí)為8,高于任務(wù)t3優(yōu)先級(jí)而開(kāi)始執(zhí)行;當(dāng)執(zhí)行到500 ms時(shí),因任務(wù)t5和任務(wù)t6截止時(shí)間到,盡管當(dāng)前任務(wù)1已經(jīng)就緒,但是任務(wù)t5和任務(wù)t6會(huì)進(jìn)入補(bǔ)償調(diào)度隊(duì)列,進(jìn)而執(zhí)行補(bǔ)償調(diào)度。執(zhí)行完成后,任務(wù)1因優(yōu)先級(jí)高而開(kāi)始執(zhí)行。由于任務(wù)t7屬于事件觸發(fā)任務(wù),因此其優(yōu)先級(jí)是每隔50 ms動(dòng)態(tài)變化的,當(dāng)執(zhí)行到t=650 ms時(shí),此時(shí)任務(wù)t7的優(yōu)先級(jí)為3,高于任務(wù)t1的優(yōu)先級(jí)4,此時(shí)任務(wù)t7搶占任務(wù)t1而執(zhí)行。相比于圖7所示的任務(wù)調(diào)度效果,文中方法(見(jiàn)圖8)在事件觸發(fā)任務(wù)觸發(fā)下,各個(gè)任務(wù)都能夠在1 000 ms周期內(nèi)都能獲得運(yùn)行。
圖8 文中方法任務(wù)執(zhí)行序圖
為了能夠更好地驗(yàn)證文中方法的先進(jìn)性,采用了與最高優(yōu)先級(jí)方法和最早截止事件算法進(jìn)行了對(duì)比,其結(jié)果如圖9和圖10所示。從圖中可以看出,在最高優(yōu)先級(jí)調(diào)度過(guò)程中,由于事件任務(wù)觸發(fā),使得低優(yōu)先級(jí)的任務(wù)5和任務(wù)6在其第一個(gè)周期內(nèi)并沒(méi)有得到調(diào)度運(yùn)行。最早截止時(shí)間調(diào)度方法,由于任務(wù)集中截止時(shí)間存在相同,為此采用50 ms時(shí)間片輪轉(zhuǎn)方法進(jìn)行調(diào)度。從測(cè)試結(jié)果中可以看出,盡管最早截止時(shí)間能提升處理器的利用率,但是最早截止時(shí)間方法并沒(méi)有將任務(wù)的緊急程度體現(xiàn)到優(yōu)先級(jí)中,使得顯示、指示燈等任務(wù)執(zhí)行優(yōu)先于比其重要度高的優(yōu)先級(jí)。另外,由于截止時(shí)間設(shè)置的不合理,存在任務(wù)切換頻繁問(wèn)題,這在一定程度上會(huì)耗費(fèi)MCU資源,影響執(zhí)行效率。而文中在任務(wù)的優(yōu)先級(jí)分配上,針對(duì)事件觸發(fā)型任務(wù),采用動(dòng)態(tài)優(yōu)先級(jí)和靜態(tài)優(yōu)先級(jí)相結(jié)合的方法,為事件任務(wù)響應(yīng)的實(shí)時(shí)性提供了可行。其次,對(duì)低優(yōu)先級(jí)任務(wù)調(diào)度,任務(wù)時(shí)間補(bǔ)償機(jī)制也為任務(wù)的實(shí)時(shí)響應(yīng)奠定了基礎(chǔ)。
圖9 最高優(yōu)先級(jí)任務(wù)執(zhí)行序圖
圖10 最早時(shí)間截止任務(wù)執(zhí)行序圖
文中針對(duì)智能物聯(lián)電能表嵌入式操作系統(tǒng)開(kāi)發(fā),提出了一種微內(nèi)核動(dòng)態(tài)優(yōu)先級(jí)任務(wù)調(diào)度方法。該方法根據(jù)電能表任務(wù)類(lèi)別的不同,構(gòu)建了一種基于周期性任務(wù)最高優(yōu)先級(jí)和事件任務(wù)動(dòng)態(tài)優(yōu)先級(jí)調(diào)度策略以及動(dòng)態(tài)優(yōu)先級(jí)分配方法。同時(shí),為了避免低優(yōu)先級(jí)在截止運(yùn)行時(shí)間范圍內(nèi)未獲得調(diào)度,采用一種時(shí)間補(bǔ)償任務(wù)調(diào)度方法,提升任務(wù)的實(shí)時(shí)響應(yīng)能力。最后,通過(guò)案例仿真分析驗(yàn)證了文中方法的有效性。在下一步工作中,將針對(duì)新一代智能電能表的實(shí)際應(yīng)用場(chǎng)景,進(jìn)一步優(yōu)化設(shè)計(jì)任務(wù)調(diào)度,盡可能降低任務(wù)調(diào)度的頻繁性。同時(shí),對(duì)于任務(wù)補(bǔ)償調(diào)度時(shí)間進(jìn)行測(cè)試,使得整個(gè)智能物聯(lián)電能表能夠具有高響應(yīng)能力、高穩(wěn)定性的任務(wù)調(diào)度性能,進(jìn)而為新一代智能電能表實(shí)時(shí)任務(wù)處理應(yīng)用奠定基礎(chǔ)。