專利名稱:代碼重寫的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及重寫代碼,尤其涉及貫穿從開發(fā)直至執(zhí)行的代碼的整個生命周期能夠重寫代碼的一組可組合重寫器。
背景技術(shù):
程序開發(fā)一般遵循寫源代碼、編輯源代碼、編譯源代碼、以及執(zhí)行結(jié)果二元碼的周期。開發(fā)周期可在各種計算環(huán)境范圍內(nèi)出現(xiàn),例如,從單個開發(fā)者的計算機(jī)到包括開發(fā)計算機(jī)、中間計算機(jī)、和經(jīng)一個或多個網(wǎng)絡(luò)互相連接的企業(yè)調(diào)度計算機(jī)的計算裝置系統(tǒng)。因而,周期也可包括中間步驟,它涉及例如在最終調(diào)度計算機(jī)上程序的安裝和執(zhí)行之前在中間計算機(jī)上安裝和執(zhí)行程序。
程序可能需要在其整個開發(fā)周期的某些點上進(jìn)行變換,有各種原因。例如,可能需要把代碼引入程序,以監(jiān)視其執(zhí)行并確定它是否在正確運(yùn)行。這種“看門狗”代碼可執(zhí)行任務(wù),諸如計算調(diào)用特定功能的次數(shù)或把特定功能的輸出發(fā)送給文件。如果在程序的執(zhí)行中發(fā)現(xiàn)了問題,需要進(jìn)一步變換程序以包括被設(shè)計用來發(fā)現(xiàn)問題來源的附加代碼。
一些編程語言支持允許進(jìn)行諸如“看門狗”代碼引入的某些變換的特征。然而,這些變換特征通常很有限。另外,這種特征通過語言專用編譯器來實現(xiàn)。因而,可能一種編程語言支持“看門狗”代碼變換特征而另一種卻不支持。
在開發(fā)期間變換程序的其它原因可能包括將要調(diào)度程序的變化執(zhí)行環(huán)境。例如,程序可作為操作系統(tǒng)、數(shù)據(jù)庫、或應(yīng)用程序的一部分運(yùn)行。從一個環(huán)境到另一個環(huán)境,語義學(xué)或已定義的系統(tǒng)行為可變化,或者當(dāng)環(huán)境改變時(諸如操作系統(tǒng)升級)它們在該環(huán)境中也會改變。因而,在不同的和變化的環(huán)境中程序的表現(xiàn)會不同。因此,保證程序在不同環(huán)境中以持續(xù)方式執(zhí)行可能需要程序變換。這種變換可通過開發(fā)者把環(huán)境專用代碼引入來源,或通過由編譯器引入這種代碼來完成。另一選項是變換執(zhí)行環(huán)境。每一個這種選項都有大大增加程序、編譯器、或執(zhí)行環(huán)境復(fù)雜度的缺點。
因此,需要有一種方法,它在貫穿程序開發(fā)和調(diào)度周期的不同階段上實現(xiàn)但并未大大增加源程序、編譯器、或執(zhí)行環(huán)境的復(fù)雜度代碼變換。
發(fā)明內(nèi)容
系統(tǒng)和方法通過使用可擴(kuò)展、可組合的一組代碼重寫器提供代碼單元的重寫和變換??蓱?yīng)用在貫穿代碼單元開發(fā)和調(diào)度的各個階段上實現(xiàn)的重寫器。重寫管理器可因各種原因開始代碼單元的重寫,包括由開發(fā)者嵌入代碼單元本身的信息、諸如安全或安裝政策的系統(tǒng)政策等等。重寫管理器標(biāo)識一個或單個重寫器并根據(jù)代碼單元執(zhí)行重寫器,從而產(chǎn)生經(jīng)重寫代碼單元或一系列經(jīng)重寫代碼單元的連續(xù)版本。重寫管理器也可排列重寫器,以在代碼單元上以特定順序執(zhí)行重寫。在根據(jù)代碼單元執(zhí)行重寫器之前,重寫管理器確認(rèn)代碼單元和重寫器兩者的可信度。經(jīng)重寫代碼被存儲在高速緩存中,從而隨后的執(zhí)行代碼單元的調(diào)用不會導(dǎo)致重寫過程的重復(fù)??芍苯訌母咚倬彌_存儲器訪問經(jīng)重寫代碼單元并執(zhí)行之。
相同參考標(biāo)記貫穿所有附圖指向相同組件和特征。
圖1闡述了用來重寫代碼的示例性過程,該過程可能出現(xiàn)在各種開發(fā)和調(diào)度環(huán)境中。
圖2闡述了適于實現(xiàn)代碼重寫的示例性計算環(huán)境。
圖3闡述了適于實現(xiàn)代碼重寫的另一示例性計算環(huán)境。
圖4示出了詳述便于代碼重寫的各種組件的開發(fā)計算機(jī)、中間計算機(jī)、以及調(diào)度計算機(jī)的示例性框圖表示。
圖5示出了詳述用來實現(xiàn)圖1重寫代碼的示例性過程的示例性框圖。
圖6闡述用來實現(xiàn)代碼重寫過程的組件能作為操作系統(tǒng)組件的一部分被嵌入。
圖7把用來實現(xiàn)代碼重寫過程的組件圖示為單機(jī)模塊和各種系統(tǒng)組件的一部分。
圖8把用來實現(xiàn)代碼重寫過程的組件圖示為單機(jī)模塊和各種系統(tǒng)組件的一部分。
圖9闡述用來實現(xiàn)代碼重寫過程的組件被包括在代碼單元本身內(nèi)。
圖10闡述了與圖2所示環(huán)境一致的示例性代碼調(diào)度環(huán)境。
圖11闡述了與圖2所示環(huán)境一致的示例性代碼調(diào)度環(huán)境。
圖12闡述了稱為應(yīng)用兼容性重寫器的示例性系統(tǒng)代碼重寫器。
圖13示出了用來實現(xiàn)代碼重寫的示例性方法的框圖。
圖14闡述了適于實現(xiàn)諸如圖2和圖3示例性環(huán)境中所示的開發(fā)計算機(jī)、中間計算機(jī)、以及調(diào)度計算機(jī)的示例性計算環(huán)境。
具體實施例方式
縱覽以下討論指向通過貫穿代碼單元的開發(fā)和調(diào)度的各個階段上實現(xiàn)的可擴(kuò)展、可組合的一組代碼重寫器,提供代碼單元的重寫和變換的系統(tǒng)和方法。所述系統(tǒng)和方法的優(yōu)點包括向程序開發(fā)者和系統(tǒng)管理員提供功能強(qiáng)大的并未大大增加源程序、編譯器、或執(zhí)行環(huán)境復(fù)雜度的方法,以在貫穿代碼單元的開發(fā)和調(diào)度的不同階段上實現(xiàn)代碼變換。
示例性環(huán)境圖1闡述了用來重寫代碼的基本過程100,所述過程可出現(xiàn)在各種開發(fā)和調(diào)度環(huán)境中。用來重寫代碼單元102的過程100包括遭遇把一個或多個代碼重寫器應(yīng)用到代碼單元102的重寫功能104的代碼單元102,以生成經(jīng)重寫代碼單元106。代碼單元102可包括例如,由語言專用編譯器編譯成可在PC上執(zhí)行的本機(jī)碼的對象模塊、用中間語言(例如抽象和/或機(jī)器無關(guān)語言)為受控代碼環(huán)境調(diào)度的DLL或可執(zhí)行文件集、以解釋性語言寫成的腳本(script)程序等等。
代碼單元102可能在開發(fā)和調(diào)度的各個階段遭遇重寫功能104。因此,重寫功能104在代碼單元102的開發(fā)、調(diào)度和執(zhí)行中涉及的不同場景和不同計算機(jī)上可操作。一般而言,重寫功能104接收代碼單元102、確定代碼單元是否要重寫、標(biāo)識并排列要用來重寫代碼單元的重寫器、并根據(jù)代碼單元便于重寫器的執(zhí)行,導(dǎo)致經(jīng)重寫的代碼單元106。重寫功能104一般包含和/或包括重寫管理器、被配置重寫代碼單元102的一個或多個代碼重寫器、以及標(biāo)識要應(yīng)用到代碼單元的重寫器及其順序的信息(例如重寫器列表)。
圖2和3闡述適于實現(xiàn)代碼重寫的示例性環(huán)境。僅作為示例而非限制地提供圖2和3的示例性環(huán)境。因此,可以理解其中在代碼開發(fā)和調(diào)度各個階段可實現(xiàn)代碼重寫的許多其它計算環(huán)境是可能的,如此所述。
圖2的示例性環(huán)境200顯示了適于實現(xiàn)代碼重寫的開發(fā)和調(diào)度場景,其中代碼在相對直接的分布信道上開發(fā)和分配。通常,代碼單元106在開發(fā)計算機(jī)202上開發(fā),并被分配到可在其中安裝和執(zhí)行的調(diào)度計算機(jī)204上。然而,可以理解,在計算機(jī)202上開發(fā)的代碼單元106也能在計算機(jī)202上開發(fā)和執(zhí)行,且代碼重寫功能104可根據(jù)代碼單元102在計算機(jī)202和204上(其中一臺或兩臺)實現(xiàn)以生成經(jīng)重寫代碼單元106。
代碼單元102可通過若干方式從開發(fā)計算機(jī)202傳送到調(diào)度計算機(jī)204,包括例如經(jīng)網(wǎng)絡(luò)206將其從開發(fā)計算機(jī)202下載到調(diào)度計算機(jī)204,或者在各種便攜式介質(zhì)208上(例如盤、壓縮閃卡)將其從開發(fā)計算機(jī)202傳送到調(diào)度計算機(jī)204。根據(jù)特定系統(tǒng)配置,網(wǎng)絡(luò)206可包括本地和遠(yuǎn)程連接。因而,網(wǎng)絡(luò)206可包括例如調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器、LAN(局域網(wǎng))、WAN(廣域網(wǎng))、企業(yè)內(nèi)部互聯(lián)網(wǎng)、因特網(wǎng)、或其它適當(dāng)?shù)耐ㄐ胚B接。
圖3顯示了適于實現(xiàn)代碼重寫的另一示例性環(huán)境300,其中代碼在更復(fù)雜的分布系統(tǒng)上開發(fā)和調(diào)度。環(huán)境300包括通常如上所述的開發(fā)計算機(jī)202、調(diào)度計算機(jī)204、加上中間計算機(jī)302。調(diào)度計算機(jī)204在諸如公司防火墻內(nèi)保護(hù)的公司內(nèi)部互聯(lián)網(wǎng)的企業(yè)計算系統(tǒng)304內(nèi)。在圖3的環(huán)境300中,代碼單元102的開發(fā)和調(diào)度可包括在調(diào)度計算機(jī)204上調(diào)度代碼單元102之前,經(jīng)網(wǎng)絡(luò)206把代碼單元102從開發(fā)計算機(jī)202傳送到中間計算機(jī)302。通常,這種中間計算機(jī)302用來把代碼單元分階段,并將它們分配到調(diào)度計算機(jī)204。發(fā)生在中間計算機(jī)302上的代碼重寫可與發(fā)生在開發(fā)或調(diào)度計算機(jī)上的代碼重寫不同。例如,中間計算機(jī)上的代碼重寫可把代碼重寫成與企業(yè)304的調(diào)度計算機(jī)204上某些系統(tǒng)和/或安全要求相適合。另外,代碼單元102可作為其開發(fā)的一部分暫時在中間計算機(jī)302上安裝和執(zhí)行,以便在將其移到調(diào)度計算機(jī)204之前證實其性能。如下所述參照一示例性實施例,代碼單元102可由一個或多個重寫器在環(huán)境300各個計算機(jī)202、204和302上貫穿其開發(fā)、安裝和執(zhí)行的不同階段進(jìn)行重寫。
圖2和3的計算機(jī)202、204和302可實現(xiàn)為各種常規(guī)計算裝置的任一種,包括例如臺式PC、筆記本或其它便攜式計算機(jī)、工作站、服務(wù)器、典型計算機(jī)等等。計算機(jī)202、204和302通常能執(zhí)行普通的計算功能,例如電子郵件、日程安排、任務(wù)組織、字處理、網(wǎng)絡(luò)瀏覽等等。計算機(jī)202、204和302運(yùn)行一操作系統(tǒng),諸如來自華盛頓州Redmond Microsoft公司的Windows操作系統(tǒng)。開發(fā)計算機(jī)202、調(diào)度計算機(jī)204和中間計算機(jī)302的一種示例性實現(xiàn)將參照圖14在后面進(jìn)行更詳細(xì)的描述。
示例性實施例圖4是計算機(jī)202、204和302的框圖表示,它闡述有助于描述圖3示例性環(huán)境300中的代碼重寫的各種組件。代碼重寫可在計算機(jī)202、204和302的全部或任一臺上出現(xiàn),且一臺計算機(jī)上的代碼重寫可影響另一臺計算機(jī)隨機(jī)的代碼重寫。例如,開發(fā)計算機(jī)202上重寫功能104的實現(xiàn)可導(dǎo)致傳送給中間計算機(jī)302的經(jīng)重寫代碼單元。來自開發(fā)計算機(jī)202的經(jīng)重寫代碼單元可能會被中間計算機(jī)302再次重寫,然后傳送到調(diào)度計算機(jī)204,而在其上該代碼單元可能會被又一次地重寫,圖4中的開發(fā)計算機(jī)202包括由開發(fā)者用諸如C、C++、C#、Java、MicrosoftVisual Basic等寫成的源程序400。每一臺圖4上的計算機(jī)202、302和204可包括各種編譯器402。從一臺計算機(jī)到另一臺計算機(jī)編譯器402會不同,因此在開發(fā)計算機(jī)202、中間計算機(jī)302、和調(diào)度計算機(jī)204上它們被分別分配以參考標(biāo)記402(1)、402(2)和402(3)。編譯器402可包括語言專用編譯器,其中每一個被配置為把專用語言的源程序編譯成一個或多個代碼單元102。代碼單元102可包括例如,編譯成可在PC上執(zhí)行的本機(jī)碼的對象模塊、適于在受控代碼環(huán)境中執(zhí)行的編譯為二元碼或中間語言(例如抽象和/或機(jī)器無關(guān)語言)的DLL或可執(zhí)行文件集、以解釋性語言寫成的腳本程序等等。因此,編譯器402可包括把源語言編譯成運(yùn)行于特定平臺上的本機(jī)碼的本機(jī)碼編譯器,以及把源語言編譯成諸如中間語言或二元碼的受控代碼的受控代碼編譯器。
另外,編譯器402可包括把諸如中間語言或二元碼的平臺無關(guān)代碼(即受控代碼)變換成在特定處理器上執(zhí)行的本機(jī)碼的執(zhí)行前編譯器。因而,編譯器402還可包括在執(zhí)行之前把受控代碼(例如二元碼、中間語言)編譯成本機(jī)碼的JIT(運(yùn)行時編譯執(zhí)行)編譯器,以及把受控代碼預(yù)先編譯成本機(jī)碼從而使其在安裝后準(zhǔn)備好執(zhí)行的安裝時編譯(compile-on-install)編譯器。
每臺計算機(jī)202、302和204可包括代碼重寫功能104,該功能被配置為接收代碼單元102、確定代碼單元是否要重寫、標(biāo)識并排列要被應(yīng)用以重寫代碼單元的重寫器、并根據(jù)代碼單元便于重寫器的執(zhí)行(例如,把代碼單元102和適當(dāng)?shù)闹貙懫餮b入RAM用來在處理器上執(zhí)行)。如圖5中所示,代碼重寫功能104包含和/或包括重寫管理器500、一個或多個被配置為重寫代碼單元102的代碼重寫器502、以及標(biāo)識要應(yīng)用到代碼單元的重寫器及其順序/序列的信息(例如重寫器列表)。
每臺計算機(jī)202、302和204還包括各種系統(tǒng)組件404,諸如操作系統(tǒng)(OS)、系統(tǒng)政策(諸如安全政策)、應(yīng)用、工具、執(zhí)行環(huán)境等等。代碼重寫功能104的一種或多種組件(即重寫管理器500、重寫器502、重寫器清單504)可嵌入到任一個或多個各種系統(tǒng)組件404中。例如,圖6示出了代碼重寫功能104的所有組件,包括重寫管理器500、重寫器502以及重寫器列表504都作為操作系統(tǒng)的一部分被嵌入。該場景在例如某些應(yīng)用變得不適合操作系統(tǒng)的升級版時會有用。把重寫功能104(重寫管理器500、重寫器502以及重寫器列表504)包含在升級版操作系統(tǒng)中可被用來更改這種應(yīng)用以確保其與升級版操作系統(tǒng)的兼容性。
圖7和8顯示了示例性實現(xiàn),其闡述了代碼重寫功能104的組件可以是單機(jī)模塊和/或可被分散給各種系統(tǒng)組件404。圖7中的重寫管理器500是在調(diào)度計算機(jī)204上執(zhí)行的系統(tǒng)安全政策404(3)的組件,而重寫器502和重寫器列表504則是單機(jī)模塊。因而,作為在調(diào)度計算機(jī)204上實現(xiàn)的安全政策404(3)的一部分,重寫管理器500將執(zhí)行以確定是否需要重寫代碼單元以遵循安全政策。如果需要,重寫管理器將繼續(xù),以通過使用重寫列表504來標(biāo)識并排列適當(dāng)?shù)闹貙懫?02,然后根據(jù)代碼單元執(zhí)行被標(biāo)識的重寫器。在圖8中,重寫管理器500被示為中間計算機(jī)302上安裝工具404(2)的組件,而重寫器502和重寫列表504是單機(jī)模塊。因而,當(dāng)安裝代碼單元102時,安裝工具404(2)中的重寫管理器500將執(zhí)行以確定是否需要重寫代碼單元。如果需要,重寫管理器將繼續(xù),以通過使用重寫列表504來標(biāo)識并排列適當(dāng)?shù)闹貙懫?02,然后根據(jù)代碼單元執(zhí)行被標(biāo)識的重寫器。
圖9示出了開發(fā)者如何將部分代碼重寫器組件包含到代碼單元102本身中。如圖9中所示,開發(fā)者已經(jīng)把重寫器列表504包含在代碼單元102本身中。重寫管理器500被示為是JIT(運(yùn)行時編譯執(zhí)行)編譯器的一部分,而重寫器502是單機(jī)模塊。因而,開發(fā)者能使用代碼單元102本身作為組合重寫器502集的一種方法,以重寫代碼單元102。例如,開發(fā)者可將重寫指令(例如標(biāo)記、屬性、字符串等等)嵌入源程序400中,這些指令會被傳遞到新編譯的代碼單元102并指示重寫管理器500使用一個或多個重寫器來重寫代碼單元102。這樣,開發(fā)者有能力組合在貫穿代碼單元開發(fā)和調(diào)度的各個階段上實現(xiàn)的一組代碼重寫器。在由JIT編譯器402對代碼單元102進(jìn)行隨后的執(zhí)行前編譯之后,JIT編譯器402中的重寫管理器500從嵌入在代碼單元中的重寫器列表504中,確定哪個重寫器502要根據(jù)代碼單元執(zhí)行。代碼單元102因而在其由JIT編譯器402編譯成本機(jī)碼和隨后的執(zhí)行之前進(jìn)行重寫。
該過程使開發(fā)者能把一組重寫器串起來或“組合”起來,其中每個重寫器將輪流以特定方式更改代碼單元。在一優(yōu)選實施例中,當(dāng)代碼單元由重寫器“組合”組中的每一個重寫器持續(xù)重寫時,每個經(jīng)重寫代碼單元的格式保持一致。因此,作為重寫器輸入的代碼單元與作為重寫器輸出的代碼單元有著一樣的格式。這使開發(fā)者能組合任意組重寫器,每個重寫器以相同格式或表示攝入或釋出代碼單元。在一可選實施例中,每個重寫器可以與輸入代碼格式不同的格式輸出代碼單元。然而,該可選實施例有點限制了開發(fā)者在組合重寫器組時可達(dá)到的靈活性和隨意性。
再參看圖5,示出了可對于圖4中所示的任何或所有計算機(jī)202、304和204描述的一般代碼重寫過程。代碼重寫過程包括信任模型的實現(xiàn),該模型特別適于說明在例如計算機(jī)202、304和204上貫穿其開發(fā)和調(diào)度發(fā)生在代碼單元上的各種變換。因而,重寫管理器404支持在重寫代碼單元前后提供證實其身份和可信度的信任模型。
在典型信任模型中,開發(fā)者把數(shù)字簽名附在代碼單元上。然后數(shù)字簽名能被用來鑒別代碼單元的身份,并確保未篡改或更改代碼單元的原始分配版。一般提供有使用數(shù)字簽名的技術(shù)和軟件。在一種這樣的技術(shù)中,可使用適當(dāng)軟件獲取代碼單元的散列或數(shù)學(xué)歸納。然后可使用從公私鑰權(quán)限中獲取的私鑰對散列加密。加密鑰是能與代碼單元一起發(fā)送的數(shù)字簽名。然后該組合被送往的用戶(即計算機(jī))對代碼單元取散列(數(shù)學(xué)歸納),并使用公鑰對散列解密。當(dāng)散列相符,代碼單元被鑒別。因而,一般信任原則是如果代碼單元已從其原始“簽名”版作了更改,那么其簽名也將被更改且代碼單元將不再受信任。
因為當(dāng)前描述的代碼重寫系統(tǒng)包括對代碼單元的重寫,以上所述的典型信任模型并不適合。經(jīng)一次或多次代碼重寫而更改的數(shù)字化“簽名”代碼單元基于在重寫期間所做的變化將不能被證實為可靠。因此,圖5所示的一般代碼重寫過程包括信任模型的實現(xiàn),該模型特別適于說明在例如計算機(jī)202、304和204上貫穿其開發(fā)和調(diào)度發(fā)生在代碼單元上的各種變換。
在圖5所示的一般重寫過程中,代碼單元102由代碼重寫功能104的重寫管理器500接收。該代碼單元包括數(shù)字簽名“簽名#1”。重寫管理器500開始時確定是否需要重寫代碼單元102。參照圖6-9如上所述,可用各種方法作出這種確定。例如,重寫管理器500可確定當(dāng)代碼單元102從開發(fā)計算機(jī)202上的源程序400編譯(編譯成例如本機(jī)碼、二元碼、中間語言等)時,需要重寫代碼單元102。
然后重寫管理器500標(biāo)識來自一組重寫器502的適當(dāng)重寫器并對其進(jìn)行排序。這時通過查閱一重寫列表504而完成的。重寫列表504向重寫管理器500標(biāo)識重寫器,并提供根據(jù)代碼單元102要執(zhí)行的已標(biāo)識重寫器的順序。然后重寫管理器500從一個或多個重寫器502的組合中訪問已標(biāo)識重寫器,并將它們連同代碼單元102裝入存儲器(RAM)。在根據(jù)代碼單元102執(zhí)行已標(biāo)識重寫器之前,重寫管理器500鑒別重寫器和代碼單元102的數(shù)字簽名(通過使用公鑰解密散列或數(shù)學(xué)歸納的代碼單元102的“簽名#1”和重寫器502的“簽名#2”)以證實其身份和可信度。如果數(shù)字簽名是可信的,重寫管理器根據(jù)代碼單元102執(zhí)行已標(biāo)識重寫器以生成經(jīng)重寫代碼單元106。重寫管理器還可為經(jīng)重寫代碼單元106產(chǎn)生數(shù)字簽名(例如“簽名#3”,是使用私鑰加密的經(jīng)重寫代碼單元106的散列或數(shù)學(xué)歸納),并把經(jīng)重寫代碼106連同該簽名一起存儲在重寫高速緩存406中。
一般而言,根據(jù)代碼單元102執(zhí)行的代碼重寫器502能打開磁盤上(如果已經(jīng)不在存儲器上)的代碼單元文件,裝入本機(jī)碼、二元碼、中間語言、元數(shù)據(jù)等,并把模塊的邏輯機(jī)構(gòu)、類型、方法等恢復(fù)成“存儲器上”的數(shù)據(jù)結(jié)構(gòu)。代碼重寫器可遍歷這些數(shù)據(jù)結(jié)構(gòu),并通過例如改變方法(也稱為“功能”)主體來任意插入或移除或更改代碼來對類型和方法表示作任意的更改。代碼重寫器可插入或刪除整個的模塊、類型、方法、字段等等。當(dāng)從代碼單元自身指向重寫時(例如由標(biāo)記、屬性、字符串等等;如上圖9;如下圖10和11),所作的更改可由附加的指示、標(biāo)記、屬性、字符串等引導(dǎo),它們可以在代碼單元外部,或嵌在代碼單元中,有時則附屬于代碼單元中的特定元素或位置來更改或控制特定代碼重寫器對代碼單元所做的改變。
再參看圖4,所述信任模型說明在計算機(jī)202、304和204上貫穿其開發(fā)和調(diào)度發(fā)生在代碼單元102上的各種變換。例如,可以把開發(fā)計算機(jī)202的經(jīng)重寫代碼單元106(1)傳送到中間計算機(jī)302作為代碼單元102(2)。盡管代碼單元102(2)已經(jīng)從開發(fā)計算機(jī)202上的代碼單元原始版102(1)作了更改(即更改成經(jīng)重寫代碼單元106(1)),但代碼單元102(2)通常在代碼更改發(fā)生后才會作數(shù)字簽名。因此,中間計算機(jī)302將仍能基于伴隨代碼單元102(2)的數(shù)字簽名來鑒別該代碼單元的身份和可信度。
重寫高速緩存406用來存儲經(jīng)重寫代碼單元106,從而用來對代碼單元102編譯、安裝、執(zhí)行等等的隨后調(diào)用不會導(dǎo)致重寫過程的重復(fù)。因而,當(dāng)代碼單元102已由特定重寫器或重寫器組502重寫時,重寫管理器500把結(jié)果經(jīng)重寫代碼單元106存儲在重寫高速緩存406中,并在對于特定重寫器或重寫器組502有必要避免重復(fù)重寫過程時,從高速緩存406訪問經(jīng)重寫代碼單元106。一旦重寫了代碼單元102并將其作為經(jīng)重寫代碼單元106存儲在重寫高速緩存406中,就無需又經(jīng)過重寫過程而可從高速緩存406直接訪問并執(zhí)行它。
圖10和11示出了相對于在受控代碼環(huán)境中代碼而實現(xiàn)的代碼重寫功能的更具體實例。受控代碼環(huán)境管理對以若干受支持語言的任一種所寫成程序的執(zhí)行,允許這些程序共享以任一語言寫成的普通面向?qū)ο箢悺J芸卮a環(huán)境的實例包括SunMicrosystems為運(yùn)行從Java語言編譯的程序提供的Java虛擬機(jī),以及是美國華盛頓州Redmond微軟公司創(chuàng)建的.NETTM平臺一部分的公共語言運(yùn)行時(CLR)。圖10和11所示實例參照微軟CLR在此描述。其它有關(guān).NETTM框架基礎(chǔ)信息可在眾多介紹性文本中得到,諸如2003年微軟出版社Pratt的“介紹微軟.NET”第三版。
CLR是微軟.NETTM框架的核心,并為所有.NET代碼提供執(zhí)行環(huán)境。因而,被創(chuàng)建以使用CLR并運(yùn)行于CLR中的代碼被稱為“受控代碼”。CLR提供程序執(zhí)行所需的各種功能和服務(wù),包括運(yùn)行時編譯執(zhí)行(JIT)編譯、分配和管理存儲器、實施類型安全、故障處理、線程管理和安全。CLR在第一次調(diào)用.NETTM例程之后裝入。為了得到最佳性能,通常在執(zhí)行之前把受控代碼編譯成本機(jī)碼。
當(dāng)編寫受控代碼時,調(diào)度單元被稱為組裝件(assembly),它是作為一個單元進(jìn)行版本化及調(diào)度的一個或多個文件的組裝件。組裝件是.NETTM框架應(yīng)用的創(chuàng)建基塊。所有受控類型和資源都包含于組裝件中,并被標(biāo)記為僅在組裝件內(nèi)可訪問,或從其它組裝件中的代碼可訪問。組裝件被包裝為DLL或可執(zhí)行(EXE)文件。當(dāng)可執(zhí)行文件可自己運(yùn)行時,在現(xiàn)有應(yīng)用中必須提供DLL。
為了簡化討論,圖10和11示出了與以上所述參照圖2的環(huán)境200相一致的示例性調(diào)度環(huán)境。因此,源程序400在開發(fā)計算機(jī)202上開發(fā),并以相對直接的方式將其分配(例如經(jīng)網(wǎng)絡(luò)206下載或用磁盤傳送)給調(diào)度計算機(jī)204。另外,為了一致性,在受控代碼環(huán)境中可被另外稱為“組裝件”的代碼調(diào)度單元在圖10和11的代碼重寫示例中被稱為代碼單元。
在圖10中,名為“Hello.cs”的示例性源程序400,用C#編程語言寫成,并包括請求特定代碼重寫器的“重寫定制屬性”,以及不是代碼重寫所特有的其它定制屬性。屬性都用方括弧“[]”指出。這兩種顯示的定制屬性被嵌入程序源代碼400中,并應(yīng)用于類中以便描述這些類的特征性。因而,在圖10的源程序400中,屬性“[Attr]”是被應(yīng)用于類“T”以描述類“T”部分特征的定制屬性。
定制屬性是開發(fā)者包括在源程序400中的可定制標(biāo)注,它們可通過源程序400的編譯402帶到代碼單元102(1)。一般而言,.NET框架實施例允許定制屬性集的隨意擴(kuò)展。該定制屬性不是固定的。相反,任何代碼可引入新的用戶定義定制屬性或成為其目標(biāo)。定制屬性可應(yīng)用于代碼單元102(1)中的類型、方法等等。應(yīng)用于代碼單元102(1)的其類型源自重寫定制屬性類型的定制屬性被稱為“重寫定制屬性”。重寫定制屬性將觸發(fā)代碼重寫器(例如來自一組代碼重寫器502)在代碼單元102(1)上的應(yīng)用。因此重寫定制屬性能構(gòu)成指定或確定要應(yīng)用于代碼單元102(1)的重寫列表504。在源程序400中,重寫定制屬性“RCA1”和“RCA2”被分別標(biāo)識在括弧“[RCA1]”和“[RCA2]”中。當(dāng)要根據(jù)代碼單元102(1)應(yīng)用已標(biāo)識代碼重寫器時,開發(fā)者可在重寫定制屬性中指定,從而指示了用來根據(jù)代碼單元102(1)執(zhí)行已標(biāo)識重寫器的順序。
圖10的編譯器402是C#編程語言專用的C#編譯器(CSC)。CSC編譯器402是可駐留在開發(fā)計算機(jī)402上的各種語言專用.NET編譯器之一,用來把各種語言專用源程序編譯成包括公共的處理器無關(guān)的中間語言(IL)和元數(shù)據(jù)的代碼單元。第一遍時,編譯器402編譯源程序400、執(zhí)行錯誤檢查、并建立名為“hello.exe”的代碼單元102(1)(代碼單元102的版本1)。源程序400中包括重寫定制屬性((“[RCA1]”和“[RCA2]”)的定制屬性表示被傳遞到代碼單元102(1)的元數(shù)據(jù)中。
圖10和11的受控代碼示例中的代碼單元102包括IL和元數(shù)據(jù)。IL以抽象方式描述發(fā)生在方法主體中的操作。元數(shù)據(jù)包括定制屬性和表格,它們描述代碼單元的結(jié)構(gòu)代碼單元包括許多模塊、每個模塊包括許多類型定義、每個類型定義包括許多字段和方法(代碼、功能)、每種方法有一返回類型和一列正式變量類型等等。在此情形中,元數(shù)據(jù)指示已從源程序400傳遞了兩個重寫器定制屬性(RCA1和RCA2),且有描述T的方法的稱為“T”的類型和表格。T的方法之一稱為Main。諸如屬性“Attr”的其它定制屬性也可存在,但是這些表示重寫器定制屬性且不觸發(fā)任何代碼重寫。
第二遍時,編譯器402的重寫管理器組件500被配置為檢查在第一遍時建立的代碼單元102(1)。檢查之后,如果編譯器402的重寫管理器500發(fā)現(xiàn)任何請求代碼重寫器502的任何重寫定制屬性(例如RCA1、RCA2),重寫管理器500裝入存儲器(未示出)并根據(jù)代碼單元102(1)運(yùn)行被請求的代碼重寫器502。重寫管理器500又鑒別關(guān)聯(lián)于代碼單元102(1)和代碼重寫器502兩者的數(shù)字簽名,以根據(jù)代碼單元102(1)在運(yùn)行被請求代碼重寫器502之前證實其身份和可信度,如上一般所述。
在此例中,兩個稱為RCA1和RCA2的重寫定制屬性分別請求應(yīng)用組裝件重寫器CR1和CR2以更改代碼單元102(1)。然而,定制屬性RCA2被用指示(例如下標(biāo)“T”)作了標(biāo)記,它指示開發(fā)者不希望CR2代碼重寫器根據(jù)代碼單元102(1)在開發(fā)計算機(jī)202上運(yùn)行。源程序400包括第二個重寫定制屬性RCA2上的“DeploymentTime”標(biāo)記,該標(biāo)記由編譯器402在第一遍時帶到代碼單元102(1)。因此,第二遍時,編譯器402的重寫管理器500識別出由已標(biāo)記屬性RCA2請求的CR2代碼重寫器不會根據(jù)代碼單元102(1)在開發(fā)計算機(jī)202上運(yùn)行。因此,在此例中,僅有代碼重寫器CR1根據(jù)代碼單元102(1)在開發(fā)計算機(jī)202上運(yùn)行。這導(dǎo)致已更改代碼單元102(2)(代碼單元102的版本2)。另外,編譯器402用以上所述的方式任選地產(chǎn)生數(shù)字簽名,并將其附加在已更改代碼單元102(2)上。代碼單元102(2)的最后版本被分配到調(diào)度計算機(jī)204,用來安裝和執(zhí)行。注意圖10中類T的方法“Main1”的圖示旨在指示代碼單元102(1)中類T的原始方法“Main0”已由CR1對其原始版本作了更改。
已被標(biāo)記用于后來實現(xiàn)的重寫定制屬性,諸如在調(diào)度計算機(jī)204上的屬性(例如RCA2T)被傳遞給已更改代碼單元102(2)。已將被請求代碼重寫器(例如CR1)應(yīng)用到開發(fā)計算機(jī)202上代碼單元102(1)的其它重寫定制屬性也可被傳送到已更改代碼單元102(2),如圖10所示。然而,這并非是必須的,因為這些屬性的目標(biāo)都已達(dá)到。
參照圖11,調(diào)度計算機(jī)204可包括任意數(shù)量的應(yīng)用程序代碼單元,諸如從開發(fā)計算機(jī)202分配的代碼單元102(2)。如上所述,代碼單元102包括在.NET編譯器上編譯的,并被配置為在CLR(公共語言運(yùn)行時)1100受控執(zhí)行環(huán)境中執(zhí)行的IL代碼和元數(shù)據(jù)。另外,代碼單元102還可包括諸如RCA1和RCA2的各種重寫器定制屬性,這些屬性被配置為請求用來在不同時間更改代碼單元102的代碼重寫器,諸如當(dāng)代碼單元102安裝在調(diào)度計算機(jī)204上時。此外,代碼單元102可包括用來證實代碼單元102本身真實性的一個或多個數(shù)字簽名,以及由重寫器定制屬性在代碼單元102中請求的任何代碼重寫器502。
當(dāng)代碼單元102(2)裝入調(diào)度計算機(jī)204時,體現(xiàn)為CLR 1100中裝入程序1102的重寫管理器500把代碼單元102(2)裝入存儲器并對其進(jìn)行檢查。檢查之后,CLR1100的重寫管理器500確定代碼單元102(2)的真實性和可信度。真實性基于代碼單元102(2)中發(fā)現(xiàn)的代碼單元數(shù)字簽名得到證實。以上簡述了使用數(shù)學(xué)散列和公-私鑰鑒別的這種證實的一個示例。代碼單元102(2)的可信度也可部分地基于CLR1100的一些其它附加安全政策得到確定。例如,CLR 1100安全政策可信任來自某些發(fā)行商或網(wǎng)站的代碼單元,并也可拒絕來自某些其它發(fā)行商或網(wǎng)站的代碼單元。一般而言,安全政策將信任先前已在調(diào)度計算機(jī)204上安裝的系統(tǒng)代碼單元。
在檢查代碼單元202(2)之后,CLR 1100的重寫管理器200確定是否有在調(diào)度計算機(jī)204上執(zhí)行之前請求代碼重寫器502(2)更改代碼單元102(2)的諸如RCA2T的任何潛在(未決的)重寫定制屬性(即被標(biāo)記用來于執(zhí)行前在調(diào)度計算機(jī)204上實現(xiàn)的重寫定制屬性)。除了請求重寫器去更改代碼單元102(2)的潛在重寫定制屬性,CLR 1100自身可啟動它直到需要根據(jù)代碼單元102(2)運(yùn)行的一個或多個系統(tǒng)代碼重寫器。系統(tǒng)重寫器的一個示例是以下要更詳細(xì)討論的“應(yīng)用兼容性重寫器”。
當(dāng)請求重寫器時,CLR 1100的重寫管理器500裝入來自一組駐留重寫器502(2)的第一個任意重寫器,并啟動在代碼單元102(2)上執(zhí)行的相同類型的真實性和可信度檢查。因而,在圖11示例中,CLR 1100的重寫管理器500從重寫器502(2)裝入CR2,并證實CR2的真實性和可信度。
在成功證實代碼單元102(2)和重寫器(例如CR2)之后,CLR 210的重寫管理器200根據(jù)代碼單元102(2)運(yùn)行重寫器CR2,導(dǎo)致已更改代碼單元102(2)。如果代碼單元102(2)中的其它重寫定制屬性也請求使用其它重寫器,則CLR 1100的重寫管理器500以相同方式根據(jù)代碼單元102(2)裝入、證實、并運(yùn)行其它重寫器。在把所有被請求重寫器應(yīng)用到代碼單元102(2)之后,最終的已更改代碼單元102(3)被存儲在調(diào)度計算機(jī)204上的重寫高速緩存406上。(重寫管理器500也可選擇高速緩存一個或多個中間被重寫組裝件而不是最終的已重寫組裝件。)然后CLR 1100管理使用JIT(運(yùn)行時編譯執(zhí)行)編譯器把已更改代碼單元102(3)編譯成本機(jī)碼1104。本機(jī)碼1104然后在處理器1106上運(yùn)行。
在一可選實施例中,用代碼重寫器把代碼單元102(2)更改成102(3)的過程,以及隨后的把代碼單元102(3)譯成本機(jī)碼1104的翻譯,可使用把受控代碼預(yù)先編譯成本機(jī)碼(從而使其可以在安裝后執(zhí)行)的安裝時編譯(compile-on-install)編譯器在把代碼單元102(2)安裝在調(diào)度計算機(jī)204上之后發(fā)生。
把最終的更改后代碼單元102(3)存儲在調(diào)度計算機(jī)204上的重寫高速緩存406,使CLR 1100的重寫管理器500為所有對執(zhí)行代碼單元102(3)的隨后調(diào)用領(lǐng)先進(jìn)行代碼重寫過程。因而,當(dāng)代碼單元102(3)將來出現(xiàn)時,CLR 210的重寫管理器500從重寫高速緩存406訪問代碼單元102(3)的被緩存最終重寫版,并管理將代碼單元102(3)譯成本機(jī)碼1104的翻譯,用來在處理器1106上執(zhí)行。
高速緩存無效算法1108被配置為用來確定存儲在重寫高速緩存406上的代碼單元是否保持有效。算法1108通常制定用來使重寫緩存器406的部分或所有內(nèi)容無效并將之丟棄的預(yù)定政策。例如,這種政策可包括當(dāng)代碼單元改變或給定代碼重寫器的參數(shù)改變時使高速緩存無效。
圖12示出了參照圖11如上所述的相同代碼重寫器的一個示例。圖12顯示了調(diào)度計算機(jī)204上的“應(yīng)用兼容性重寫器”1200以及便于應(yīng)用兼容性重寫器1200的實現(xiàn)和討論的其它組件,包括ACR數(shù)據(jù)庫1202、操作系統(tǒng)1204、重寫高速緩存406以及代碼單元102。盡管對應(yīng)用兼容性重寫器1200的當(dāng)前討論并非以受控代碼環(huán)境和CLR的上下文進(jìn)行,可以連接這種討論一般都適用于受控和非受控代碼環(huán)境。
一般而言,應(yīng)用兼容性重寫器1200是說明與特定現(xiàn)有應(yīng)用程序相一致的在平臺/操作系統(tǒng)上所作變化的代碼重寫器。例如,圖12的代碼單元102指示其為自處理應(yīng)用而操作系統(tǒng)1204指示其為升級版。常常,當(dāng)操作系統(tǒng)升級時,某些應(yīng)用程序需要打補(bǔ)丁或者進(jìn)行修理以便繼續(xù)在新操作系統(tǒng)環(huán)境中正常運(yùn)行。
應(yīng)用兼容性重寫器1200維護(hù)各種應(yīng)用程序與平臺/操作系統(tǒng)升級版的兼容性。例如,當(dāng)嘗試裝入用來執(zhí)行的代碼單元102時,應(yīng)用兼容性重寫器1200被配置為用來檢查代碼單元102并確定其是否與操作系統(tǒng)1204的升級版相兼容。應(yīng)用兼容性重寫器1200標(biāo)識代碼單元102(例如某自處理應(yīng)用)并查閱ACR數(shù)據(jù)庫1202以查看為了與升級后的操作系統(tǒng)1204相兼容,是否需要重寫代碼單元102的任意部分。如果需要,應(yīng)用兼容性重寫器1200對代碼單元102應(yīng)用適當(dāng)?shù)男蘩怼?br>
示例性方法用來實現(xiàn)代碼重寫的示例方法將主要參照圖13的流程圖進(jìn)行描述。方法應(yīng)用于以上參照圖1-12所述的示例性實施例。盡管一種或多種方法通過流程圖以及關(guān)聯(lián)于流程圖方框的文字來揭示,可以理解所述方法的元素不必按其顯示的順序執(zhí)行,且其它可選順序會導(dǎo)致類似的優(yōu)勢。此外,方法并非是排他的,可單獨或結(jié)合另外的方法執(zhí)行。所述方法的元素可用任何適當(dāng)方式執(zhí)行,包括通過例如ASIC上的硬件邏輯塊或者定義在計算機(jī)可讀介質(zhì)上的計算機(jī)可讀指令的執(zhí)行。
在此所用的“計算機(jī)可讀介質(zhì)”可以是能包含、存儲、通信、傳播或傳輸由處理器適用或執(zhí)行的任何裝置。計算機(jī)可讀介質(zhì)可以是,而非限制,電子、磁性、光學(xué)、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、儀器、裝置或傳播介質(zhì)。計算機(jī)可讀介質(zhì)的更多具體示例包括,在其它介質(zhì)中的,有一根或多根接線的電子(電氣)連接、便攜式計算機(jī)盤(磁性)、隨機(jī)存取存儲器(RAM)(磁性)、只讀存儲器(ROM)(磁性)、可擦除可編程只讀存儲器(EPROM或閃存)、光纖(光學(xué))、可重寫壓縮盤(CD-RW)(光學(xué))、以及便攜式壓縮盤只讀存儲器(CD-ROM)(光學(xué))。
在方法1300的方框1302,接收到代碼單元。由作為單機(jī)模塊或在計算機(jī)系統(tǒng)上執(zhí)行的組件中模塊(例如操作系統(tǒng)、安全政策、應(yīng)用工具等等)的重寫管理器接收代碼單元。在方框1304,重寫管理器確定需要重寫代碼單元??捎酶鞣N方式作出該確定,包括例如讀取代碼單元中的告訴重寫管理器需要重寫代碼單元的重寫指令(例如標(biāo)記、屬性、字符串等等)。在方框1306,重寫管理器確定要重寫代碼單元的一個或多個重寫器。通過訪問標(biāo)識重寫器的重寫列表,重寫管理器確定要重寫代碼單元的重寫器。重寫列表可以是代碼單元自身中的指令、或是計算機(jī)系統(tǒng)上的單機(jī)模塊、或是計算機(jī)系統(tǒng)另一組件的一部分。可選地,重寫列表可以是經(jīng)諸如網(wǎng)絡(luò)206的網(wǎng)絡(luò)可訪問的位于遠(yuǎn)程計算機(jī)裝置的文件。
在確定要重寫代碼單元的重寫器之后,重寫管理器訪問從一個或多個重寫器組中標(biāo)識的重寫器,并把它們以及代碼單元裝入存儲器(RAM)中。盡管一般說來重寫器駐留于執(zhí)行它們的計算機(jī)裝置中,它們也可位于經(jīng)諸如網(wǎng)絡(luò)206的網(wǎng)絡(luò)可訪問的遠(yuǎn)程計算機(jī)裝置上。在此情形中,重寫管理器將訪問遠(yuǎn)程裝置上的重寫器,并把它們以及代碼單元裝入RAM中。然后重寫管理器證實代碼單元和重寫器是可靠的,如方框1308所示。這可通過鑒別關(guān)聯(lián)于每個代碼單元和重寫器的數(shù)字簽名來完成。在方框1310,重寫管理器將重寫器按特定順序排列,用來根據(jù)代碼單元執(zhí)行。也可能只有一個重寫器要應(yīng)用到代碼單元中,這樣就不會有重寫器的排序了。根據(jù)重寫列表確定一個以上重寫器的順序。在方框1312,重寫管理器根據(jù)代碼單元以適當(dāng)順序一次一個地執(zhí)行一個或多個重寫器。每個重寫器根據(jù)代碼單元的執(zhí)行,以唯一方式更改了代碼單元。由一個或多個重寫器進(jìn)行重寫的經(jīng)過是經(jīng)重寫代碼單元。在方框1314,產(chǎn)生經(jīng)重寫代碼單元的數(shù)字簽名。如方框1316所示,數(shù)字簽名關(guān)聯(lián)到(例如附加到)經(jīng)重寫代碼單元。在方框1318,經(jīng)重寫代碼單元(且任選地,相關(guān)聯(lián)數(shù)字簽名)被存儲在重寫高速緩存中。
在方框1320,接收一執(zhí)行代碼單元的指令。在方框1322,重寫管理器識別經(jīng)重寫代碼單元存儲在重寫高速緩存中。因此,不必再次實現(xiàn)重寫過程。反之,在方框1326直接從重寫高速緩存裝入經(jīng)重寫代碼單元,并在方框1328執(zhí)行之。
盡管一種或多種方法通過流程圖以及關(guān)聯(lián)于流程圖方框的文字來揭示,可以理解所述方法的元素不必按其顯示的順序執(zhí)行,且其它可選順序會導(dǎo)致類似的優(yōu)勢。此外,方法并非是排他的,可單獨或結(jié)合另外的方法執(zhí)行。
示例性計算機(jī)圖14圖示了適于實現(xiàn)所有參照圖1~13如上所述的開發(fā)計算機(jī)202、中間計算機(jī)302、和調(diào)度計算機(jī)204等的示例性計算環(huán)境。盡管圖14中示有一具體配置,但開發(fā)計算機(jī)202、中間計算機(jī)302、和調(diào)度計算機(jī)204可在其它計算配置中實現(xiàn)。
計算環(huán)境1400具有計算機(jī)1402形式的通用計算系統(tǒng)。計算機(jī)1402的組件可包括,但不限于,一個或多個處理器或處理單元1404、系統(tǒng)存儲器1406、和耦合各種系統(tǒng)組件,包括將處理器1404耦合到系統(tǒng)存儲器1406的系統(tǒng)總線1408。
系統(tǒng)總線1408代表若干類型的總線結(jié)構(gòu)中任意的一種或多種,包括存儲器總線或存儲器控制器、外圍總線、加速圖形端口、和使用各種總線架構(gòu)的任一種的處理器或本地總線。系統(tǒng)總線1408的一種示例將是外圍部件互連(PCI)總線,也稱為Mezzanine總線。
計算機(jī)1402具有各種計算機(jī)可讀介質(zhì)。這樣的介質(zhì)可以是計算機(jī)1402可訪問的任何可用介質(zhì),且包括易失和非易失介質(zhì)、可移動和不可移動介質(zhì)。系統(tǒng)存儲器1406包括諸如隨機(jī)存取存儲器(RAM)1410的易失存儲器形式的、和/或諸如只讀存儲器(ROM)1412的非易失存儲器的計算機(jī)可讀介質(zhì)。包含有助于計算機(jī)1402如起動時在元件間傳送信息的基本例程的基本輸入/輸出系統(tǒng)(BIOS)1414存儲在ROM 1412中。RAM 1410包含可被處理單元1404立即訪問和/或現(xiàn)時操作的數(shù)據(jù)和/或程序模塊。
計算機(jī)1402還可包括其它可移動/不可移動、易失/非易失計算機(jī)存儲介質(zhì)。作為示例,圖14圖示了讀取和寫入不可移動、非易失磁性介質(zhì)(未示出)的硬盤驅(qū)動器1416,讀取和寫入可移動、非易失磁盤1420(如“軟盤”)的磁盤驅(qū)動器1418,讀取和寫入可移動、非易失光盤1424,如CD-ROM、DVD-ROM、或其它光學(xué)介質(zhì)的光盤驅(qū)動器1422。硬盤驅(qū)動器1416、磁盤驅(qū)動器1418、和光盤驅(qū)動器1422分別由一個或多個數(shù)據(jù)介質(zhì)接口1426連接到系統(tǒng)總線1408??蛇x地,硬盤驅(qū)動器1416、磁盤驅(qū)動器1418、和光盤驅(qū)動器1422可經(jīng)由SCSI接口(未示出)連接到系統(tǒng)總線1408。
盤驅(qū)動器及其相關(guān)聯(lián)的計算機(jī)可讀介質(zhì)為計算機(jī)1402提供計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、和其它數(shù)據(jù)的非易失存儲。盡管該示例中圖示了硬盤1416、可移動磁盤1420、和可移動光盤1424,但應(yīng)明白其它類型的計算機(jī)可訪問的可存儲數(shù)據(jù)的計算機(jī)可讀介質(zhì),如磁帶或其它磁性存儲設(shè)備、閃存卡、CD-ROM、數(shù)字化視頻光盤(DVD)或其它光學(xué)存儲設(shè)備、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、電子可擦可編程只讀存儲器(EEPROM)等等,也可被用來實現(xiàn)示例性計算系統(tǒng)和環(huán)境。
任何數(shù)量的程序模塊,包括作為示例的操作系統(tǒng)1426、一個或多個應(yīng)用程序1428、其它程序模塊1430、和程序數(shù)據(jù)1432,可存儲于硬盤1416、磁盤1420、光盤1424、ROM 1412、和/或RAM 1410。每一個這樣的操作系統(tǒng)1426、一個或多個應(yīng)用程序1428、其它程序模塊1430、和程序數(shù)據(jù)1432(或其中某些組合)都可具有用戶網(wǎng)絡(luò)訪問信息高速緩存方案的一個實施例。
計算機(jī)1402可具有各種標(biāo)識為通訊介質(zhì)的計算機(jī)/處理器可讀介質(zhì)。通訊介質(zhì)包含調(diào)制數(shù)據(jù)信號形式的計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、或其它數(shù)據(jù),諸如載波或其它傳送機(jī)制,且包含任何信息傳遞介質(zhì)。術(shù)語“已調(diào)數(shù)據(jù)信號”意指用將信息編進(jìn)信號的方法設(shè)置或改變其一個或多個特征的信號。作為示例,而非限制,通訊介質(zhì)包括諸如有線網(wǎng)絡(luò)或直線連接的有線介質(zhì),和諸如聲學(xué)、射頻、紅外線和其它無線介質(zhì)的無線介質(zhì)。所有以上內(nèi)容的組合也應(yīng)包含在“計算機(jī)可讀介質(zhì)”范圍之內(nèi)。
用戶可通過輸入裝置如鍵盤1434和定位裝置1436(如“鼠標(biāo)”)向個人計算機(jī)系統(tǒng)1402輸入指令和信息。其它輸入裝置1438(未具體示出)可包括話筒、游戲桿、游戲墊、衛(wèi)星接收器、掃描儀等等。這些和其它輸入裝置通常通過與系統(tǒng)總線1408耦合的輸入/輸出接口1440連接到處理單元1404,但也可通過其它接口相連,如并行端口、游戲端口或通用串行總線(USB)。
監(jiān)視器1442或其它類型顯示裝置也通過接口,如視頻適配器1444和系統(tǒng)總線1408相連。除了顯示器1442,其它外圍輸出裝置可包括可通過輸入/輸出接口1440與計算機(jī)1402連接的組件,如揚(yáng)聲器(未示出)和打印機(jī)1446。
計算機(jī)1402可以在使用與一臺或多臺遠(yuǎn)程計算機(jī),諸如遠(yuǎn)程計算設(shè)備1448的邏輯連接的網(wǎng)絡(luò)化環(huán)境中運(yùn)行。作為示例,遠(yuǎn)程計算設(shè)備1448可以是個人計算機(jī)、便攜式計算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)計算機(jī)、同等裝置或其它普通網(wǎng)絡(luò)節(jié)點等等。遠(yuǎn)程計算設(shè)備1448圖示為可包括在此所述與計算機(jī)系統(tǒng)1402相關(guān)的許多或全部部件的便攜式計算機(jī)。
計算機(jī)1402和遠(yuǎn)程計算機(jī)1448間的邏輯連接包括局域網(wǎng)(LAN)1450和廣域網(wǎng)(WAN)1452。這樣的網(wǎng)絡(luò)化環(huán)境在辦公室、企業(yè)范圍計算機(jī)網(wǎng)絡(luò)、企業(yè)內(nèi)聯(lián)網(wǎng)和因特網(wǎng)上是常見的。當(dāng)在LAN網(wǎng)絡(luò)化環(huán)境中實現(xiàn)時,計算機(jī)1402通過網(wǎng)絡(luò)接口或適配器1454與本地網(wǎng)1450連接。當(dāng)在WAN網(wǎng)絡(luò)化環(huán)境中實現(xiàn)時,計算機(jī)1402包括調(diào)制解調(diào)器1456或其它用于在廣域網(wǎng)1452中建立通訊的裝置??梢詢?nèi)置或外置于計算機(jī)1402的調(diào)制解調(diào)器1456,通過輸入/輸出接口1440或其它適當(dāng)機(jī)制連接到系統(tǒng)總線1408??梢岳斫獾氖?,所示網(wǎng)絡(luò)連接是示例性的,且其它用于在計算機(jī)1402和1448間建立通訊連接的技術(shù)也可以使用。
在諸如計算環(huán)境1400圖示的網(wǎng)絡(luò)化環(huán)境中,所描述的計算機(jī)1402相關(guān)程序模塊或其中部分模塊,可存儲在遠(yuǎn)程存儲器存儲設(shè)備中。作為示例,遠(yuǎn)程應(yīng)用程序1458位于遠(yuǎn)程計算機(jī)1448的存儲設(shè)備上。為闡明本發(fā)明,諸如操作系統(tǒng)的應(yīng)用程序和其它可執(zhí)行程序組件在此圖示為離散塊,盡管可以理解這樣的程序和組件在各種時刻會駐留于計算機(jī)系統(tǒng)1402的不同存儲組件上,并由該計算機(jī)的數(shù)據(jù)處理器執(zhí)行。
結(jié)論盡管本發(fā)明已用結(jié)構(gòu)化特征和/或方法論行動的專用語言作了說明,但可以理解的是在所附權(quán)利要求書中定義的本發(fā)明無須受限于所述特定特征或行動。相反,具體特征和行動是以實現(xiàn)本發(fā)明的示例性形式被揭示的。
權(quán)利要求
1.包括多個數(shù)據(jù)結(jié)構(gòu)的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述多個數(shù)據(jù)結(jié)構(gòu)包括一代碼單元,其具有可執(zhí)行指令;一重寫器列表,其標(biāo)識至少一個重寫器;以及一個或多個重寫器,其包括所述至少一個重寫器,其中每個重寫器能夠重寫所述代碼單元。
2.如權(quán)利要求1所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,還包括一重寫管理器,所述重寫管理器具有可執(zhí)行指令,所述可執(zhí)行指令被配置為從所述一個或多個重寫器訪問所述至少一個重寫器,并根據(jù)所述代碼單元執(zhí)行所述至少一個重寫器,從而產(chǎn)生一經(jīng)重寫代碼單元。
3.如權(quán)利要求1所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,還包括一高速緩存,所述重寫管理器還被配置為把所述經(jīng)重寫代碼單元存儲到所述高速緩存中。
4.如權(quán)利要求1所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述重寫器列表從包括以下內(nèi)容的組中選取所述代碼單元中一個或多個定制屬性的列表;一安全政策中的列表;一安裝工具中的列表;一配置文件中的列表;以及一XML(可擴(kuò)展標(biāo)記語言)文件中的列表。
5.如權(quán)利要求2所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述重寫管理器是從包括以下內(nèi)容的組中選取的一模塊一單機(jī)模塊;一操作系統(tǒng)模塊;一執(zhí)行環(huán)境模塊;一JIT編譯器模塊;一源代碼編譯器模塊;以及一安裝工具,其被配置以安裝所述代碼單元。
6.如權(quán)利要求1所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述計算機(jī)從包括以下內(nèi)容的組中選取一開發(fā)計算機(jī),其被配置以創(chuàng)建所述代碼單元;一中間計算機(jī),其被配置以調(diào)度所述代碼單元;以及一調(diào)度計算機(jī),其被配置以執(zhí)行所述代碼單元。
7.包括一代碼單元的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述代碼單元具有可執(zhí)行指令,所述指令被配置為用來啟動所述代碼單元的變換;以及標(biāo)識一個或多個重寫器以實現(xiàn)所述變換。
8.如權(quán)利要求7所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述一個或多個重寫器是多個重寫器,每個重寫器被配置以實現(xiàn)所述代碼單元的一唯一變換,所述代碼單元還包括可執(zhí)行指令,所述指令被配置用來對所述多個重寫器排序以特定順序?qū)崿F(xiàn)所述唯一變換。
9.如權(quán)利要求7所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述代碼單元還包括可執(zhí)行指令,所述指令被配置用來引導(dǎo)所述一個或多個重寫器以根據(jù)所述代碼單元中的被標(biāo)識元素來實現(xiàn)所述變換。
10.如權(quán)利要求7所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述啟動包括標(biāo)識在其中應(yīng)實現(xiàn)所述變換的一環(huán)境;以及僅當(dāng)所述代碼單元在所述被標(biāo)識環(huán)境中時,啟動所述變換。
11.如權(quán)利要求10所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述標(biāo)識一環(huán)境包括標(biāo)識一源代碼編譯環(huán)境;標(biāo)識一執(zhí)行前編譯環(huán)境;標(biāo)識一安裝時編譯環(huán)境;標(biāo)識一執(zhí)行環(huán)境;以及標(biāo)識一安裝環(huán)境。
12.如權(quán)利要求7所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述標(biāo)識一個或多個重寫器包括列出所述代碼單元中的所述一個或多個重寫器。
13.如權(quán)利要求7所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述標(biāo)識一個或多個重寫器包括標(biāo)識與具有所述一個或多個重寫器列表的所述代碼單元分開的一文件。
14.包括計算機(jī)可執(zhí)行指令的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述指令被配置用來接收具有可執(zhí)行指令的一代碼單元;確定用來重寫所述代碼單元的至少一個重寫器;調(diào)用所述至少一個重寫器;以及根據(jù)所述代碼單元執(zhí)行所述至少一個重寫器,以產(chǎn)生一經(jīng)重寫代碼單元。
15.如權(quán)利要求14所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,還包括可執(zhí)行指令,其被配置用來在所述執(zhí)行之前證實所述代碼單元和所述證實一個重寫器的可信度。
16.如權(quán)利要求15所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述證實包括鑒別一數(shù)字簽名。
17.如權(quán)利要求14所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,還包括可執(zhí)行指令,其被配置用來把所述經(jīng)重寫代碼單元存儲在一高速緩存中。
18.如權(quán)利要求17所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,還包括可執(zhí)行指令,其被配置用來接收執(zhí)行所述代碼單元的一指令;識別已重寫的所述代碼單元;從所述高速緩存中裝入所述經(jīng)重寫代碼單元;以及執(zhí)行所述經(jīng)重寫代碼單元。
19.如權(quán)利要求17所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,還包括可執(zhí)行指令,其被配置用來為所述經(jīng)重寫代碼單元產(chǎn)生一數(shù)字簽名;以及把所述數(shù)字簽名關(guān)聯(lián)到所述經(jīng)重寫代碼單元。
20.如權(quán)利要求14所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述至少一個重寫器是多個重寫器,所述一種或多種計算機(jī)可讀介質(zhì)還包括可執(zhí)行指令,其被配置用來對所述多個重寫器排序以特定重寫順序重寫所述代碼單元。
21.如權(quán)利要求20所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述排序包括訪問一重寫器列表;以及根據(jù)所述重寫器列表設(shè)定所述重寫順序。
22.如權(quán)利要求21所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述訪問包括訪問在從包括以下內(nèi)容的組中選取的位置上訪問所述重寫器列表所述代碼單元;關(guān)聯(lián)于所述代碼單元的一單獨文件;以及一系統(tǒng)政策。
23.如權(quán)利要求14所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,對所述至少一個重寫器的所述確定包括讀取一重寫器列表。
24.如權(quán)利要求14所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,其包含在從包括以下內(nèi)容的組中選取的一工具中一源代碼編譯器;一安裝工具;一受控執(zhí)行環(huán)境;一單機(jī)重寫管理工具;以及一JIT(運(yùn)行時編譯執(zhí)行)編譯器。
25.如權(quán)利要求14所述的一種或多種計算機(jī)可讀介質(zhì),其特征在于,所述計算機(jī)從包括以下內(nèi)容的組中選取一開發(fā)計算機(jī),其被配置以開發(fā)所述代碼單元;一中間計算機(jī),其被配置以安裝所述代碼單元;以及一調(diào)度計算機(jī),其被配置以執(zhí)行所述代碼單元。
26.一種計算機(jī),其特征在于,包括一代碼單元;一組可組合的重寫器,每個重寫器被配置以唯一方式重寫所述代碼單元;一重寫管理器,其被配置以從所述可組合重寫器組中標(biāo)識一個或多個重寫器,并根據(jù)所述代碼單元執(zhí)行所述被標(biāo)識的一個或多個重寫器。
27.如權(quán)利要求26所述的計算機(jī),其特征在于,還包括一重寫高速緩存,所述重寫管理器還被配置為把所述經(jīng)重寫代碼單元存儲到所述重寫高速緩存中。
28.如權(quán)利要求26所述的計算機(jī),其特征在于,還包括一重寫器列表,所述重寫管理器從所述重寫器列表中標(biāo)識所述一個或多個重寫器以根據(jù)所述代碼單元執(zhí)行之。
29.如權(quán)利要求28所述的計算機(jī),其特征在于,所述重寫列表上從包括以下內(nèi)容的組中選取的一組件所述代碼單元中的一重寫器列表;一獨立文件中的一重寫器列表;一安全政策中的一重寫器列表;以及一安裝工具中的重寫器列表。
30.如權(quán)利要求26所述的計算機(jī),其特征在于,還包括一第一數(shù)字簽名,其關(guān)聯(lián)于所述代碼單元;以及一組第二數(shù)字簽名,每個第二數(shù)字簽名關(guān)聯(lián)于來自所述可組合重寫器組的一特定重寫器;其中所述重寫管理器還被配置以確定是否基于所述第一數(shù)字簽名信任所述代碼單元,確定是否基于來自所述第二數(shù)字簽名組的對應(yīng)第二數(shù)字簽名信任來自所述被標(biāo)識的一個或多個重寫器的每個重寫器,并僅當(dāng)所述代碼單元和來自所述被標(biāo)識的一個或多個重寫器的每個重寫器都被信任時,根據(jù)所述代碼單元來執(zhí)行所述被標(biāo)識的一個或多個重寫器。
31.如權(quán)利要求30所述的計算機(jī),其特征在于,還包括一第三數(shù)字簽名,其由所述重寫管理器關(guān)聯(lián)到所述經(jīng)重寫代碼單元,并被配置以證實所述經(jīng)重寫代碼單元被信任。
32.如權(quán)利要求26所述的計算機(jī),其特征在于,所述重寫管理器是從包括以下內(nèi)容的組中選取的一組件一單機(jī)重寫模塊;一重寫模塊,其被配置為一操作系統(tǒng)的一部分;一重寫模塊,其被配置為一安裝工具的一部分;以及一重寫模塊,其被配置為一安全政策的一部分。
33.如權(quán)利要求26所述的計算機(jī),其特征在于,從包括以下內(nèi)容的組中選取一開發(fā)計算機(jī),其被配置以開發(fā)所述代碼單元;一中間計算機(jī),其被配置以安裝所述代碼單元;以及一調(diào)度計算機(jī),其被配置以執(zhí)行所述代碼單元。
34.一種方法,其特征在于,包括接收一可執(zhí)行代碼單元;確定需要重寫的所述代碼單元;確定用于重寫所述代碼單元的一個或多個重寫器;以及根據(jù)所述代碼單元運(yùn)行所述一個或多個重寫器,以產(chǎn)生一經(jīng)重寫代碼單元。
35.如權(quán)利要求34所述的方法,其特征在于,還包括在所述運(yùn)行之前證實所述代碼單元和所述一個或多個重寫器的可信度。
36.如權(quán)利要求35所述的方法,其特征在于,所述證實包括鑒別一數(shù)字簽名。
37.如權(quán)利要求34所述的方法,其特征在于,還包括把所述經(jīng)重寫代碼單元存儲在一高速緩存中。
38.如權(quán)利要求37所述的方法,其特征在于,還包括接收執(zhí)行所述代碼單元的一指令;識別存儲在所述高速緩存中的經(jīng)重寫代碼單元;從所述高速緩存中裝入所述經(jīng)重寫代碼單元;以及執(zhí)行所述經(jīng)重寫代碼單元。
39.如權(quán)利要求37所述的方法,其特征在于,還包括為所述經(jīng)重寫代碼單元產(chǎn)生一數(shù)字簽名;以及把所述數(shù)字簽名關(guān)聯(lián)到所述經(jīng)重寫代碼單元。
40.如權(quán)利要求34所述的方法,其特征在于,還包括對所述一個或多個重寫器排序,以特定重寫順序重寫所述代碼單元。
41.如權(quán)利要求40所述的方法,其特征在于,所述排序包括訪問一重寫器列表;以及根據(jù)所述重寫器列表設(shè)定所述重寫順序。
42.如權(quán)利要求34所述的方法,其特征在于,所述確定一個或多個重寫器包括讀取一重寫器列表。
43.如權(quán)利要求42所述的方法,其特征在于,所述讀取包括在從包括以下內(nèi)容的組中選取的位置上讀取所述重寫器列表所述可執(zhí)行代碼單元;以及關(guān)聯(lián)于所述可執(zhí)行代碼單元的一獨立文件。
44.一種方法,其特征在于,包括接收一代碼單元;確定要由一重寫器重寫所述代碼單元;確定是否信任所述代碼單元和所述重寫器;如果信任所述代碼單元和所述重寫器,則根據(jù)所述代碼單元運(yùn)行所述重寫器以產(chǎn)生一經(jīng)重寫代碼單元;把所述經(jīng)重寫代碼單元存儲在一高速緩存中。
45.如權(quán)利要求44所述的方法,其特征在于,還包括為所述經(jīng)重寫代碼單元產(chǎn)生一數(shù)字簽名;以及把所述數(shù)字簽名附加到所述經(jīng)重寫代碼單元。
46.如權(quán)利要求45所述的方法,其特征在于,還包括接收執(zhí)行所述代碼單元的一調(diào)用;識別所述代碼單元已被重寫;從所述高速緩存裝入所述經(jīng)重寫代碼;證實附加在所述經(jīng)重寫代碼單元的所述數(shù)字簽名;以及如果所述證實表明所述經(jīng)重寫代碼單元是安全的,則執(zhí)行所述經(jīng)重寫代碼單元。
47.如權(quán)利要求44所述的方法,其特征在于,所述重寫器是一應(yīng)用兼容性重寫器,且所述對要重寫所述代碼單元的確定包括把所述代碼單元標(biāo)識為一應(yīng)用;以及查閱一應(yīng)用兼容性重寫數(shù)據(jù)庫,以確定為了與當(dāng)前執(zhí)行環(huán)境兼容是否需要重寫所述應(yīng)用的任一部分。
全文摘要
系統(tǒng)和方法通過使用可擴(kuò)展、可組合的一組代碼重寫器提供代碼單元的重寫和變換,這些重寫器可在貫穿代碼單元開發(fā)、調(diào)度和執(zhí)行的各個階段實現(xiàn)。所述系統(tǒng)和方法向程序開發(fā)者和系統(tǒng)管理員提供功能強(qiáng)大的方法,以在貫穿程序的開發(fā)、調(diào)度和執(zhí)行的不同階段上實現(xiàn)相當(dāng)獨立于這種程序的代碼變換,且并未大大增加源程序、編譯器、或執(zhí)行環(huán)境的復(fù)雜度。
文檔編號G06F9/44GK1661551SQ20051000783
公開日2005年8月31日 申請日期2005年1月27日 優(yōu)先權(quán)日2004年2月27日
發(fā)明者A·C·石, C·W·布魯姆, J·S·格雷, J·C·霍金斯, S·E·特羅布里吉 申請人:微軟公司