專利名稱:通過(guò)在庫(kù)中描繪特定函數(shù)減小代碼大小的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種減^、計(jì)算機(jī)代碼集大小的方法,并且還涉及一種創(chuàng) 建計(jì)算機(jī)代碼庫(kù)的方法。
背景技術(shù):
在此所引用的術(shù)語(yǔ)"計(jì)算裝置"廣泛地解釋為覆蓋任何形式的電子 計(jì)算裝置,包括數(shù)據(jù)紀(jì)錄裝置、任何類型或形式的計(jì)算機(jī)以及任何構(gòu) 成方式的通信裝置,所述任何類型或形式的計(jì)算機(jī)包括諸如個(gè)人數(shù)字
助理(PDA)的手持個(gè)人電腦,所述任何構(gòu)成方式的通信裝置包括移 動(dòng)電話、智能電話、在一個(gè)裝置中結(jié)合了通信、圖像紀(jì)錄和/或播放 以及計(jì)算功能的通信器以及其它形式的無(wú)線和有線信息裝置,包括數(shù) 碼照相機(jī)、MP3和其它音樂(lè)播放器以及數(shù)字收音才幾。
現(xiàn)代計(jì)算裝置通常含有多種存儲(chǔ)器。可將存儲(chǔ)器大致分為兩種類
型
1. 可用于本地執(zhí)行(eXecute In Place, XIP)程序的存儲(chǔ)器, 其中無(wú)需為了執(zhí)行程序而將程序載入不同類型的存儲(chǔ)器。各同類型的 RAM (隨機(jī)存儲(chǔ)器)是該類型存儲(chǔ)器最突出的例子。然而,由于RAM
具有易失性以及當(dāng)斷電時(shí)會(huì)丟失內(nèi)容,許多裝置包括較少的更貴但更 慢的非易失性XIP存儲(chǔ)器類型,例如NOR閃存。
2. 可用于存儲(chǔ)但不是XIP的存儲(chǔ)器,通常這是因?yàn)橹豢蓪?duì)XIP 進(jìn)行順序地或成塊地存取而不是可隨機(jī)尋址。磁盤(pán)驅(qū)動(dòng)器和MND閃存 是該類型存儲(chǔ)器的突出例子。保持在存儲(chǔ)器中的程序必須被拷貝到 XIP存儲(chǔ)器中以便能夠執(zhí)行。
這兩種存儲(chǔ)器有另外一個(gè)顯著的區(qū)別XIP存儲(chǔ)器比只能用于存儲(chǔ) 的存儲(chǔ)器要昂貴得多。因?yàn)楝F(xiàn)代計(jì)算裝置的制造存在相當(dāng)大的成本壓 力,該計(jì)算裝置包括定位于價(jià)格敏感的大量銷售的諸如移動(dòng)電話的便 攜裝置,所以需要此裝置應(yīng)該盡可能地減少對(duì)XIP存儲(chǔ)器的需求。
已經(jīng)知道,作為制造工藝的一部分,需要向計(jì)算裝置提供軟件, 該軟件存儲(chǔ)在某種永久非易失性存儲(chǔ)器中并且為計(jì)算裝置執(zhí)行適當(dāng)功 能所必需。所述軟件通常包括數(shù)據(jù)和程序,所述數(shù)據(jù)和程序?yàn)殚_(kāi)機(jī)時(shí) 運(yùn)行啟動(dòng)程序所必需,或者提供經(jīng)常需要的操作系統(tǒng)(0S)服務(wù),或 者提供關(guān)鍵的應(yīng)用程序。
盡可能在存儲(chǔ)器中保存這種軟件的裝置,在需要時(shí)將軟件拷貝到 (載入)XIP存儲(chǔ)器中而在不再需要時(shí)釋放XIP存儲(chǔ)器(卸載軟件),
從而與將更多這種軟件保持在XIP存儲(chǔ)器中的裝置相比能夠?qū)⑵渲?br>
造成本最小化。
更具體地,如果在制造階段已經(jīng)將裝置的核心操作系統(tǒng)提供在存 儲(chǔ)器中,則通常需要將該核心操作系統(tǒng)作為整個(gè)操作系統(tǒng)鏡像從存^f諸
器拷貝到XIP存儲(chǔ)器,以作為開(kāi)啟(重啟)過(guò)程的一部分。在此所用
的術(shù)語(yǔ)"核心操作系統(tǒng)"通常意義上是指為計(jì)算裝置基本操作所必需 從而在打開(kāi)計(jì)算裝置時(shí)自動(dòng)載入的操作系統(tǒng)部分。"操作系統(tǒng)鏡像" 是代表整個(gè)操作系統(tǒng)軟件的文件。操作系統(tǒng)鏡像的大小就是當(dāng)操作系 統(tǒng)存儲(chǔ)在存儲(chǔ)器中時(shí)的操作系統(tǒng)覆蓋區(qū)。
通常, 一旦被載入XIP存儲(chǔ)器,操作系統(tǒng)鏡像實(shí)際上不能被卸載, 甚至卸載其中的一部分也不可能;本領(lǐng)域的技術(shù)人員知道,由于這種 操作系統(tǒng)鏡像通常使用如靜態(tài)鏈接的技術(shù)來(lái)創(chuàng)建,所以它們所占據(jù)的 存儲(chǔ)單元被視為保留,而不能由其他軟件重新使用。
可使核心操作系統(tǒng)最小化的裝置將會(huì)使提供專用XIP存儲(chǔ)器的 固定成本最小化,進(jìn)而使得裝置對(duì)XIP存儲(chǔ)器的需求最小化,并且使 其更加便宜以便一般大眾能夠購(gòu)買和使用。其還具有以下優(yōu)點(diǎn)需要 用來(lái)存儲(chǔ)核心操作系統(tǒng)的存儲(chǔ)器越小,裝置的啟動(dòng)就會(huì)越快速,這是 因?yàn)樾枰獙⒏俚臄?shù)據(jù)從存儲(chǔ)器拷貝到XIP存儲(chǔ)器;并且電力消耗可 以更低,這是因?yàn)槭褂酶俚膭?dòng)態(tài)RAM形式的XIP存儲(chǔ)器將會(huì)降低整 個(gè)電力消耗。
如果計(jì)算裝置制造商提供裝置系列而該裝置系列中每個(gè)裝置具 有不同的功能但都從相同或相似的軟件開(kāi)發(fā)而成,則從裝置制造商的
角度來(lái)看,希望裝置系列中的所有裝置包括兼容的核心操作系統(tǒng)。已經(jīng) 知道的是,這降低了制造商的開(kāi)發(fā)成本,并且增加了裝置的可靠性。
另外,如果這種裝置是開(kāi)放式的并且允許在制造之后安裝提供附 加功能的軟件模塊和程序,則在整個(gè)裝置系列上提供兼容核心操作系 統(tǒng)將會(huì)使得這種模塊和程序能夠針對(duì)多得多的裝置。由此造成的規(guī)模 經(jīng)濟(jì)可以降低開(kāi)發(fā)成本并且為第三方制造商提高了可靠性。
最后,對(duì)于這些計(jì)算裝置的終端用戶而言還有另外的益處。除了 從低價(jià)格和更好的產(chǎn)品所獲得的好處之外,在整個(gè)裝置系列上使用這 種軟件模塊可以極大地降低獲取和安裝后續(xù)市場(chǎng)軟件的復(fù)雜性。在確切 地知道裝置系列中的所有裝置均相互兼容的情況下,僅指定終端用戶 的裝置所屬的系列便已足夠,而無(wú)需指定終端用戶所擁有的計(jì)算裝置 的準(zhǔn)確型號(hào)
裝置系列中的相關(guān)裝置典型地由特征集進(jìn)行區(qū)分,所述特征集 <吏 得特定型號(hào)指向市場(chǎng)的不同部分。
這對(duì)于例如移動(dòng)蜂窩電話的多功能計(jì)算裝置而言更加如此。已經(jīng)
知道,這些裝置展示了一個(gè)稱為"會(huì)聚,,(convergence)的現(xiàn)象,/人 而先前包含在各個(gè)裝置中的功能變成在單個(gè)裝置中即可獲得。例如, 先前在數(shù)字音樂(lè)播放器、數(shù)碼相機(jī)、FM收音機(jī)、PDA、傳呼機(jī)、鬧鐘、 電子信息機(jī)(例如,RIM黑莓)、錄音機(jī)、便攜游戲控制臺(tái)以及移動(dòng) 電話中分別可用的十項(xiàng)功能都可以在當(dāng)前可獲得的計(jì)算裝置中找到, 例如索尼愛(ài)立信P910i。然而,已經(jīng)知道,會(huì)聚裝置的復(fù)雜性經(jīng)常成 為其有效使用的阻礙,在單個(gè)裝置上以單一形式提供所有功能所需要 的妥協(xié)安排可能會(huì)導(dǎo)致不太滿意的用戶體驗(yàn)。
這就是為什么在計(jì)算裝置中用特征集進(jìn)行區(qū)分變?yōu)樵絹?lái)越普遍 的一個(gè)原因。再以移動(dòng)電話作為例子,現(xiàn)在顧客可以從為數(shù)字音樂(lè)(具 有存儲(chǔ)器,優(yōu)質(zhì)的耳機(jī)以及為音樂(lè)播放設(shè)計(jì)的按鈕)、或?yàn)閿?shù)字照相 (具有存儲(chǔ)器和高級(jí)鏡片)、或?yàn)殡娮邮瞻l(fā)信息(具有適當(dāng)?shù)腝WERTY 鍵盤(pán))、或?yàn)橥嬗螒?具有特殊拇指按鈕)而設(shè)計(jì)的裝置中進(jìn)行選擇; 現(xiàn)在已經(jīng)出現(xiàn)了很多其他指定的特征集,并且在接下來(lái)的幾年中毫無(wú) 疑問(wèn)將會(huì)看到更多。
指定具體特征集的一個(gè)相關(guān)原因是根據(jù)價(jià)格來(lái)進(jìn)行細(xì)分,去除更昂 貴的特征以便在產(chǎn)品系列中提供更低價(jià)格的裝置。
因此,制造商正在更多地提供屬于相同裝置系列但是其特征集相區(qū) 別的產(chǎn)品范圍。
在此需要解決的問(wèn)題是,沒(méi)有明顯的方法來(lái)協(xié)調(diào)所有以下三個(gè)要
求
1. 核心操作系統(tǒng)鏡像大小最小化,這使得裝置更加便宜、啟動(dòng)更 快并且消耗更少電力。
2. 獲得屬于相同裝置系列所有型號(hào)的兼容性,這可帶來(lái)降低軟件 開(kāi)發(fā)成本以及提高軟件兼容性的規(guī);漠經(jīng)濟(jì)。
3. 在相同裝置系列中區(qū)分各個(gè)裝置,以便使其滿足不同用戶群的 不同需求。
顯然地,當(dāng)計(jì)算裝置不同時(shí),需要加入該系列中每個(gè)型號(hào)的核心 操作系統(tǒng)鏡像中的項(xiàng)目也將不同。拿三個(gè)特定應(yīng)用來(lái)說(shuō),即音樂(lè)播放 列表編輯器和選擇器、相機(jī)和電影應(yīng)用程序以及802. 11無(wú)線網(wǎng)絡(luò)驅(qū)動(dòng) 器,可容易地看出,音樂(lè)播放器裝置、數(shù)碼相機(jī)裝置和信息發(fā)送裝置 的要求是不兼容的。對(duì)于所有三個(gè)裝置,對(duì)一個(gè)裝置而言必須作為核 心操作系統(tǒng)鏡像一部分的必要特征對(duì)于另兩個(gè)裝置而言則是不重要 的。如果將不重要的特征從核心操作系統(tǒng)鏡像中去除,則三個(gè)不同裝 置中的每個(gè)裝置將更加便宜、制造更快,啟動(dòng)更迅速并且消耗更少的 電力。
但是簡(jiǎn)單地在差異化的會(huì)聚裝置上去除不重要的特征會(huì)使得裝置不 兼容,從而破壞型號(hào)系列概念中固有的大部分價(jià)值。不兼容的最主要 的原因如前所述;核心操作系統(tǒng)鏡像用靜態(tài)鏈接創(chuàng)建,后繼市場(chǎng)的軟 件希望通過(guò)該鏡像中的特定位置為相同產(chǎn)品系列中的所有型號(hào)提供 特定功能。因此,將核心操作系統(tǒng)鏡像從存儲(chǔ)器拷貝到XIP存儲(chǔ)器的 現(xiàn)有計(jì)算裝置系列必須包括對(duì)非必要或很少使用的特征的支持,以便 保持兼容性。這使得操作系統(tǒng)變得龐大,并且增加了制造成本,卻沒(méi) 有任何其他的價(jià)值。這還增加了啟動(dòng)時(shí)間,因?yàn)橛糜谶@些特征的支持 代碼需要從存儲(chǔ)器被拷貝到XIP存儲(chǔ)器中,盡管它不會(huì)被經(jīng)常被使
用,而且在所述XIP存儲(chǔ)器為動(dòng)態(tài)RAM的情況下還會(huì)增加電力消^^。
雖然可以制造不包括較少使用部分的另外一個(gè)版本的核心#:作
系統(tǒng),但是這個(gè)版本必然會(huì)放棄維持相關(guān)裝置系列的制造商及用戶的
可觀的經(jīng)濟(jì)利益
1, 這種版本的核心操作系統(tǒng)將不會(huì)從原始完整版本所具有的兼容 性中獲益。特別地,在制造裝置之后所安裝的依存于完整版本核心操 作系統(tǒng)中所包含代碼的任何軟件將不能工作。
2. 由于另一版本的操作系統(tǒng)將裝置系列細(xì)分,因此將需要分別進(jìn) 行開(kāi)發(fā)和測(cè)試,進(jìn)而增加了開(kāi)發(fā)成本并且延長(zhǎng)了上市的時(shí)間。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的第 一個(gè)方面,提供一種減少用于計(jì)算裝置的計(jì)算機(jī) 代碼集的大小的方法,所述代碼集用于當(dāng)打開(kāi)所述計(jì)算裝置電源時(shí)自 動(dòng)載入存儲(chǔ)器,并且包括用于執(zhí)行計(jì)算任務(wù)的函數(shù),所述方法包括 指定所述計(jì)算裝置的具體應(yīng)用;在所述計(jì)算機(jī)代碼集中識(shí)別出那些將 要用來(lái)實(shí)現(xiàn)所述計(jì)算裝置的所述具體應(yīng)用的那些函數(shù);以及,從所述 代碼集中去除所識(shí)別出的函數(shù),并且將所識(shí)別出的函數(shù)置于單獨(dú)的計(jì) 算機(jī)代碼庫(kù)中。
的計(jì)算機(jī)代碼庫(kù)的代碼替換所識(shí)別出的函數(shù),從而使得縮減后的計(jì)算 機(jī)代碼集和所述單獨(dú)的計(jì)算機(jī)代碼庫(kù)相結(jié)合的函數(shù)等于原來(lái)代碼集 的函數(shù)。
所述識(shí)別出所需函數(shù)的步驟可以包括執(zhí)行原始計(jì)算機(jī)代碼集以 在測(cè)試計(jì)算裝置上執(zhí)行所述應(yīng)用;以及確定在執(zhí)行期間所用的計(jì)算機(jī) 代碼集中的函數(shù)。
所述確定在執(zhí)行期間所用的計(jì)算機(jī)代碼集中的函數(shù)的步驟可以包 括函數(shù)描繪(function profiling)或調(diào)用關(guān)系圖分析技術(shù)的使用。
所述計(jì)算裝置的具體應(yīng)用可以表示在所述計(jì)算裝置中不經(jīng)常使用 的應(yīng)用程序和/或?qū)τ谘b置的操作不是必需的應(yīng)用程序。
所述單獨(dú)的計(jì)算機(jī)代碼庫(kù)可以是動(dòng)態(tài)鏈接庫(kù)。
所述將識(shí)別出的函數(shù)置于單獨(dú)的計(jì)算機(jī)代碼庫(kù)的步驟可以產(chǎn)生 一個(gè)庫(kù),所述庫(kù)中的函數(shù)根據(jù)相關(guān)計(jì)算裝置的相應(yīng)應(yīng)用進(jìn)行群集。 所述計(jì)算機(jī)代碼集優(yōu)選地是可執(zhí)行代碼。
根據(jù)本發(fā)明的第二個(gè)方面,提供一種經(jīng)縮減的計(jì)算機(jī)代碼集,所 述計(jì)算機(jī)代碼集從前面所述方法獲得。
根據(jù)本發(fā)明的第三個(gè)方面,提供一種操作系統(tǒng),包括從前面所述方 法獲得的經(jīng)縮減的計(jì)算機(jī)代碼集。
所述操作系統(tǒng)可以進(jìn)一步包括所述單獨(dú)的計(jì)算機(jī)代碼庫(kù)。
根據(jù)本發(fā)明的第四個(gè)方面,提供一種計(jì)算裝置,包括從前面所述 方法獲得的經(jīng)縮減的計(jì)算機(jī)代碼集。
所述計(jì)算裝置可以進(jìn)一步包括所述單獨(dú)的計(jì)算機(jī)代碼庫(kù)。
所述經(jīng)縮減的計(jì)算機(jī)代碼集和所述單獨(dú)的計(jì)算機(jī)代碼庫(kù)可以是所 述計(jì)算裝置的操作系統(tǒng)的一部分。優(yōu)選地,所述單獨(dú)的計(jì)算^L代碼庫(kù)可 以獨(dú)立于所述經(jīng)縮減的計(jì)算機(jī)代碼集被載入到所述裝置的存儲(chǔ)器中。
根據(jù)本發(fā)明的第五個(gè)方面,提供一種用于創(chuàng)建用于計(jì)算裝置的計(jì)算
機(jī)代碼庫(kù)的方法,所述方法包括指定所述計(jì)算裝置的具體應(yīng)用;識(shí)別 出用于執(zhí)行計(jì)算任務(wù)的函數(shù)集,所述函數(shù)集用于實(shí)現(xiàn)所述計(jì)算裝置的所 述具體應(yīng)用;以及,將所述函數(shù)集置于一個(gè)庫(kù)中,以便所述庫(kù)中的函 數(shù)根據(jù)所述計(jì)算裝置的應(yīng)用進(jìn)行編組,而不是根據(jù)由所述函數(shù)集中的 各個(gè)函數(shù)所執(zhí)行的計(jì)算任務(wù)進(jìn)行編組。
根據(jù)本發(fā)明的第六個(gè)方面,提供一種包括用于執(zhí)行計(jì)算任務(wù)的函 數(shù)集的動(dòng)態(tài)鏈接庫(kù),其中,所迷函數(shù)集中的每個(gè)函數(shù)用于為相關(guān)計(jì)算 裝置執(zhí)行具體應(yīng)用。
在此所討論的術(shù)語(yǔ)"庫(kù)"是指可以從另一個(gè)代碼集訪問(wèn)的一組計(jì)算 機(jī)代碼。
在一些實(shí)施例中,本發(fā)明因此可提供一種方法,所述方法可以減 小XIP或RAM存儲(chǔ)器以便考慮特征集中的區(qū)別,并且同時(shí)保持產(chǎn)品系
列中所有產(chǎn)品之間的兼容性,無(wú)論這些產(chǎn)品具有什么特征。
本發(fā)明的優(yōu)選實(shí)施例提供了一種在裝置上節(jié)約XIP或RAM存儲(chǔ)器 的機(jī)制,所述裝置在NAND閃存存儲(chǔ)器中提供核心操作系統(tǒng)以及其它
(非核心)可執(zhí)行程序。
所迷核心操作系統(tǒng)典型地包括可執(zhí)行文件和所有其相依存的程
序,并且在啟動(dòng)時(shí)遞歸地從NAND閃存中被拷貝到RAM中。該核心才喿 作系統(tǒng)鏡像作為NAND閃存上的單個(gè)文件提供;當(dāng)該鏡像被拷貝到RAM 中時(shí),它在傳統(tǒng)的XIP只讀文件系統(tǒng)(ROFS)中表現(xiàn)為多個(gè)文件。剩 余的非核心可執(zhí)行程序保留在NAND閃存上的非XIP ROFS中,并且根 據(jù)要求被載入和卸載;與核心鏡像的內(nèi)容不同,它們不必占據(jù)存儲(chǔ)器 的保留部分,并且它們所消耗的任何資源在不再需要時(shí)都可以被釋 放。
如上所述,在具有不同特征的裝置上提供完全不同版本的核心操 作系統(tǒng)將不可避免地要為非核心特征將啟動(dòng)時(shí)寶貴稀有的XIP存儲(chǔ) 器分配給裝置的操作。另外,由于整個(gè)核心為靜態(tài)鏈接,所以將所分 配的RAM進(jìn)行釋放以用于其它用途是不可行的。
在此公開(kāi)的方法可減少存儲(chǔ)器開(kāi)銷,而同時(shí)保留與完全不同的核 心操作系統(tǒng)裝置之間的兼容性。
應(yīng)當(dāng)理解,在計(jì)算裝置中可以以兩種不同的形式提供函數(shù)。 一種 可執(zhí)行文件(在許多操作系統(tǒng)中稱為EXE文件)提供具有單個(gè)入口點(diǎn) (entry point)的單個(gè)應(yīng)用程序,并且典型地包括不與其它應(yīng)用程 序共享的函數(shù)。從核心操作系統(tǒng)鏡像去除這種獨(dú)立可執(zhí)行文件不會(huì)導(dǎo) 致兼容性問(wèn)題,那是因?yàn)樗惶峁┛赏ㄟ^(guò)調(diào)用特定內(nèi)部存儲(chǔ)器位置來(lái) 訪問(wèn)的共享函數(shù)。
與此相反,共享函數(shù)的多個(gè)區(qū)域由不同類型的可執(zhí)行文件來(lái)提 供, 一般稱為動(dòng)態(tài)鏈接庫(kù)(DLL)。這種可執(zhí)行文件不僅提供了一種以 模塊形式提供函數(shù)的方法,還有助于減少存儲(chǔ)器開(kāi)銷,因?yàn)镈LL可同 時(shí)由多個(gè)需要相同函數(shù)的應(yīng)用程序共享。與提供單個(gè)應(yīng)用程序的其它 類型的可執(zhí)行文件不同,所述其它類型的可執(zhí)行文件通常在開(kāi)始時(shí)從 單個(gè)入口點(diǎn)執(zhí)行,DLL提供有多個(gè)入口點(diǎn),每個(gè)入口點(diǎn)通常提供不同 的函數(shù)。
需要注意的是,有兩種主要方法可識(shí)別進(jìn)入DLL的這些入口點(diǎn)。 第一種方法是通過(guò)名稱指示入口點(diǎn)。第二種方法是指通過(guò)序號(hào)指示入
口點(diǎn)。后一種方法通常被稱為函數(shù)序號(hào)映射(function ordinal mapping)或函數(shù)序號(hào)鏈接(function ordinal linking )。
由于名字可能會(huì)比序號(hào)長(zhǎng),需要用于其定義的附加代碼,并且由 于相對(duì)于定位其序號(hào)位置需要更長(zhǎng)的時(shí)間來(lái)通過(guò)匹配名稱定位函數(shù), 所以與使用序號(hào)相比,使用名稱通常被認(rèn)為是浪費(fèi)計(jì)算裝置的存儲(chǔ)器 以及其它資源。
因此入口點(diǎn)的序號(hào)鏈接是優(yōu)選的實(shí)施例,特別是對(duì)于資源敏感的 操作系統(tǒng)而言,具體地在那些為小型的、便攜式的、電池供電的資源 制約型裝置而設(shè)計(jì)的操作系統(tǒng)中,與那些臺(tái)式或便攜式PC裝置相比 這些設(shè)備具有非常有限的物理資源。對(duì)于這種裝置而言,代碼的有效 使用是非常重要的;移動(dòng)電話是此種計(jì)算裝置的一個(gè)例子。本發(fā)明的 描述針對(duì)序號(hào)鏈接;然而,這并不意味著以任何方式限制本發(fā)明的應(yīng) 用。
本發(fā)明的基本想法是,對(duì)于任何不同計(jì)算裝置的DLL中所提供的 來(lái)自整個(gè)系列的共有操作系統(tǒng)的共享函數(shù),可以將單個(gè)以靜態(tài)方式載 入的原始DLL分割為 一個(gè)較小的以靜態(tài)方式載入的宿主DLL以及一個(gè)
或多個(gè)以動(dòng)態(tài)方式載入的協(xié)助DLL。
以下將參考附圖用示例的方式對(duì)本發(fā)明進(jìn)行描述,其中
圖1示出對(duì)函數(shù)集進(jìn)行分析的流程圖2 -圖7示出根據(jù)本發(fā)明可使用的一些代碼分析技術(shù)。
具體實(shí)施例方式
以下實(shí)施例表示如何實(shí)現(xiàn)原始DLL的優(yōu)化分離,以及如何通過(guò)分 解復(fù)雜的靜態(tài)依存鏈(static dependency chain)來(lái)節(jié)省大量的XIP 存儲(chǔ)器。我們將描述新的宿主DLL (host DLL)如何與舊的宿主DLL保 持完全二進(jìn)制兼容但能夠按需要?jiǎng)討B(tài)地載入函數(shù)。如果宿主DLL被調(diào) 用以便提供已經(jīng)分離的某函數(shù),則所述宿主DLL載入適當(dāng)?shù)膮f(xié)助 DLL (helper DLL)以滿足請(qǐng)求。進(jìn)而,當(dāng)不再需要協(xié)助DLL時(shí),可將
其卸載,并且釋放其存儲(chǔ)器。
分離原始DLL
第一個(gè)步驟是,確定如何對(duì)用于任何特定區(qū)分裝置的原始DLL集 進(jìn)行分離,以生成用于該裝置的典型用途的使用實(shí)例集。這是本領(lǐng)域 技術(shù)人員所熟知的技術(shù)。應(yīng)該注意的是,所考慮的裝置不同于裝置系 列中其他裝置的事實(shí)意味著不同使用實(shí)例的生成是相對(duì)簡(jiǎn)單的。
第二個(gè)步驟是,使用原始DLL為所述裝置系列創(chuàng)建通用測(cè)試操作 系統(tǒng),并且在DLL中對(duì)從第一個(gè)步驟產(chǎn)生的使用實(shí)例中執(zhí)行的所有函 數(shù)進(jìn)行描繪。隨后對(duì)該數(shù)據(jù)的分析使我們能夠確定沒(méi)有用在所述使用 實(shí)例中或用在 一 個(gè)或非常少的使用實(shí)例中的那些函數(shù)組。在不同使用 實(shí)例中具有高重復(fù)使用率的那些函數(shù)可以保留在宿主(靜態(tài))DLL中, 而在不同使用實(shí)例中具有低重復(fù)使用率的那些函數(shù)則可保留在協(xié)助 (動(dòng)態(tài))DLL中。應(yīng)該注意的是,計(jì)算裝置啟動(dòng)的使用實(shí)例被視為特 殊的實(shí)例;當(dāng)計(jì)算裝置啟動(dòng)時(shí)所執(zhí)行的函數(shù)將被保留在宿主DLL是, 即使這是其唯——次出現(xiàn)的使用實(shí)例。
第三步驟是,分析具有低重復(fù)使用率的函數(shù),以判斷它們是否圍 繞特定使用實(shí)例而群集(cluster)。如果是這樣,則存在一個(gè)明顯實(shí) 例用于生成多個(gè)協(xié)助DLL,因?yàn)檫@將是與具有單一協(xié)助DLL相比調(diào)用 所需函數(shù)更快捷和更有效的方法。
應(yīng)該注意,在本實(shí)施例中,每個(gè)協(xié)助DLL根據(jù)使用實(shí)例進(jìn)行排列, 而不是根據(jù)函數(shù)進(jìn)行排列。這與傳統(tǒng)的DLL設(shè)計(jì)是相反的,在傳統(tǒng)設(shè) 計(jì)中,將所有相關(guān)函數(shù)編組到單個(gè)DLL中以便方便使用,而不管這些 函數(shù)的使用率如何。例如,將所有數(shù)學(xué)函數(shù)編組到單個(gè)數(shù)學(xué)DLL中是 很常見(jiàn)的。通過(guò)這個(gè)實(shí)施例,編組將變得更加以用戶為中心;因此, 如果啟動(dòng)電話需要執(zhí)行余弦函數(shù),而運(yùn)行應(yīng)用程序需要執(zhí)行正切函 數(shù),那么這些函數(shù)可以會(huì)被放到不同的DLL中,即使傳統(tǒng)的設(shè)計(jì)思想 會(huì)將它們放在一起。
評(píng)價(jià)將哪些函數(shù)移入?yún)f(xié)助DLL的第四個(gè)步驟也是最后一個(gè)步驟 是,遞歸地分析位于分配給宿主DLL的函數(shù)函數(shù)下面的調(diào)用關(guān)系圖。函數(shù)下面的調(diào)用關(guān)系圖越大,其具有越多的依存關(guān)系,并且可通過(guò)將
其移入?yún)f(xié)助DLL而獲得的節(jié)約就越多。應(yīng)該注意的是,該步驟可提供 最大的好處,因?yàn)樗哂袛嚅_(kāi)靜態(tài)依存鏈的能力。這個(gè)步驟的目的是 尋找一些點(diǎn),在這些點(diǎn)上函數(shù)鏈的狹窄范圍向下沿著依存dll的深度 樹(shù),這些點(diǎn)被稱為"窄點(diǎn)"(pinch point)。這可以通過(guò)數(shù)學(xué)過(guò)程手 動(dòng)或自動(dòng)完成,所述數(shù)學(xué)過(guò)程通過(guò)對(duì)可能的函數(shù)組組合進(jìn)行替換來(lái)為 協(xié)助DLL找到優(yōu)化的分離。在識(shí)別出窄點(diǎn)之后,在依存樹(shù)頂部的函數(shù) 以及被依存樹(shù)頂部函數(shù)調(diào)用的所有函數(shù)都可以被移到 一個(gè)或多個(gè)單 獨(dú)的庫(kù)中。
在圖1中用框圖示出了上述步驟。
剩余附圖對(duì)最后兩個(gè)步驟進(jìn)行了圖示。圖2示出可從函數(shù)描繪和 調(diào)用關(guān)系圖分析所獲得的信息類型,以及不同DLL的函數(shù)和方法之間 的依存關(guān)系是如何相互隔離的。圖3和圖4示出這些依存關(guān)系如何群 集到兩個(gè)不同的使用實(shí)例中。
圖2、圖3和圖4中所示的使用實(shí)例1是計(jì)算裝置啟動(dòng)的特殊實(shí)
留在核心操作系統(tǒng)鏡像中,并且繼續(xù)靜態(tài)鏈接。另一方面,使用實(shí)例 2由計(jì)算裝置的用戶啟動(dòng)或者由特定外部事件觸發(fā)。其使用的方法和 函數(shù)可被移動(dòng)到新的動(dòng)態(tài)載入的DLL;這里,其他使用實(shí)例不需要它 的依存DLL,這些依存DLL也可以動(dòng)態(tài)載入。圖5示出上述分析所建 議的分離,圖6示出使用實(shí)例1的詳細(xì)細(xì)節(jié),圖7示出使用實(shí)例2的 詳細(xì)細(xì)節(jié)。
將調(diào)用從宿主DLL傳到協(xié)助DLL
通常,從原始DLL生成宿主DLL的同時(shí)加上這一機(jī)制。宿主DLL 將用樁代碼(stub code)替換那些已經(jīng)分配給協(xié)助DLL的函數(shù)。樁 代碼是指不執(zhí)行任何滿足原始要求的處理的代碼。在這個(gè)例子中,樁 代碼所做的處理是將調(diào)用傳給適當(dāng)?shù)膮f(xié)助DLL中的適當(dāng)函數(shù)。這種方 法使原始DLL分為宿主DLL和多個(gè)協(xié)助DLL。載入?yún)f(xié)助DLL
載入?yún)f(xié)助DLL有多種方法。
a) 根據(jù)任何函數(shù)的請(qǐng)求可以載入?yún)f(xié)助DLL。這對(duì)任何調(diào)用程 序都是透明的;宿主DLL保持與原始DLL二進(jìn)制兼容。用 于載入?yún)f(xié)助DLL的代碼(如果需要)將被包含在與宿主 DLL同時(shí)生成的樁代碼中。
b) —旦協(xié)助DLL到一個(gè)點(diǎn),在該點(diǎn)上對(duì)于使用適當(dāng)函數(shù)的需 要變得明顯,則所述協(xié)助DLL可由應(yīng)用程序或客戶端通過(guò) 直接請(qǐng)求而主動(dòng)載入。這種機(jī)制具有缺點(diǎn),即應(yīng)用程序或 客戶端將需要被修改,從而在相同裝置系列中針對(duì)不同裝 置需要不同的版本。
c) 如果使用實(shí)例分析揭示出 一種能夠用于發(fā)現(xiàn)何時(shí)需要適 當(dāng)函數(shù)的模式或者揭示出需要該函數(shù)的使用實(shí)例已經(jīng)運(yùn) 行,則可以將協(xié)助DLL主動(dòng)載入。這對(duì)于應(yīng)用程序或客戶 端是透明的。例如,如果我們知道函數(shù)"y"總是剛好在 使用實(shí)例"b"需要函數(shù)組之前被調(diào)用,那么我們就可以 開(kāi)始不同步地為使用實(shí)例"b"載入正確的協(xié)助DLL,從 而在我們需要時(shí)可以使用該協(xié)助DLL。 當(dāng)宿主DLL生成 時(shí),這個(gè)觸發(fā)可包含在函數(shù)"y"的代碼中。這種機(jī)制具 有以下優(yōu)點(diǎn) 一個(gè)以上的宿主DLL所需要的協(xié)助DLL可能 被鏈接到相同的使用實(shí)例;因此, 一旦已經(jīng)識(shí)別出該使用 實(shí)例,則它可以為多個(gè)宿主DLL觸發(fā)所有適當(dāng)?shù)膮f(xié)助DLL。 這種機(jī)制的一種變形可以是,函數(shù)"y"使用將觸發(fā)適當(dāng) 載入的系統(tǒng)寬度的通知機(jī)制(例如,發(fā)布和訂閱服務(wù)器)。 調(diào)用協(xié)助DLL的代碼可#_加入到已經(jīng)通過(guò)分析識(shí)別出來(lái) 的樁函數(shù)中。
卸載協(xié)助DLL
使用協(xié)助DLL之后,當(dāng)不再需要該協(xié)助DLL時(shí),可將其卸載并釋 放它所占用的存儲(chǔ)器以便用于其它用途。有多種用于卸載協(xié)助DLL的 機(jī)制。
a) —旦協(xié)助DLL到一個(gè)點(diǎn),在該點(diǎn)上明顯地不再需要使用適 當(dāng)函數(shù),則所述協(xié)助DLL可由應(yīng)用程序或客戶端通過(guò)直接 請(qǐng)求而主動(dòng)載入。這種機(jī)制具有缺點(diǎn),即應(yīng)用程序或客戶 端將需要被修改,從而在相同裝置系列中針對(duì)不同裝置需 要不同版本。
b) 如果使用實(shí)例分析揭示出 一種能夠用于發(fā)現(xiàn)何時(shí)不再需 要適當(dāng)函數(shù)的模式或者揭示出需要該函數(shù)的使用實(shí)例已 經(jīng)結(jié)束,則可以將協(xié)助DLL主動(dòng)卸載。這對(duì)于應(yīng)用程序或 客戶端是透明的。例如,如果我們知道使用實(shí)例"b"所 需要的函數(shù)組在函數(shù)"y"之后不再被調(diào)用,那么我們就 可以在函數(shù)"y,,之后立即卸載用于使用實(shí)例"b,,的協(xié)助 DLL。 當(dāng)宿主DLL生成時(shí),這個(gè)觸發(fā)可包含在函數(shù)"y" 的代碼中。這種機(jī)制具有以下優(yōu)點(diǎn) 一個(gè)以上的宿主DLL 所需要的協(xié)助DLL可能被鏈接到相同的使用實(shí)例;因此, 一旦已經(jīng)識(shí)別出該使用實(shí)例,則它可以為多個(gè)宿主DLL 觸發(fā)對(duì)于多個(gè)協(xié)助DLL的卸載。用于卸載協(xié)助DLL的代碼 可被加入到已經(jīng)通過(guò)分析識(shí)別出來(lái)的樁函數(shù)中。這種機(jī)制 的一種變形可以是,函數(shù)"y"使用將觸發(fā)適當(dāng)卸載的系 統(tǒng)寬度的通知機(jī)制(例如,發(fā)布和訂閱服務(wù)器)。
c) 協(xié)助DLL將在其函數(shù)不再被調(diào)用時(shí)卸載;這種機(jī)制類似于 存儲(chǔ)分頁(yè)連接中所用的最不經(jīng)常使用算法(least frequently used algorithm)。
前面描述了如何將屬于相同系列的不同特征型號(hào)的計(jì)算裝置的 RAM需求與每個(gè)具體型號(hào)的特征等級(jí)相匹配,同時(shí)保持與相同系列中 其它型號(hào)的兼容性。此概念的實(shí)現(xiàn)特別適合于那些在NAND閃存或不 可執(zhí)行的非易失性存儲(chǔ)器中存儲(chǔ)核心操作系統(tǒng)鏡像并且在啟動(dòng)時(shí)將 鏡像拷入RAM的裝置。優(yōu)選的實(shí)施例包括步驟識(shí)別出不同裝置較少 使用的函數(shù),所述不同裝置通過(guò)為這些裝置生成使用實(shí)例進(jìn)行區(qū)分;
然后在該裝置系列中具有完全不同特征的裝置上對(duì)這些使用實(shí)例所 調(diào)用的函數(shù)進(jìn)行描繪。對(duì)于所產(chǎn)生的調(diào)用關(guān)系圖所作的分析揭示出哪
些函數(shù)需要作為核心操作系統(tǒng)鏡像中的宿主DLL進(jìn)行保留,哪些函數(shù) 可以合理地從協(xié)助DLL動(dòng)態(tài)載入。通過(guò)用將調(diào)用和請(qǐng)求傳到協(xié)助DLL 的樁代碼來(lái)替換從宿主DLL移到協(xié)助DLL的那些函數(shù),裝置系列的二 進(jìn)制兼容性得以保持。
從上述具體例子中可見(jiàn),使用本發(fā)明實(shí)施例可導(dǎo)致多個(gè)優(yōu)點(diǎn)。一 些潛在的優(yōu)點(diǎn)是
*屬于一個(gè)裝置系列的NAND閃存計(jì)算裝置中操作系統(tǒng)核心鏡 像的大小可設(shè)計(jì)為與該裝置所需要的函數(shù)相適應(yīng),同時(shí)保 持與該裝置系列中具有完全不同特征的其它裝置之間的二 進(jìn)制兼容性。
NAND閃存中較小的核心操作系統(tǒng)鏡像意味著載入時(shí)該鏡像 占用較少的RAM。
* NAND閃存中較小的核心操作系統(tǒng)鏡像意味著該裝置將啟動(dòng) 得更快。
*需要較少RAM的事實(shí)意味著,具備壓縮特征集的裝置能夠 在較低的成本和消耗較少的自然資源的情況下進(jìn)行制造。
*需要較少RAM的事實(shí)意味著,具備壓縮特征集的裝置將消 耗更少的電力。
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,可以采用替換實(shí)施例,在由所附權(quán)利 要求書(shū)所限定的本發(fā)明的保護(hù)范圍中,可以對(duì)上述方法和實(shí)施例進(jìn)行 各種》務(wù)改。
權(quán)利要求
1. 一種減小用于計(jì)算裝置的計(jì)算機(jī)代碼集的大小的方法,所述代碼集用于當(dāng)打開(kāi)所述計(jì)算裝置電源時(shí)自動(dòng)載入存儲(chǔ)器,并且包括用于執(zhí)行計(jì)算任務(wù)的函數(shù),所述方法包括指定所述計(jì)算裝置的具體應(yīng)用;在所述計(jì)算機(jī)代碼集中識(shí)別出那些將要用來(lái)實(shí)現(xiàn)所述計(jì)算裝置的所述具體應(yīng)用的那些函數(shù);以及,從所述代碼集中去除所識(shí)別出的函數(shù),并且將所識(shí)別出的函數(shù)置于單獨(dú)的計(jì)算機(jī)代碼庫(kù)中。
2. 根據(jù)權(quán)利要求1所述的方法,其中,所述去除所識(shí)別出的函 數(shù)的步驟包括以用于調(diào)用所述單獨(dú)的計(jì)算機(jī)代碼庫(kù)的代碼換所識(shí) 別出的函數(shù),從而使得縮減后的計(jì)算機(jī)代碼集和所述單獨(dú)的計(jì)算機(jī)代 碼庫(kù)相結(jié)合的函數(shù)等于原來(lái)代碼集的函數(shù)。
3. 根據(jù)權(quán)利要求1或2所述的方法,其中,所述識(shí)別出所需函 數(shù)的步驟包括執(zhí)行原始計(jì)算機(jī)代碼集,以在測(cè)試計(jì)算裝置上執(zhí)行所述應(yīng)用;以及,確定在執(zhí)行期間所用的計(jì)算機(jī)代碼集中的函數(shù)。
4. 根據(jù)權(quán)利要求3所述的方法,其中,所述確定在執(zhí)行期間所 用的計(jì)算機(jī)代碼集中的函數(shù)的步驟包括函數(shù)描繪或調(diào)用關(guān)系圖分析 技術(shù)的使用。
5. 根據(jù)前面任一項(xiàng)權(quán)利要求所述的方法,其中,所述計(jì)算裝置 的應(yīng)用表示在所述計(jì)算裝置中不經(jīng)常使用的應(yīng)用程序。
6. 根據(jù)前面任一項(xiàng)權(quán)利要求所述的方法,其中,所述計(jì)算裝置 的應(yīng)用表示對(duì)于裝置的操作不是必需的應(yīng)用程序。
7. 根據(jù)前面任一項(xiàng)權(quán)利要求所述的方法,其中,所述單獨(dú)的計(jì) 算機(jī)代碼庫(kù)是動(dòng)態(tài)鏈接庫(kù)。
8. 根據(jù)前面任一項(xiàng)權(quán)利要求所述的方法,其中,所述將識(shí)別出 的函數(shù)置于單獨(dú)的計(jì)算機(jī)代碼庫(kù)的步驟產(chǎn)生一個(gè)庫(kù),所述庫(kù)中的函數(shù) 根據(jù)相關(guān)計(jì)算裝置的相應(yīng)應(yīng)用進(jìn)行群集。
9. 根據(jù)前面任一項(xiàng)權(quán)利要求所述的方法,其中,所述計(jì)算機(jī)代 碼集是可執(zhí)行代碼。
10. —種經(jīng)過(guò)縮減的計(jì)算機(jī)代碼集,所述計(jì)算機(jī)代碼集從根據(jù)前 面所述任 一 項(xiàng)權(quán)利要求的方法獲得。
11. 一種操作系統(tǒng),包括從根據(jù)權(quán)利要求1-9中任一項(xiàng)權(quán)利要求 所述的方法獲得的經(jīng)縮減的計(jì)算機(jī)代碼集。
12. 根據(jù)權(quán)利要求11所述的操作系統(tǒng),進(jìn)一步包括權(quán)利要求l 中的所述單獨(dú)的計(jì)算機(jī)代碼庫(kù)。
13. —種計(jì)算裝置,包括從根據(jù)權(quán)利要求1-9中任一項(xiàng)權(quán)利要求 所述的方法獲得的經(jīng)縮減的計(jì)算機(jī)代碼集。
14. 根據(jù)權(quán)利要求13所述的計(jì)算裝置,進(jìn)一步包括權(quán)利要求l 中的所述單獨(dú)的計(jì)算機(jī)代碼庫(kù)。
15. 根據(jù)權(quán)利要求14所述的計(jì)算裝置,其中,所述經(jīng)縮減的計(jì) 算機(jī)代碼集和所述單獨(dú)的計(jì)算機(jī)代碼庫(kù)是所述計(jì)算裝置的操作系統(tǒng) 的一部分。
16. 根據(jù)權(quán)利要求14或15所述的計(jì)算裝置,其中,所述單獨(dú)的 計(jì)算機(jī)代碼庫(kù)可以獨(dú)立于所述經(jīng)縮減的計(jì)算機(jī)代碼集被載入到所述 裝置的存儲(chǔ)器中。
17. —種用于創(chuàng)建用于計(jì)算裝置的計(jì)算機(jī)代碼庫(kù)的方法,所述方 法包括指定所述計(jì)算裝置的具體應(yīng)用;識(shí)別出用于執(zhí)行計(jì)算任務(wù)的函數(shù)集,所述函數(shù)集用于實(shí)現(xiàn)所述計(jì) 算裝置的所述具體應(yīng)用;以及,將所述函數(shù)集置于一個(gè)庫(kù)中,以便所述庫(kù)中的函數(shù)根據(jù)所述計(jì)算 裝置的應(yīng)用進(jìn)行編組,而不是根據(jù)由所述函數(shù)集中的各個(gè)函數(shù)所執(zhí)行 的計(jì)算任務(wù)進(jìn)行編組。
18. —種包括用于執(zhí)行計(jì)算任務(wù)的函數(shù)集的動(dòng)態(tài)鏈接庫(kù),其特征 在于,所述函數(shù)集中的每個(gè)函數(shù)用于為相關(guān)計(jì)算裝置執(zhí)行具體應(yīng)用。
全文摘要
一種減少用于計(jì)算裝置的計(jì)算機(jī)代碼集的大小的方法,所述代碼集用于當(dāng)打開(kāi)所述計(jì)算裝置電源時(shí)自動(dòng)載入存儲(chǔ)器,并且包括用于執(zhí)行計(jì)算任務(wù)的函數(shù),所述方法包括指定所述計(jì)算裝置的具體應(yīng)用;在所述計(jì)算機(jī)代碼集中識(shí)別出那些將要用來(lái)實(shí)現(xiàn)所述計(jì)算裝置的所述具體應(yīng)用的那些函數(shù);以及,從所述代碼集中去除所識(shí)別出的函數(shù),并且將所識(shí)別出的函數(shù)置于單獨(dú)的計(jì)算機(jī)代碼庫(kù)中。
文檔編號(hào)G06F9/45GK101395580SQ200780007316
公開(kāi)日2009年3月25日 申請(qǐng)日期2007年3月1日 優(yōu)先權(quán)日2006年3月1日
發(fā)明者托比·格雷, 約翰·羅, 霍華德·普賴斯 申請(qǐng)人:西姆畢恩軟件有限公司