專利名稱:編譯器和操作系統(tǒng)內(nèi)核協(xié)同的節(jié)能方法
技術(shù)領(lǐng)域:
本發(fā)明涉及基于嵌入式系統(tǒng)軟件節(jié)能技術(shù),特別是涉及一種操作系統(tǒng)與編譯器協(xié)同工作節(jié)能的方法。
背景技術(shù):
在便攜式嵌入式設(shè)備電源管理領(lǐng)域,目前的困難在于既要滿足便攜式終端對(duì)電源供電的要求,又要做到占用空間小、重量輕和供電時(shí)間更長。下一代消費(fèi)類電子產(chǎn)品的電源解決方案重點(diǎn)應(yīng)該集中在硬件和軟件兩方面技術(shù),包括(1)在小巧外形尺寸下,如何實(shí)現(xiàn)所需電源性能的工藝和技術(shù),涉及熱管理、降噪、電池管理和功能整合等技術(shù);(2)動(dòng)態(tài)功率管理技術(shù),它取決于處理器性能、軟件、中間件以及用戶對(duì)更換電池的時(shí)間間隔等要求;(3)動(dòng)態(tài)功率管理技術(shù)對(duì)操作系統(tǒng)內(nèi)核和驅(qū)動(dòng)器,以及應(yīng)用編程接口(API)對(duì)驅(qū)動(dòng)器、中間件和應(yīng)用本身的影響。
現(xiàn)在嵌入式設(shè)備的功能變得越來越強(qiáng)大,功能也越來越豐富。隨著嵌入式設(shè)備功能越來越多,用戶對(duì)嵌入式設(shè)備電池的能量需求也越來越高,現(xiàn)有的鋰離子電池已經(jīng)越來越難以滿足消費(fèi)者對(duì)正常使用時(shí)間的要求。對(duì)此,業(yè)界主要采取兩種方法,一是開發(fā)具備更高能量密度的新型電池技術(shù),如燃料電池,在可以預(yù)見的5年內(nèi),電池技術(shù)不可能有很大的突破;二是在電池的能量轉(zhuǎn)換效率和節(jié)能方面下功夫。在目前新的高能電池技術(shù)(如燃料電池)仍不成熟的情況下,下一代手持設(shè)備的電源管理只能從提高電源利用率和降低功耗這二個(gè)方面著手。
如何延長電池的使用壽命,以及盡量減少電池能量的消耗已經(jīng)成為嵌入式領(lǐng)域的一個(gè)研究熱點(diǎn)?,F(xiàn)在主要集中在硬件設(shè)計(jì)和軟件優(yōu)化兩方面。其中軟件優(yōu)化方面現(xiàn)在主要包括系統(tǒng)軟件和應(yīng)用軟件兩方面。系統(tǒng)軟件主要集中在編譯器和操作系統(tǒng)內(nèi)核兩塊。
在操作系統(tǒng)領(lǐng)域,現(xiàn)在主要的電源管理方法是利用操作系統(tǒng)內(nèi)核,動(dòng)態(tài)的調(diào)整系統(tǒng)處理器和總線的頻率,降低系統(tǒng)的整體能耗。而且系統(tǒng)可以通過動(dòng)態(tài)頻率指令改變系統(tǒng)狀態(tài),是系統(tǒng)處于低功耗狀態(tài),以達(dá)到節(jié)能的目的。在編譯器方面,現(xiàn)在主要通過編譯器在編譯應(yīng)用程序階段,對(duì)代碼進(jìn)行優(yōu)化,使代碼盡量的緊湊以及訪問設(shè)備盡量集中,以達(dá)到節(jié)能的目的。
上面的方法中,都是操作系統(tǒng)內(nèi)核和編譯器單獨(dú)工作來完成系統(tǒng)的節(jié)能。操作系統(tǒng)可以很好的管理整個(gè)系統(tǒng)的能耗,但是對(duì)特定的應(yīng)用不了解,不能針對(duì)特定的應(yīng)用采用貼切的方法節(jié)能;編譯器可以針對(duì)特定的應(yīng)用采用符合應(yīng)用需求的節(jié)能方法,但是這樣容易引起整個(gè)系統(tǒng)的不穩(wěn)定。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種編譯器和操作系統(tǒng)內(nèi)核協(xié)同的節(jié)能方法。
本發(fā)明解決其技術(shù)問題采用的技術(shù)方案如下1)程序靜態(tài)分段編譯器在程序編譯階段完成程序的靜態(tài)分段,編譯器在對(duì)程序P的源代碼進(jìn)行掃描的過程中分段;編譯器根據(jù)幾條原則將程序P分為m個(gè)靜態(tài)狀態(tài)段,第一條原則所有的函數(shù)調(diào)用都是一個(gè)獨(dú)立的段,第二條原則所有的循環(huán)都是一個(gè)獨(dú)立的段;2)插入程序與內(nèi)核通訊指令程序的分段信息必須傳給操作系統(tǒng)內(nèi)核,編譯器在編譯過程中在每個(gè)段的前后都插入一條與內(nèi)核通訊的指令,這條指令主要的作用是通知操作系統(tǒng)內(nèi)核,現(xiàn)在程序進(jìn)入一個(gè)新的段,這樣操作系統(tǒng)內(nèi)核就會(huì)建立新的數(shù)據(jù)結(jié)構(gòu)管理這個(gè)段;3)程序運(yùn)行狀態(tài)段管理通過編譯器插入的通訊指令,操作系統(tǒng)內(nèi)核就能建立起這個(gè)程序的管理框架;每個(gè)程序被分為很多段,操作系統(tǒng)內(nèi)核將程序每個(gè)段的運(yùn)行信息保存在一個(gè)數(shù)據(jù)結(jié)構(gòu)中,并將這個(gè)程序所有的段信息用鏈表鏈在一起;4)動(dòng)態(tài)分段和動(dòng)態(tài)頻率管理操作系統(tǒng)內(nèi)核根據(jù)快速緩存失效數(shù)動(dòng)態(tài)的調(diào)整系統(tǒng)處理器的運(yùn)行頻率,使處理器處理數(shù)據(jù)的能力和數(shù)據(jù)傳輸?shù)哪芰ο嗥ヅ?;操作系統(tǒng)內(nèi)核將根據(jù)程序某個(gè)段在運(yùn)行時(shí)快速緩存失效數(shù)的變化,決定是否將這個(gè)段細(xì)分;當(dāng)單位時(shí)間內(nèi)快速緩存失效數(shù)不在同一個(gè)級(jí)別中,操作系統(tǒng)內(nèi)核將對(duì)這個(gè)段進(jìn)行細(xì)分,分為兩個(gè)不同的段,并將新的段信息保存起來;程序在運(yùn)行過程中,操作系統(tǒng)內(nèi)核根據(jù)運(yùn)行時(shí)不同運(yùn)行段單位時(shí)間內(nèi)的快速緩存失效數(shù)和運(yùn)行指令數(shù),利用動(dòng)態(tài)調(diào)頻技術(shù)調(diào)整系統(tǒng)的頻率,使處理器的空閑時(shí)間減少,減少處理器浪費(fèi)的能耗,達(dá)到節(jié)能的目的。
本發(fā)明與背景技術(shù)相比,具有的有益的效果是本發(fā)明將編譯器和操作系統(tǒng)的工作相結(jié)合,利用操作系統(tǒng)對(duì)整個(gè)系統(tǒng)的控制能力和編譯器對(duì)應(yīng)用程序的獨(dú)特了解進(jìn)行節(jié)能。編譯器在編譯階段根據(jù)程序的靜態(tài)屬性將程序分成不同的狀態(tài)段,結(jié)合在運(yùn)行過程中通過內(nèi)核收集運(yùn)行時(shí)信息將程序動(dòng)態(tài)分段,然后通過動(dòng)態(tài)頻率管理技術(shù)對(duì)不同狀態(tài)段,設(shè)置相應(yīng)的運(yùn)行頻率進(jìn)行節(jié)能。
(1)動(dòng)態(tài)性。應(yīng)用程序在系統(tǒng)中運(yùn)行時(shí),操作系統(tǒng)動(dòng)態(tài)收集程序運(yùn)行信息,并對(duì)收集的信息進(jìn)行分析。然后根據(jù)信息分析的結(jié)果,動(dòng)態(tài)調(diào)整系統(tǒng)的頻率并對(duì)編譯器原來的分段進(jìn)行動(dòng)態(tài)調(diào)整。
(2)穩(wěn)定性。操作系統(tǒng)將動(dòng)態(tài)調(diào)整系統(tǒng)狀態(tài)的權(quán)利掌握在自己手中,而不是下放給應(yīng)用程序,這樣系統(tǒng)就能在兼顧全局的情況下動(dòng)態(tài)調(diào)整系統(tǒng)的狀態(tài),保證系統(tǒng)的穩(wěn)定。
(3)實(shí)用性。原先手持設(shè)備程序員在編寫應(yīng)用程序的過程中,必須時(shí)刻考慮代碼的組織,使應(yīng)用程序在手持設(shè)備上運(yùn)行能夠盡量少消耗能量。利用編譯器和內(nèi)核協(xié)調(diào)的節(jié)能方法,就可以在編譯和運(yùn)行階段幫用戶解決能耗管理的問題。在經(jīng)過反復(fù)的認(rèn)證,這個(gè)方法可以很好的減少程序員的工作量,十分實(shí)用。
圖1是要被編譯器編譯的程序P的源代碼;圖2是被節(jié)能編譯器編譯后帶有分段和內(nèi)核通訊信息的代碼;圖3是內(nèi)核對(duì)程序運(yùn)行時(shí)的管理數(shù)據(jù)結(jié)構(gòu);圖4是在英特爾公司Xscale體系結(jié)構(gòu)下面快速緩存失效數(shù)的級(jí)別劃分;圖5是本發(fā)明的流程圖。
具體實(shí)施例方式
在實(shí)施基于嵌入式系統(tǒng)的軟件節(jié)能方法時(shí),操作系統(tǒng)和編譯器被廣泛利用。
編譯器和操作系統(tǒng)內(nèi)核協(xié)同的節(jié)能方法具體實(shí)現(xiàn)流程如下。
第一步程序靜態(tài)分段。
編譯器在程序編譯階段完成程序的靜態(tài)分段,編譯器在對(duì)被編譯器編譯的程序P的源代碼如圖1所示,進(jìn)行掃描的過程中分段;編譯器在對(duì)代碼的編譯過程中,總共分為6步,前面3步對(duì)最后生成代碼的優(yōu)化基本沒有影響,編譯器和操作系統(tǒng)內(nèi)核協(xié)同的節(jié)能方法修改了編譯器的第四步,在對(duì)代碼的優(yōu)化過程中將代碼分段。
編譯器根據(jù)幾條原則將程序P分為m個(gè)靜態(tài)狀態(tài)段,第一條原則所有的函數(shù)調(diào)用都是一個(gè)獨(dú)立的段,第二條原則所有的循環(huán)都是一個(gè)獨(dú)立的段。之所以使用這兩個(gè)分段原則是考慮到局部性原則,因?yàn)橄噜彅?shù)據(jù)的訪問基本都是集中在同一個(gè)循環(huán)中或者同一個(gè)函數(shù)中。靜態(tài)分段的過程有以下幾步1、編譯器對(duì)程序源代碼進(jìn)行掃描;2、判斷是否是循環(huán)開始。如果是循環(huán)開始分段,否則繼續(xù);3、判斷是否是函數(shù)調(diào)用,是的話開始分段,否則繼續(xù);4、判斷是否分段結(jié)束,是結(jié)束靜態(tài)分段,否則繼續(xù)掃描程序。
第二步插入程序與內(nèi)核通訊指令。
程序的分段信息必須傳給操作系統(tǒng)內(nèi)核,才能和操作系統(tǒng)進(jìn)行協(xié)同;經(jīng)過第一步,代碼已經(jīng)被化分為各個(gè)段,編譯器在找到一個(gè)段后在這個(gè)段的前后都插入一條與內(nèi)核通訊的指令。這些內(nèi)核通訊的指令都是一些操作系統(tǒng)內(nèi)核提供的應(yīng)用程序接口。
Entering Region這條指令主要的作用是通知操作系統(tǒng)內(nèi)核,現(xiàn)在程序進(jìn)入一個(gè)新的段,這個(gè)段的名字是Region,其中region只是一個(gè)字符串,可以按照自己的需要起不同的名字。Exiting Region這條指令的意思是和前面那條意思正好對(duì)應(yīng),他是告訴操作系統(tǒng)內(nèi)核,程序已經(jīng)從名字為region這個(gè)段退出。當(dāng)操作系統(tǒng)收到Entering Region這條指令后,操作系統(tǒng)內(nèi)核就會(huì)建立新的數(shù)據(jù)結(jié)構(gòu)管理這個(gè)段。
經(jīng)過分段和插入內(nèi)核通訊指令后,上面應(yīng)用程序的代碼P就被修改為帶有分段和內(nèi)核通訊信息的代碼,如圖2所示。
第三步程序運(yùn)行狀態(tài)段管理。
通過編譯器插入的通訊指令,操作系統(tǒng)內(nèi)核就能建立起這個(gè)程序的管理框架;每個(gè)程序被分為很多段,操作系統(tǒng)內(nèi)核將程序每個(gè)段的運(yùn)行信息保存在一個(gè)數(shù)據(jù)結(jié)構(gòu)中,并將這個(gè)程序所有的段信息用鏈表鏈在一起,內(nèi)核對(duì)程序運(yùn)行時(shí)的管理數(shù)據(jù)結(jié)構(gòu)如圖3所示。操作系統(tǒng)內(nèi)核對(duì)程序運(yùn)行狀態(tài)段管理可以分為這么幾個(gè)步驟1、建立程序狀態(tài)數(shù)據(jù)結(jié)構(gòu)。當(dāng)程序被運(yùn)行起來時(shí),操作系統(tǒng)內(nèi)核會(huì)建立一個(gè)processCtrl數(shù)據(jù)結(jié)構(gòu)用來管理這個(gè)運(yùn)行的進(jìn)程,包括自己的進(jìn)程號(hào),以及這個(gè)進(jìn)程被分為多少個(gè)段,其中在processCtrl還有一個(gè)重要的數(shù)據(jù)就是一個(gè)列表結(jié)構(gòu)list<RegionCtrl>,用來將這個(gè)進(jìn)程的所有段的信息鏈在一起。
2、建立段管理數(shù)據(jù)結(jié)構(gòu)。當(dāng)程序進(jìn)入一個(gè)段是,操作系統(tǒng)內(nèi)核建立一個(gè)regionCtrl數(shù)據(jù)結(jié)構(gòu)用來管理程序中的這個(gè)段。當(dāng)應(yīng)用程序通過第二步中添加的通訊指令通知系統(tǒng)內(nèi)核程序進(jìn)入一個(gè)新的段時(shí),系統(tǒng)會(huì)自動(dòng)建立一個(gè)regionCtrl的數(shù)據(jù)結(jié)構(gòu),并把它掛載相應(yīng)的processCtrl上面。regionCtrl主要用來記錄這個(gè)段運(yùn)行時(shí)的信息,包括快速緩存的失效數(shù)以及單位時(shí)間內(nèi)的指令數(shù)等。每個(gè)regionCtrl都包含幾個(gè)regionHistory,每個(gè)regionHistory都記錄了這個(gè)程序運(yùn)行的歷史情況。
3、性能監(jiān)視。程序在運(yùn)行的時(shí)候,系統(tǒng)通過處理器上的運(yùn)行狀態(tài)監(jiān)視模塊,獲得程序在單位時(shí)間里運(yùn)行的指令數(shù)和快速緩存失效數(shù),單位時(shí)間運(yùn)行的指令數(shù)代表了處理器的當(dāng)前狀態(tài),快速緩存失效數(shù)代表了程序訪問數(shù)據(jù)的能力和負(fù)荷,這兩者的協(xié)調(diào)工作對(duì)系統(tǒng)的能耗影響是很大的,操作系統(tǒng)內(nèi)核根據(jù)運(yùn)行的體系結(jié)構(gòu)將快速緩存失效數(shù)的范圍分為不同的級(jí)別。在英特爾公司Xscale體系結(jié)構(gòu)下面快速緩存失效數(shù)的級(jí)別劃分如圖4所示。
4、將性能信息保存。操作系統(tǒng)內(nèi)核將采集到的程序運(yùn)行信息保存到上面1、2兩步建立的數(shù)據(jù)結(jié)構(gòu)中,為第四步工作提供數(shù)據(jù)。
第四步動(dòng)態(tài)分段和動(dòng)態(tài)頻率管理。
操作系統(tǒng)內(nèi)核根據(jù)快速緩存失效數(shù)動(dòng)態(tài)的調(diào)整系統(tǒng)處理器的運(yùn)行頻率,使處理器處理數(shù)據(jù)的能力和數(shù)據(jù)傳輸?shù)哪芰ο嗥ヅ洹?br>
操作系統(tǒng)內(nèi)核將根據(jù)程序某個(gè)段在運(yùn)行時(shí)快速緩存失效數(shù)的變化,決定是否將這個(gè)段細(xì)分;當(dāng)單位時(shí)間內(nèi)快速緩存失效數(shù)不在同一個(gè)級(jí)別中,操作系統(tǒng)內(nèi)核將對(duì)這個(gè)段進(jìn)行細(xì)分,分為兩個(gè)不同的段,并將新的段信息保存起來,這個(gè)過程可以分為以下幾步1、確定是否分段;2、如果要分段的話建立一個(gè)regionCtrl的數(shù)據(jù)結(jié)構(gòu);3、更新新舊兩個(gè)段的信息。
動(dòng)態(tài)調(diào)頻技術(shù)可以在處理器運(yùn)行過程中調(diào)整系統(tǒng)的處理器頻率,這樣當(dāng)處理器空閑時(shí)間較長時(shí),就可以調(diào)整處理器速度到一個(gè)比較低的值,降低處理器消耗的能量。程序在運(yùn)行過程中,操作系統(tǒng)內(nèi)核根據(jù)運(yùn)行時(shí)不同運(yùn)行段單位時(shí)間內(nèi)的快速緩存失效數(shù)和運(yùn)行指令數(shù),利用動(dòng)態(tài)調(diào)頻技術(shù)調(diào)整系統(tǒng)的頻率,使處理器的空閑時(shí)間減少,減少處理器浪費(fèi)的能耗,達(dá)到節(jié)能的目的。這個(gè)過程主要分為一下幾步1、當(dāng)單位時(shí)間過去后,系統(tǒng)喚醒調(diào)頻模塊;2、根據(jù)運(yùn)行狀態(tài)信息,判斷是否調(diào)頻;3、如果要求調(diào)頻,根據(jù)計(jì)算結(jié)果調(diào)頻;4、新建一個(gè)regionHistory結(jié)構(gòu),并將性能信息保存到regionHisorty。
整個(gè)發(fā)明的工作流程圖如圖5所示。
權(quán)利要求
1.一種編譯器和操作系統(tǒng)內(nèi)核協(xié)同的節(jié)能方法,其特征在于1)程序靜態(tài)分段編譯器在程序編譯階段完成程序的靜態(tài)分段,編譯器在對(duì)程序P的源代碼進(jìn)行掃描的過程中分段;編譯器根據(jù)幾條原則將程序P分為m個(gè)靜態(tài)狀態(tài)段,第一條原則所有的函數(shù)調(diào)用都是一個(gè)獨(dú)立的段,第二條原則所有的循環(huán)都是一個(gè)獨(dú)立的段;2)插入程序與內(nèi)核通訊指令程序的分段信息必須傳給操作系統(tǒng)內(nèi)核,編譯器在編譯過程中在每個(gè)段的前后都插入一條與內(nèi)核通訊的指令,這條指令主要的作用是通知操作系統(tǒng)內(nèi)核,現(xiàn)在程序進(jìn)入一個(gè)新的段,這樣操作系統(tǒng)內(nèi)核就會(huì)建立新的數(shù)據(jù)結(jié)構(gòu)管理這個(gè)段;3)程序運(yùn)行狀態(tài)段管理通過編譯器插入的通訊指令,操作系統(tǒng)內(nèi)核就能建立起這個(gè)程序的管理框架;每個(gè)程序被分為很多段,操作系統(tǒng)內(nèi)核將程序每個(gè)段的運(yùn)行信息保存在一個(gè)數(shù)據(jù)結(jié)構(gòu)中,并將這個(gè)程序所有的段信息用鏈表鏈在一起;4)動(dòng)態(tài)分段和動(dòng)態(tài)頻率管理操作系統(tǒng)內(nèi)核根據(jù)快速緩存失效數(shù)動(dòng)態(tài)的調(diào)整系統(tǒng)處理器的運(yùn)行頻率,使處理器處理數(shù)據(jù)的能力和數(shù)據(jù)傳輸?shù)哪芰ο嗥ヅ?;操作系統(tǒng)內(nèi)核將根據(jù)程序某個(gè)段在運(yùn)行時(shí)快速緩存失效數(shù)的變化,決定是否將這個(gè)段細(xì)分;當(dāng)單位時(shí)間內(nèi)快速緩存失效數(shù)不在同一個(gè)級(jí)別中,操作系統(tǒng)內(nèi)核將對(duì)這個(gè)段進(jìn)行細(xì)分,分為兩個(gè)不同的段,并將新的段信息保存起來;程序在運(yùn)行過程中,操作系統(tǒng)內(nèi)核根據(jù)運(yùn)行時(shí)不同運(yùn)行段單位時(shí)間內(nèi)的快速緩存失效數(shù)和運(yùn)行指令數(shù),利用動(dòng)態(tài)調(diào)頻技術(shù)調(diào)整系統(tǒng)的頻率,使處理器的空閑時(shí)間減少,減少處理器浪費(fèi)的能耗,達(dá)到節(jié)能的目的。
全文摘要
本發(fā)明公開了一種編譯器和操作系統(tǒng)內(nèi)核協(xié)同的節(jié)能方法。采用編譯器在編譯階段根據(jù)程序的靜態(tài)屬性將程序分成不同的狀態(tài)段,結(jié)合在運(yùn)行過程中通過內(nèi)核收集運(yùn)行時(shí)信息將程序動(dòng)態(tài)分段,然后通過動(dòng)態(tài)頻率管理技術(shù)對(duì)不同狀態(tài)段,設(shè)置相應(yīng)的運(yùn)行頻率進(jìn)行節(jié)能。本發(fā)明提出了一種內(nèi)核動(dòng)態(tài)加編譯器靜態(tài)對(duì)程序分段的方法,對(duì)原來的靜態(tài)分段方法進(jìn)行了改進(jìn),使得對(duì)程序的分段更加的貼近運(yùn)行時(shí)狀態(tài),能夠彌補(bǔ)靜態(tài)分段的不足,降低程序運(yùn)行時(shí)消耗的能量。
文檔編號(hào)G06F1/32GK1794175SQ20061004893
公開日2006年6月28日 申請(qǐng)日期2006年1月6日 優(yōu)先權(quán)日2006年1月6日
發(fā)明者陳天洲, 黃江偉, 梁曉, 錢杰, 吳心亮 申請(qǐng)人:浙江大學(xué)