在μC/OS―II上實(shí)現(xiàn)動(dòng)態(tài)電壓調(diào)節(jié)技術(shù)
2 DVS系統(tǒng)模型
2.1 DVS任務(wù)調(diào)度模型
由1.2可知,當(dāng)系統(tǒng)中任務(wù)之間存在松弛時(shí)間的時(shí)候,降低處理器的頻率可以縮短任務(wù)之間的松弛時(shí)間,同時(shí)由于頻率下降導(dǎo)致電壓下降,進(jìn)而可以減少處理器的能量開銷。然而,什么時(shí)候進(jìn)行DVS的調(diào)度,處理器最低運(yùn)行在哪個(gè)頻率上都需要進(jìn)一步分析,為此,需要了解每個(gè)任務(wù)的相關(guān)信息。本文用一個(gè)五元組表示一個(gè)任務(wù),τi=(Si,PTi,ETi,LETi,NPTi)。其中,Si表示第i個(gè)任務(wù)的狀態(tài),是就緒還是阻塞;PTi表示第i個(gè)任務(wù)的執(zhí)行周期;ETi表示第i個(gè)任務(wù)的執(zhí)行時(shí)間,LETi表示第i個(gè)任務(wù)在當(dāng)前周期內(nèi)完成剩余指令所需要的時(shí)間;NPTi表示第i個(gè)任務(wù)距離下一個(gè)周期任務(wù)所需的時(shí)間。
根據(jù)上述定義,系統(tǒng)處理器的利用率Uτ可以表示為:本文引用地址:http://m.butianyuan.cn/article/181415.htm
當(dāng)且僅當(dāng)Uτ1時(shí)任務(wù)集可調(diào)度,任務(wù)間存在松弛時(shí)間。這是啟用DVS功能的前提。
2.2 判斷是否需要進(jìn)行DVS調(diào)度
為了計(jì)算松弛時(shí)間存在時(shí)處理器最低可以運(yùn)行在哪個(gè)頻率上,引入“變壓因子”這個(gè)概念。假設(shè)DVS模塊被調(diào)用時(shí)所有就緒任務(wù)需要的執(zhí)行時(shí)間為TAllReady,距離下一個(gè)等待任務(wù)恢復(fù)的時(shí)間為TleastWaiting,那么定義變壓因子FlexibleRatio為:
當(dāng)FlexibleRatio>1時(shí),表示當(dāng)前就緒的任務(wù)可以在下一個(gè)任務(wù)從等待中恢復(fù)之前執(zhí)行完畢,這時(shí)可以適當(dāng)降低CPU的電壓和頻率,減慢任務(wù)的執(zhí)行速度;當(dāng)FlexibleRatio1時(shí),表示當(dāng)前就緒的任務(wù)在下一個(gè)任務(wù)恢復(fù)之前都不能執(zhí)行完畢,所以這個(gè)時(shí)候可以提高CPU的電壓和頻率,使當(dāng)前就緒的任務(wù)盡快執(zhí)行完畢,從而使下一個(gè)恢復(fù)的任務(wù)可以得到盡快的執(zhí)行;當(dāng)FlexibleRatio=1時(shí),不需要調(diào)整電壓和頻率。
2.3 計(jì)算可運(yùn)行的最低頻率
處理器的頻率廠是和完成任務(wù)需要的時(shí)間T成正比的。它們之間遵循如下關(guān)系:
假設(shè)當(dāng)前處理器的運(yùn)行頻率為fcur,完成已經(jīng)就緒任務(wù)需要的時(shí)間為Tcur,使任務(wù)集可調(diào)度的最低頻率為fnew,以及在新的頻率下完成就緒任務(wù)的時(shí)間為Tnew,則它們有如下關(guān)系:
即在某一時(shí)刻,滿足系統(tǒng)任務(wù)可調(diào)度的情況下,處理器頻率最低可以運(yùn)行在FlexibleRatio?fcur。
3 DVS在μC/OS―II上的詳細(xì)實(shí)現(xiàn)
3.1 DVS在μC/OS―II上實(shí)現(xiàn)的整體結(jié)構(gòu)
根據(jù)第2節(jié)的分析,一個(gè)完整的DVS模塊應(yīng)包括兩大部分:一部分是更新DVS任務(wù)控制信息,另外一部分是可調(diào)度的最低頻率的計(jì)算。其中,第二個(gè)部分又可以分為兩個(gè)層次,即最低頻率的計(jì)算和頻率的硬件設(shè)置部分,這樣分層之后有助于改進(jìn)后μC/OS―II的移植。DVS功能在μC/0S―II的實(shí)現(xiàn)總體結(jié)構(gòu)如圖3所示,下面詳細(xì)描述各個(gè)部分的實(shí)現(xiàn)過程。
3.2 更新DVS任務(wù)控制信息
為了讓系統(tǒng)知道每個(gè)任務(wù)的詳細(xì)情況,實(shí)現(xiàn)過程中建立如下結(jié)構(gòu)體保存任務(wù)的信息:
該結(jié)構(gòu)體作為任務(wù)控制塊的一部分,在任務(wù)創(chuàng)建時(shí),將μC/OS―II自身預(yù)留的任務(wù)擴(kuò)展指針OSTCBExtPtr指向該結(jié)構(gòu)體。這些信息必須在每一個(gè)時(shí)鐘節(jié)拍之后都有變化,因此它們必須在每一個(gè)時(shí)鐘節(jié)拍進(jìn)行更新。更新這部分信息的代碼被放在OSTimeTickHook()函數(shù)中。
3.3 計(jì)算可運(yùn)行的最低電壓和頻率
計(jì)算可運(yùn)行的最低電壓和頻率的算法是DVS功能的核心部分。算法的基本思想是,將所有任務(wù)產(chǎn)生的松弛時(shí)間給當(dāng)前任務(wù)使用,使當(dāng)前就緒的任務(wù)集以盡量低的電壓和頻率運(yùn)行。系統(tǒng)最開始運(yùn)行在最高頻率和電壓下。該算法的偽代碼如下:
評(píng)論