專利名稱:基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及移動(dòng)通信領(lǐng)域,特別涉及一種基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法和系統(tǒng)。
背景技術(shù):
互聯(lián)網(wǎng)和移動(dòng)設(shè)備相互影響、彼此促進(jìn)的發(fā)展掀起了強(qiáng)大的移動(dòng)浪潮。以智能手機(jī)、上網(wǎng)本為代表的移動(dòng)終端在激烈的競(jìng)爭(zhēng)中迅速發(fā)展。根據(jù)中國(guó)互聯(lián)信息網(wǎng)絡(luò)中心(CNNIC)第29次互聯(lián)網(wǎng)調(diào)查報(bào)告稱,截止2011年12月底,中國(guó)共有5.13億互聯(lián)網(wǎng)用戶,其中手機(jī)上網(wǎng)用戶3.56億,占網(wǎng)民總體的近69.4%。同時(shí),以安卓(Android)系統(tǒng)為代表的移動(dòng)終端開源操作系統(tǒng)的使用比例和影響力在不斷擴(kuò)大。GARTNER公司的報(bào)告顯示,在2011年的第四季度,Android是全球使用最廣泛的智能手機(jī)操作系統(tǒng),在全球智能手機(jī)中的市場(chǎng)占有率約50%。Android系統(tǒng)開始就采用開源、開放的開發(fā)模式,受到業(yè)界和學(xué)術(shù)界的廣泛關(guān)注。自發(fā)布以來(lái),Android的版本基本保持半年一個(gè)臺(tái)階地速度發(fā)展。其平臺(tái)的開放性吸引了大量的第三方開發(fā)者進(jìn)行應(yīng)用程序開發(fā),Android Market上的應(yīng)用程序數(shù)量從2009年12月的1.6萬(wàn)迅速增長(zhǎng)到2012年上半年的50萬(wàn)。隨著近年移動(dòng)設(shè)備和相關(guān)軟件的迅速發(fā)展,移動(dòng)設(shè)備上的操作系統(tǒng)和應(yīng)用程序的復(fù)雜性、程序體積大幅提高,這也對(duì)移動(dòng)操作系統(tǒng)的優(yōu)化提出了新的需求。而現(xiàn)有移動(dòng)終端中有相當(dāng)數(shù)量的組件原用于桌面和服務(wù)器系統(tǒng),僅作少量修改移植后就用于移動(dòng)操作系統(tǒng)上。例如,Android系統(tǒng)分為四層,從上到下依次為:(一)、應(yīng)用程序。使用Java語(yǔ)言編寫,可通過(guò)Java本地接口(JNI)調(diào)用本地代碼。.(二)、應(yīng)用程序框架。使用Java、C、C++語(yǔ)言編寫,向應(yīng)用程序提供活動(dòng)管理器、窗口管理器等服務(wù)。(三)。系統(tǒng)庫(kù)和Android運(yùn)行時(shí)環(huán)境。使用C/C++以及少量匯編語(yǔ)言編寫,為應(yīng)用程序和應(yīng)用程序框架提供必要的與系統(tǒng)交互的接口。(四)、Linux內(nèi)核。操作系統(tǒng)內(nèi)核,為為Android進(jìn)行修改的Linux內(nèi)核。整個(gè)Android系統(tǒng),以Android_x86,20120215版本為例,包含2270萬(wàn)行代碼,包括C、C++、Java以及其他語(yǔ)言。除了 Linux內(nèi)核以外,系統(tǒng)中共有950萬(wàn)行本地代碼,主要為C、C++及少量匯編語(yǔ)言組成。Android系統(tǒng)基于Linux內(nèi)核,但并沒(méi)有使用其他Linux系統(tǒng)常用的GNU Iibc (為服務(wù)器、桌面Linux系統(tǒng)常用)或uClibc (為基于Linux的嵌入式系統(tǒng)常用),而是使用了專有的C庫(kù),稱為Bionic。Bionic庫(kù)的部分代碼衍生自BSD,部分專門為Android編寫,并針對(duì)Android系統(tǒng)作了優(yōu)化和精簡(jiǎn),刪除了 Android不需要的功能。優(yōu)化后的Bionic庫(kù)的代碼體積顯著減小,在x86平臺(tái)上僅有GNU Iibc的26%,uClibc的 62%。從Bionic的例子可以看出,通用的代碼在被用于特定的系統(tǒng)時(shí)會(huì)有比較大的優(yōu)化空間。據(jù)此可以推測(cè)到,Android上的其他組件也會(huì)有優(yōu)化的空間,尤其是那些原本為服務(wù)器和桌面系統(tǒng)編寫的組件。事實(shí)上,Android系統(tǒng)自身使用了一百余個(gè)外來(lái)的開源軟件代碼,既包括最底層的Linux內(nèi)核,也包括上層的WebKit瀏覽器引擎等。這些組件并非專門針對(duì)移動(dòng)操作系統(tǒng)所編寫,移植到移動(dòng)操作系統(tǒng)以后往往還存在優(yōu)化空間,但如果對(duì)它們一一進(jìn)行手工優(yōu)化將會(huì)耗費(fèi)大量人力和物力資源。由于工作量的關(guān)系,Android沒(méi)有也不可能為系統(tǒng)中的每一個(gè)組件都人工細(xì)致的優(yōu)化。因此,亟需一種自動(dòng)的系統(tǒng)優(yōu)化方案。
發(fā)明內(nèi)容
本發(fā)明旨在至少解決現(xiàn)有技術(shù)中存在的技術(shù)問(wèn)題之一。為此,本發(fā)明的一個(gè)目的在于提出一種基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法。本方法自動(dòng)化消除系統(tǒng)無(wú)用代碼,減小系統(tǒng)體積,提升了系統(tǒng)性能,方便高效,優(yōu)化效果明顯。本發(fā)明的第二個(gè)目的在于提出一種基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化系統(tǒng)。為達(dá)到上述目的,本發(fā)明第一方面的實(shí)施例提出了一種基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,包括以下步驟:對(duì)操作系統(tǒng)的源代碼進(jìn)行編譯,生成可重定向的目標(biāo)文件;根據(jù)所述目標(biāo)文件構(gòu)造系統(tǒng)擴(kuò)展調(diào)用圖,所述系統(tǒng)擴(kuò)展調(diào)用圖為有向圖,用于記錄所述目標(biāo)文件中函數(shù)和數(shù)據(jù)對(duì)象之間的引用關(guān)系;根據(jù)所述系統(tǒng)擴(kuò)展調(diào)用圖生成所述操作系統(tǒng)的有效子圖;根據(jù)所述有效子圖對(duì)所述目標(biāo)文件進(jìn)行重寫,得到優(yōu)化后的目標(biāo)文件;對(duì)所述優(yōu)化后的所述目標(biāo)文件進(jìn)行鏈接,得到優(yōu)化后的操作系統(tǒng)。根據(jù)本發(fā)明的基于全系統(tǒng)擴(kuò)展調(diào)用圖的自動(dòng)優(yōu)化方法使用自動(dòng)化的方法對(duì)操作系統(tǒng)進(jìn)行優(yōu)化,從編譯后的目標(biāo)文件中讀取信息,構(gòu)建系統(tǒng)擴(kuò)展調(diào)用圖,進(jìn)一步得到擴(kuò)展調(diào)用圖中的有效子圖,根據(jù)有效子圖對(duì)目標(biāo)文件重寫后,鏈接生成優(yōu)化的可執(zhí)行文件和動(dòng)態(tài)庫(kù)文件。本方法消除無(wú)用代碼,有效減小系統(tǒng)的體積,提升系統(tǒng)性能,不需人工干預(yù),節(jié)省人力成本,提高效率。本方法應(yīng)用范圍廣、自動(dòng)化程度高、使用方便、可維護(hù)性好,優(yōu)化效果明顯。在本發(fā)明的一個(gè)實(shí)施例中,所述對(duì)操作系統(tǒng)的源代碼進(jìn)行編譯進(jìn)一步包括:對(duì)所述源代碼中每個(gè)函數(shù)和每個(gè)數(shù)據(jù)對(duì)象編譯生成單獨(dú)的段。在本發(fā)明的一個(gè)實(shí)施例中,使用編譯器中的編譯選項(xiàng)生成所述單獨(dú)的段。在本發(fā)明的一個(gè)實(shí)施例中,所述系統(tǒng)擴(kuò)展調(diào)用圖包括結(jié)點(diǎn)集、邊集和入口結(jié)點(diǎn)集合,其中,所述結(jié)點(diǎn)集為實(shí)體集合,所述實(shí)體包括代碼中的函數(shù)和數(shù)據(jù)對(duì)象;邊集包括前驅(qū)對(duì)后繼存在使用關(guān)系的有向邊的集合;入口結(jié)點(diǎn)集合包括進(jìn)程的入口結(jié)點(diǎn)和程序中動(dòng)態(tài)綁定的入口結(jié)點(diǎn)。在本發(fā)明的一個(gè)實(shí)施例中,所述有效子圖的結(jié)點(diǎn)集包括所述系統(tǒng)擴(kuò)展調(diào)用圖的所述入口點(diǎn)集以及所有所述入口點(diǎn)在所述系統(tǒng)擴(kuò)展調(diào)用圖中的子孫結(jié)點(diǎn)。 在本發(fā)明的一個(gè)實(shí)施例中,用二進(jìn)制重寫的方法對(duì)所述目標(biāo)文件進(jìn)行修改,將所述有效子圖中不存的結(jié)點(diǎn)的對(duì)應(yīng)信息刪除。在本發(fā)明的一個(gè)實(shí)施例中,所述操作系統(tǒng)為移動(dòng)終端操作系統(tǒng)。在本發(fā)明的一個(gè)實(shí)施例中,構(gòu)造所述操作系統(tǒng)的所述系統(tǒng)擴(kuò)展調(diào)用圖進(jìn)一步包括:使用庫(kù)或工具讀取每個(gè)所述目標(biāo)文件,得到所述目標(biāo)文件的信息集合;將所述目標(biāo)文件的信息集合合并為全局有向圖,得到所述系統(tǒng)擴(kuò)展調(diào)用圖的所述結(jié)點(diǎn)集合和所述邊集合;將符合條件的所述函數(shù)和數(shù)據(jù)對(duì)象依次加入初始為空的所述入口點(diǎn)集合。本發(fā)明第二方面的實(shí)施例提出了一種基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化系統(tǒng),包括編譯模塊、系統(tǒng)擴(kuò)展調(diào)用圖生成模塊、有效子圖生成模塊、重寫模塊和鏈接模塊,其中,所述編譯模塊用于對(duì)操作系統(tǒng)的源代碼進(jìn)行編譯,生成可重定向的目標(biāo)文件;所述系統(tǒng)擴(kuò)展調(diào)用圖生成模塊用于根據(jù)所述目標(biāo)文件構(gòu)造所述系統(tǒng)擴(kuò)展調(diào)用圖,其中,所述系統(tǒng)擴(kuò)展調(diào)用圖為有向圖,用于記錄所述目標(biāo)文件中函數(shù)和數(shù)據(jù)對(duì)象之間的引用關(guān)系;所述有效子圖生成模塊用于根據(jù)所述系統(tǒng)擴(kuò)展調(diào)用圖生成所述操作系統(tǒng)的有效子圖;所述重寫模塊用于根據(jù)所述有效子圖對(duì)所述目標(biāo)文件進(jìn)行重寫,得到優(yōu)化后的所述目標(biāo)文件;所述鏈接模塊用于對(duì)所述優(yōu)化后的目標(biāo)文件進(jìn)行鏈接,得到優(yōu)化后的所述操作系統(tǒng)。根據(jù)本發(fā)明的基于全系統(tǒng)擴(kuò)展調(diào)用圖的自動(dòng)優(yōu)化系統(tǒng)使用自動(dòng)化的系統(tǒng)對(duì)操作系統(tǒng)進(jìn)行優(yōu)化,從編譯后的目標(biāo)文件中讀取信息,構(gòu)建系統(tǒng)擴(kuò)展調(diào)用圖,進(jìn)一步得到擴(kuò)展調(diào)用圖中的有效子圖,根據(jù)有效子圖對(duì)目標(biāo)文件重寫后,鏈接生成優(yōu)化的可執(zhí)行文件和動(dòng)態(tài)庫(kù)文件。本系統(tǒng)消除無(wú)用代碼,有效減小系統(tǒng)的體積,提升系統(tǒng)性能,不需人工干預(yù),節(jié)省人力成本,提高效率。同時(shí),本系統(tǒng)應(yīng)用范圍廣、自動(dòng)化程度高、使用方便、可維護(hù)性好,優(yōu)化效果明顯。在本發(fā)明的一個(gè)實(shí)施例中,所述編譯模塊對(duì)操作系統(tǒng)的源代碼進(jìn)行編譯進(jìn)一步包括:所述編譯模塊對(duì)所述源代碼中每個(gè)所述函數(shù)和每個(gè)所述數(shù)據(jù)對(duì)象編譯生成所述單獨(dú)的段。在本發(fā)明的一個(gè)實(shí)施例中,所述編譯模塊使用編譯器中的編譯選項(xiàng)生成所述單獨(dú)的段。在本發(fā)明的一個(gè)實(shí)施例中,所述系統(tǒng)擴(kuò)展調(diào)用圖包括結(jié)點(diǎn)集合、邊集合和入口結(jié)點(diǎn)集合,其中,所述結(jié)點(diǎn)集合為實(shí)體集合,所述實(shí)體包括代碼中的所述函數(shù)和所述數(shù)據(jù)對(duì)象;所述邊集合包括前驅(qū)對(duì)后繼存在使用關(guān)系的有向邊的集合;所述入口結(jié)點(diǎn)集合包括進(jìn)程的所述入口結(jié)點(diǎn)和程序中動(dòng)態(tài)綁定的所述入口結(jié)點(diǎn)。在本發(fā)明的一個(gè)實(shí)施例中,所述有效子圖的結(jié)點(diǎn)集包括所述系統(tǒng)擴(kuò)展調(diào)用圖的所述入口點(diǎn)集以及所有所述入口點(diǎn)在所述系統(tǒng)擴(kuò)展調(diào)用圖中的子孫結(jié)點(diǎn)。在本發(fā)明的一個(gè)實(shí)施例中,所述重寫模塊用二進(jìn)制重寫的方法對(duì)所述目標(biāo)文件進(jìn)行修改,將所述有效子圖中不存的所述結(jié)點(diǎn)的對(duì)應(yīng)信息刪除。在本發(fā)明的一個(gè)實(shí)施例中,所述操作系統(tǒng)為移動(dòng)終端操作系統(tǒng)。在本發(fā)明的一個(gè)實(shí)施例中,所述系統(tǒng)擴(kuò)展調(diào)用圖生成模塊構(gòu)造所述系統(tǒng)擴(kuò)展調(diào)用圖進(jìn)一步包括:所述系統(tǒng)擴(kuò)展調(diào)用圖生成模塊使用庫(kù)或工具讀取每個(gè)所述目標(biāo)文件,得到所述目標(biāo)文件的信息集合;所述系統(tǒng)擴(kuò)展調(diào)用圖生成模塊將所述目標(biāo)文件的信息集合合并為全局有向圖,得到所述系統(tǒng)擴(kuò)展調(diào)用圖的所述結(jié)點(diǎn)集合和所述邊集合;所述系統(tǒng)擴(kuò)展調(diào)用圖生成模塊將符合條件的所述函數(shù)和數(shù)據(jù)對(duì)象依次加入初始為空的所述入口點(diǎn)集合。本發(fā)明的附加方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。
本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中:圖1是根據(jù)本發(fā)明實(shí)施例的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法的流程圖;和圖2是根據(jù)本發(fā)明實(shí)施例的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施例方式下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過(guò)參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。下面參考圖1描述根據(jù)本發(fā)明實(shí)施例的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,包括以下步驟:步驟SllO:對(duì)操作系統(tǒng)的源代碼進(jìn)行編譯,生成可重定向的目標(biāo)文件。進(jìn)一步地,對(duì)操作系統(tǒng)的源代碼進(jìn)行編譯包括:對(duì)源代碼中每個(gè)函數(shù)和每個(gè)數(shù)據(jù)對(duì)象編譯生成單獨(dú)的段。其中,使用編譯器中的編譯選項(xiàng)生成單獨(dú)的段。步驟S120:根據(jù)目標(biāo)文件構(gòu)造操作系統(tǒng)的系統(tǒng)擴(kuò)展調(diào)用圖,系統(tǒng)擴(kuò)展調(diào)用圖為有向圖,用于記錄目標(biāo)文件中函數(shù)和數(shù)據(jù)對(duì)象之間的引用關(guān)系。其中,系統(tǒng)擴(kuò)展調(diào)用圖包括結(jié)點(diǎn)集合、邊集合和入口結(jié)點(diǎn)集合,其中,結(jié)點(diǎn)集合為實(shí)體集合,實(shí)體包括代碼中的函數(shù)和數(shù)據(jù)對(duì)象;邊集合為前驅(qū)對(duì)后繼存在使用關(guān)系的有向邊的集合;入口結(jié)點(diǎn)集合包括進(jìn)程的入口結(jié)點(diǎn)和程序中動(dòng)態(tài)綁定的入口結(jié)點(diǎn)。構(gòu)造操作系統(tǒng)的系統(tǒng)擴(kuò)展調(diào)用圖進(jìn)一步包括:使用庫(kù)或工具讀取每個(gè)目標(biāo)文件,得到目標(biāo)文件的信息集合;將目標(biāo)文件的信息集合合并為全局有向圖,得到擴(kuò)展調(diào)用圖的結(jié)點(diǎn)集合和邊集合;將符合條件的實(shí)體依次加入初始為空的入口點(diǎn)集合。步驟S130:根據(jù)系統(tǒng)擴(kuò)展調(diào)用圖生成系統(tǒng)的有效子圖。其中,有效子圖的結(jié)點(diǎn)集合包括系統(tǒng)擴(kuò)展調(diào)用圖的入口點(diǎn)集合中的結(jié)點(diǎn)以及所有入口點(diǎn)在系統(tǒng)擴(kuò)展調(diào)用圖中的子孫結(jié)點(diǎn)。步驟S140:根據(jù)有效子圖對(duì)目標(biāo)文件進(jìn)行重寫,得到優(yōu)化后的目標(biāo)文件。進(jìn)一步地,用二進(jìn)制重寫的方法對(duì)目標(biāo)文件進(jìn)行修改,將有效子圖中不存的結(jié)點(diǎn)的對(duì)應(yīng)信息刪除。步驟S150:對(duì)優(yōu)化后的目標(biāo)文件進(jìn)行鏈接,得到優(yōu)化后的系統(tǒng)。下面以移動(dòng)終端的操作系統(tǒng)優(yōu)化為例對(duì)本方法進(jìn)行解釋說(shuō)明。可以理解的是,下述優(yōu)化僅出于示例目的,本發(fā)明的實(shí)施例不限于此。步驟210:對(duì)移動(dòng)終端操作系統(tǒng)的源代碼進(jìn)行編譯,生成可重定向的目標(biāo)文件,一般以.0為文件后綴名。使用編譯選項(xiàng)使編譯器對(duì)每個(gè)函數(shù)和數(shù)據(jù)對(duì)象都生成單獨(dú)的段(section),例如,在編譯前修改相關(guān) Makefile,向 CFLAGS 添加 “-ffunction-sections” 和“-fdata-sections”參數(shù),使編譯器將每個(gè)函數(shù)和數(shù)據(jù)對(duì)象編譯到單獨(dú)的段(section)中,以便后面的分析和優(yōu)化。其中,也將函數(shù)和對(duì)象統(tǒng)稱為實(shí)體,其中數(shù)據(jù)對(duì)象包括程序中顯式定義的全局和靜態(tài)變量以及編譯器生成的虛函數(shù)表等數(shù)據(jù)。步驟220:從目標(biāo)文件提取信息,并記錄函數(shù)、變量等相互之間的引用關(guān)系,根據(jù)已有信息構(gòu)建操作系統(tǒng)的系統(tǒng)擴(kuò)展調(diào)用圖。其中,系統(tǒng)擴(kuò)展調(diào)用圖為有向圖,例如表示為G= (V, E, R)的形式,其中,(一)、V為結(jié)點(diǎn)集合:其中,每個(gè)結(jié)點(diǎn)與目標(biāo)文件中一個(gè)實(shí)體對(duì)應(yīng),由于在步驟210中將每個(gè)實(shí)體編譯到單獨(dú)的段中,因此每個(gè)結(jié)點(diǎn)可以對(duì)應(yīng)到目標(biāo)文件中的一個(gè)段。(二)、E為邊集合:系統(tǒng)擴(kuò)展調(diào)用圖中的邊均為有向邊,可以以結(jié)點(diǎn)對(duì)的形式(U,V)表示,(U,V) e E0有向邊代表前驅(qū)結(jié)點(diǎn)U對(duì)后繼結(jié)點(diǎn)V存在使用關(guān)系,即在U的重定向數(shù)據(jù)中有相對(duì)V的重定向記錄時(shí),在擴(kuò)展調(diào)用圖中有從u到V的邊。。(三)、R為入口點(diǎn)集合:E是V的子集。入口結(jié)點(diǎn)為進(jìn)程的入口點(diǎn),或者作為程序運(yùn)行中動(dòng)態(tài)綁定的入口點(diǎn)。代表程序的啟動(dòng)代碼,或可能在程序運(yùn)行中通過(guò)動(dòng)態(tài)綁定訪問(wèn),或?qū)儆谔厥獾亩巍>唧w構(gòu)建系統(tǒng)擴(kuò)展調(diào)用圖的方法如下:步驟221:使用elfutils或類似的庫(kù)、工具依次讀取每個(gè)目標(biāo)文件。對(duì)于每個(gè)目標(biāo)文件,獲取以下信息集合:SS:該集合包括目標(biāo)文件中所有含有實(shí)體的段的名稱;GS:該集合包括目標(biāo)文件中定義的所有全局符號(hào)的信息。信息以關(guān)聯(lián)表的形式存儲(chǔ),以便從全局符號(hào)的名稱迅速查找它所在的段的名稱。AF:該集合包括頭和尾都屬于該目標(biāo)文件的有向邊的集合;AU:該集合包括頭屬于該目標(biāo)文件,尾為外部符號(hào)(即屬于暫未解析的文件)的有向邊的信息。其中每個(gè)元素表示為(U,sym),其中u屬于SS,是該目標(biāo)文件中的一個(gè)實(shí)體,sym為外部符號(hào)的名字,表示被u引用、但不在同一個(gè)目標(biāo)文件中定義的實(shí)體。步驟222:將步驟S221中所獲得的信息合并為全局的有向圖。這一步將得到擴(kuò)展調(diào)用圖的V和E:V為所有目標(biāo)文件的SS的并集。為了區(qū)分不同目標(biāo)文件的段,在V中每個(gè)結(jié)點(diǎn)的名稱以二元組〈目標(biāo)文件名,段名 > 的形式表示。E表示包括E1' E2兩部分,E=E1 U E20其中E1為所有目標(biāo)文件的AF的并集,代表頭和尾都屬于同一個(gè)目標(biāo)文件的有向邊的集合,E2為頭和尾屬于不同目標(biāo)文件的有向邊的集合。對(duì)所有目標(biāo)文件的AF取并集得到E1。具體地,求E2的方法為:步驟222_1:令S=0 ο步驟222_2:遍歷每個(gè)目標(biāo)文件的AU集合,對(duì)其中的每一個(gè)元素(U,sym),查找所有目標(biāo)文件的GS集,獲得所有名稱為sym的全局符號(hào)的實(shí)體集S[sym],并將所有二元組(U,V)加入集合E2,其中V e S [sym]。步驟222_3:將E1與E2取并集得到E。步驟223:得到入口點(diǎn)集合R。
具體方法為:步驟223_1:令步驟223_2:依次將下列結(jié)點(diǎn)加入集合R:(—)、程序啟動(dòng)代碼對(duì)應(yīng)的實(shí)體。例如,在Android上為_start符號(hào)所對(duì)應(yīng)的代碼。(二)、可能通過(guò)動(dòng)態(tài)綁定使用的實(shí)體,包括:(I)、C/C++程序可能使用動(dòng)態(tài)綁定訪問(wèn)的實(shí)體:掃描所有目標(biāo)文件的只讀數(shù)據(jù)段(rodata),找到其中所有字符串。對(duì)于系統(tǒng)中的所有全局實(shí)體,如果其名字與其中一個(gè)字符串相同,則認(rèn)為該實(shí)體可能通過(guò)動(dòng)態(tài)綁定使用,將其加入入口點(diǎn)集。(2)、JNI入口函數(shù)Java代碼通過(guò)JNI調(diào)用本地代碼時(shí),Java虛擬機(jī)動(dòng)態(tài)打開相應(yīng)的動(dòng)態(tài)庫(kù)文件,并以動(dòng)態(tài)綁定的方式使用其中的函數(shù)。根據(jù)JNI的標(biāo)準(zhǔn),JNI_0nLoad、JNI_0nUnload以及其他Java_*函數(shù)需標(biāo)記為入口點(diǎn)。其中,動(dòng)態(tài)注冊(cè)的JNI入口在系統(tǒng)擴(kuò)展調(diào)用圖中已經(jīng)被注冊(cè)函數(shù)使用,因此無(wú)需特別標(biāo)記。 ( 3 )、系統(tǒng)中其他可能通過(guò)動(dòng)態(tài)綁定使用的實(shí)體。(三)、位于特殊段中的實(shí)體。其中,特殊段包括所有名稱不以.text、.data、.rodata、.bss打頭的段。步驟230:根據(jù)系統(tǒng)擴(kuò)展調(diào)用圖得到有效子圖。有效子圖的結(jié)點(diǎn)集合包含系統(tǒng)擴(kuò)展調(diào)用圖的入口點(diǎn)集合,并且包括所有入口點(diǎn)在系統(tǒng)擴(kuò)展調(diào)用圖中的子孫結(jié)點(diǎn)。有效子圖Gs= (Vs, Es, R)是系統(tǒng)擴(kuò)展調(diào)用圖G=(V,E, R)的子圖。其中,G與Gs的入口結(jié)點(diǎn)集R相同,Vs是V是子集,Es是E的子集。VjPEs的用公式表示為:
權(quán)利要求
1.一種基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,其特征在于,包括以下步驟: 對(duì)操作系統(tǒng)的源代碼進(jìn)行編譯,生成可重定向的目標(biāo)文件; 根據(jù)所述目標(biāo)文件構(gòu)造系統(tǒng)擴(kuò)展調(diào)用圖,所述系統(tǒng)擴(kuò)展調(diào)用圖為有向圖,用于記錄所述目標(biāo)文件中函數(shù)和數(shù)據(jù)對(duì)象之間的引用關(guān)系; 根據(jù)所述系統(tǒng)擴(kuò)展調(diào)用圖生成所述操作系統(tǒng)的有效子圖; 根據(jù)所述有效子圖對(duì)所述目標(biāo)文件進(jìn)行重寫,得到優(yōu)化后的所述目標(biāo)文件;以及 對(duì)所述優(yōu)化后的目標(biāo)文件進(jìn)行鏈接,得到優(yōu)化后的所述操作系統(tǒng)。
2.如權(quán)利要求1所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,其特征在于,所述對(duì)操作系統(tǒng)的源代碼進(jìn)行編譯進(jìn)一步包括: 對(duì)所述源代碼中每個(gè)所述函數(shù)和每個(gè)所述數(shù)據(jù)對(duì)象編譯生成所述單獨(dú)的段。
3.如權(quán)利要求2所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,其特征在于,使用編譯器中的編譯選項(xiàng)生成所述單獨(dú)的段。
4.如權(quán)利要求1所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,其特征在于,所述系統(tǒng)擴(kuò)展調(diào)用圖包括結(jié)點(diǎn)集、邊集和入口結(jié)點(diǎn)集合,其中,所述結(jié)點(diǎn)集為實(shí)體集合,所述實(shí)體包括代碼中的函數(shù)和數(shù)據(jù)對(duì)象;所述邊集包括前驅(qū)對(duì)后繼存在使用關(guān)系的有向邊的集合;所述入口結(jié)點(diǎn)集合包括進(jìn)程的所述入口結(jié)點(diǎn)和程序中動(dòng)態(tài)綁定的所述入口結(jié)點(diǎn)。
5.如權(quán)利要求1所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,其特征在于,所述有效子圖的結(jié)點(diǎn)集包括所述系統(tǒng)擴(kuò)展調(diào)用圖的所述入口點(diǎn)集以及所有所述入口點(diǎn)在所述系統(tǒng)擴(kuò)展調(diào)用圖中的子孫結(jié)點(diǎn)。
6.如權(quán)利要求1所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,其特征在于,用二進(jìn)制重寫的方法對(duì)所 述目標(biāo)文件進(jìn)行修改,將所述有效子圖中不存的所述結(jié)點(diǎn)的對(duì)應(yīng)信息刪除。
7.如權(quán)利要求1所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,其特征在于,所述操作系統(tǒng)為移動(dòng)終端操作系統(tǒng)。
8.如權(quán)利要求1所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,其特征在于,構(gòu)造所述操作系統(tǒng)的所述系統(tǒng)擴(kuò)展調(diào)用圖進(jìn)一步包括: 使用庫(kù)或工具讀取每個(gè)所述目標(biāo)文件,得到所述目標(biāo)文件的信息集合; 將所述目標(biāo)文件的信息集合合并為全局有向圖,得到所述系統(tǒng)擴(kuò)展調(diào)用圖的所述結(jié)點(diǎn)集合和所述邊集合; 將符合條件的所述函數(shù)和數(shù)據(jù)對(duì)象依次加入初始為空的所述入口點(diǎn)集合。
9.一種基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化系統(tǒng),其特征在于,包括編譯模塊、系統(tǒng)擴(kuò)展調(diào)用圖生成模塊、有效子圖生成模塊、重寫模塊和鏈接模塊,其中, 所述編譯模塊,用于對(duì)操作系統(tǒng)的源代碼進(jìn)行編譯,生成可重定向的目標(biāo)文件; 所述系統(tǒng)擴(kuò)展調(diào)用圖生成模塊,用于根據(jù)所述目標(biāo)文件構(gòu)造所述系統(tǒng)擴(kuò)展調(diào)用圖,其中,所述系統(tǒng)擴(kuò)展調(diào)用圖為有向圖,用于記錄所述目標(biāo)文件中函數(shù)和數(shù)據(jù)對(duì)象之間的引用關(guān)系; 所述有效子圖生成模塊,用于根據(jù)所述系統(tǒng)擴(kuò)展調(diào)用圖生成所述操作系統(tǒng)的有效子圖; 所述重寫模塊。用于根據(jù)所述有效子圖對(duì)所述目標(biāo)文件進(jìn)行重寫,得到優(yōu)化后的所述目標(biāo)文件;以及 所述鏈接模塊,用于對(duì)所述優(yōu)化后的目標(biāo)文件進(jìn)行鏈接,得到優(yōu)化后的所述操作系統(tǒng)。
10.如權(quán)利要求9所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化系統(tǒng),其特征在于,所述編譯模塊對(duì)操作系統(tǒng)的源代碼進(jìn)行編譯進(jìn)一步包括: 所述編譯模塊對(duì)所述源代碼中每個(gè)所述函數(shù)和每個(gè)所述數(shù)據(jù)對(duì)象編譯生成所述單獨(dú)的段。
11.如權(quán)利要求10所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化系統(tǒng),其特征在于,所述編譯模塊使用編譯器中的編譯選項(xiàng)生成所述單獨(dú)的段。
12.如權(quán)利要求9所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化系統(tǒng),其特征在于,所述系統(tǒng)擴(kuò)展調(diào)用圖包括結(jié)點(diǎn)集合、邊集合和入口結(jié)點(diǎn)集合,其中,所述結(jié)點(diǎn)集合為實(shí)體集合,所述實(shí)體包括代碼中的所述函數(shù)和所述數(shù)據(jù)對(duì)象;所述邊集合包括前驅(qū)對(duì)后繼存在使用關(guān)系的有向邊的集合;所述入口結(jié)點(diǎn)集合包括進(jìn)程的所述入口結(jié)點(diǎn)和程序中動(dòng)態(tài)綁定的所述入口結(jié)點(diǎn)。
13.如權(quán)利要求9所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化系統(tǒng),其特征在于,所述有效子圖的結(jié)點(diǎn)集包括所述系統(tǒng)擴(kuò)展調(diào)用圖的所述入口點(diǎn)集以及所有所述入口點(diǎn)在所述系統(tǒng)擴(kuò)展調(diào)用圖中的子孫結(jié)點(diǎn)。
14.如權(quán)利要求9所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化系統(tǒng),其特征在于,所述重寫模塊用二進(jìn)制重寫的方法對(duì)所述目標(biāo)文件進(jìn)行修改,將所述有效子圖中不存的所述結(jié)點(diǎn)的對(duì)應(yīng)信息刪除。
15.如權(quán)利要求9所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,其特征在于,所述操作系統(tǒng)為移動(dòng)終端操作系統(tǒng)。
16.如權(quán)利要求9所述的基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,其特征在于,所述系統(tǒng)擴(kuò)展調(diào)用圖生成模塊構(gòu)造所述系統(tǒng)擴(kuò)展調(diào)用圖進(jìn)一步包括: 所述系統(tǒng)擴(kuò)展調(diào)用圖生成模塊使用庫(kù)或工具讀取每個(gè)所述目標(biāo)文件,得到所述目標(biāo)文件的信息集合; 所述系統(tǒng)擴(kuò)展調(diào)用圖生成模塊將所述目標(biāo)文件的信息集合合并為全局有向圖,得到所述系統(tǒng)擴(kuò)展調(diào)用圖的所述結(jié)點(diǎn)集合和所述邊集合; 所述系統(tǒng)擴(kuò)展調(diào)用圖生成模塊將符合條件的所述函數(shù)和數(shù)據(jù)對(duì)象依次加入初始為空的所述入口點(diǎn)集合。
全文摘要
本發(fā)明提出一種基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化方法,包括對(duì)操作系統(tǒng)的源代碼進(jìn)行編譯,生成可重定向的目標(biāo)文件;根據(jù)目標(biāo)文件構(gòu)造系統(tǒng)擴(kuò)展調(diào)用圖,系統(tǒng)擴(kuò)展調(diào)用圖為有向圖,用于記錄目標(biāo)文件中函數(shù)和數(shù)據(jù)對(duì)象之間的引用關(guān)系;根據(jù)系統(tǒng)擴(kuò)展調(diào)用圖生成操作系統(tǒng)的有效子圖;根據(jù)有效子圖對(duì)目標(biāo)文件進(jìn)行重寫,得到優(yōu)化后的目標(biāo)文件;對(duì)優(yōu)化后的目標(biāo)文件進(jìn)行鏈接,得到優(yōu)化后的操作系統(tǒng)。本發(fā)明自動(dòng)化消除系統(tǒng)無(wú)用代碼,減小系統(tǒng)體積,提升了系統(tǒng)性能,方便高效,優(yōu)化效果明顯。本發(fā)明還公開了一種基于系統(tǒng)擴(kuò)展調(diào)用圖的操作系統(tǒng)自動(dòng)優(yōu)化系統(tǒng)。
文檔編號(hào)G06F9/45GK103116514SQ201310084560
公開日2013年5月22日 申請(qǐng)日期2013年3月15日 優(yōu)先權(quán)日2013年3月15日
發(fā)明者董淵, 王生原, 李疊, 駱歡 申請(qǐng)人:清華大學(xué)