專利名稱:存儲和恢復應(yīng)用運行時狀態(tài)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及存儲和恢復應(yīng)用運行時狀態(tài)。
背景技術(shù):
出于許多原因,服務(wù)器場中的服務(wù)器機器的維護可能非常困難。例如,當信息技術(shù)(“IT”)管理員需要對服務(wù)器機器執(zhí)行維護操作時,通常必須在服務(wù)器計算機上運行的操作系統(tǒng)能夠關(guān)閉之前關(guān)閉所有用戶會話。為了正確地關(guān)閉用戶會話,IT管理員必須關(guān)閉在這些會話中執(zhí)行的所有用戶應(yīng)用。如果用戶不能夠以有序的方式關(guān)閉他們的應(yīng)用,則未保存的數(shù)據(jù)可能丟失。以這種方式丟失數(shù)據(jù)對用戶和IT管理員來說都是極其令人沮喪的。此處所做出的本公開正是關(guān)于這些和其他考慮事項而提出的。
發(fā)明內(nèi)容
此處描述了用于存儲和恢復應(yīng)用的運行時狀態(tài)的技術(shù)。通過此處所公開的概念和技術(shù)的實現(xiàn),正在執(zhí)行的應(yīng)用的運行時狀態(tài)可獨立于該應(yīng)用在其上執(zhí)行的操作系統(tǒng)的運行時狀態(tài)而被捕捉和保存。然后可對該應(yīng)用在其上執(zhí)行的計算機執(zhí)行維護操作。該應(yīng)用的運行時狀態(tài)還可被移動到另一計算機以對該計算機的處理負載進行負載平衡。一旦完成了維護操作之后,可還原該應(yīng)用的運行時狀態(tài)并可將該應(yīng)用的執(zhí)行恢復到該應(yīng)用在該運行時狀態(tài)被捕捉的時刻所處的狀態(tài)。以此方式,可執(zhí)行維護操作而不會丟失未保存的應(yīng)用數(shù)據(jù)。根據(jù)此處所呈現(xiàn)的一個方面,接收存儲在計算機上執(zhí)行的應(yīng)用的運行時狀態(tài)的請求。例如,IT管理員可做出這樣的請求。響應(yīng)于接收到這樣的請求,掛起該應(yīng)用的執(zhí)行,并且獨立于該應(yīng)用正在其上執(zhí)行的操作系統(tǒng)而收集該應(yīng)用的運行時狀態(tài)。該運行時狀態(tài)可包括物理和虛擬存儲器的內(nèi)容、中央處理單元(“CPU”)寄存器、以及指令指針。該運行時狀態(tài)還可包括系統(tǒng)資源、用戶界面(“Π”)資源、以及網(wǎng)絡(luò)連接的狀態(tài)。該運行時狀態(tài)還可包括當收集該運行時狀態(tài)時正在被該應(yīng)用使用的任何文件資源。一旦收集了該運行時狀態(tài)之后,保持該運行時狀態(tài),諸如通過將該運行時狀態(tài)保存到大容量存儲設(shè)備中。在已保持了該運行時狀態(tài)之后,可對該應(yīng)用在其上執(zhí)行的計算機執(zhí)行維護操作。例如,可對該計算機的硬件或該應(yīng)用在其上執(zhí)行的操作系統(tǒng)執(zhí)行維護操作。此外,可將該應(yīng)用的狀態(tài)移至另一計算機。這可能是被期望的,例如,以對該應(yīng)用在其上執(zhí)行的計算機的處理負載進行負載平衡?!┩瓿闪嗽摼S護操作之后,可接收重新啟動該應(yīng)用的執(zhí)行的執(zhí)行的請求(諸如從IT管理員)。為了重新啟動該應(yīng)用的執(zhí)行,還原該應(yīng)用的運行時狀態(tài)。例如,可還原存儲器的內(nèi)容、寄存器、以及指令指針。還可還原系統(tǒng)資源、Π資源和網(wǎng)絡(luò)連接的狀態(tài)。如果該運行時狀態(tài)中包括文件資源,則還可還原該文件資源。一旦還原了該應(yīng)用的運行時狀態(tài)之后,可從該執(zhí)行被掛起的點處重新啟動該應(yīng)用的執(zhí)行。以此方式,該應(yīng)用可返回到在該應(yīng)用的執(zhí)行被掛起的時刻該應(yīng)用所處的狀態(tài)。根據(jù)另一方面,提供用于翻譯從該應(yīng)用接收的對于在保持該應(yīng)用的運行時狀態(tài)之后已修改的資源的請求的代理層。例如,如果應(yīng)用恰在捕捉該應(yīng)用狀態(tài)之前利用一網(wǎng)絡(luò)端口號,該網(wǎng)絡(luò)端口號在恢復該應(yīng)用的執(zhí)行時不可用,則該代理層將在對該應(yīng)用已知的網(wǎng)絡(luò)端口號和新的網(wǎng)絡(luò)端口號之間進行翻譯。其他類型的翻譯還可對改變了名字、號、位置、或其他標識信息的其他類型的資源執(zhí)行。應(yīng)當理解的是,此處公開的實施例可與虛擬化應(yīng)用、在硬件虛擬化環(huán)境中執(zhí)行的非虛擬化應(yīng)用、在非虛擬化環(huán)境中執(zhí)行的非虛擬化應(yīng)用、以及其它類型的應(yīng)用結(jié)合使用。應(yīng)當理解,本發(fā)明內(nèi)容并不旨在標識所要求保護的主題的關(guān)鍵特征或必要特征,也不旨在將本概述用來限制所要求保護的主題的范圍。此外,所要求保護的主題不限于解決在本發(fā)明的任一部分中提及的任何或所有缺點的實現(xiàn)。
圖1是示出用于此處公開的各實施例的一個說明性操作環(huán)境的計算機軟件體系結(jié)構(gòu)圖;圖2是示出根據(jù)此處公開的一個實施例的用于存儲和恢復應(yīng)用的運行時狀態(tài)的此處公開的若干軟件組件的方面的計算機軟件體系結(jié)構(gòu)圖;圖3是示出在此處公開的一個實施例中利用的已存儲的應(yīng)用運行時狀態(tài)的內(nèi)容的數(shù)據(jù)結(jié)構(gòu)圖;圖4是示出根據(jù)此處呈現(xiàn)的一個實施例的用于捕捉和保持應(yīng)用的運行時狀態(tài)的此處公開的一個說明性過程的方面的流程圖;圖5是示出根據(jù)此處呈現(xiàn)的一個實施例的用于還原所捕捉和保持的應(yīng)用的運行時狀態(tài)的此處公開的一個說明性過程的方面的流程圖;圖6是示出在此處公開的一個實施例中用于翻譯應(yīng)用請求的代理層的方面的計算機軟件體系結(jié)構(gòu)圖;圖7是示出在一個實施例中利用此處公開的用于存儲和恢復應(yīng)用的運行時狀態(tài)的技術(shù)來在兩個計算機系統(tǒng)之間遷移正在執(zhí)行的應(yīng)用的說明性例程的流程圖;圖8是示出在一個實施例中利用此處公開的用于存儲和恢復應(yīng)用的運行時狀態(tài)的技術(shù)來對計算機執(zhí)行維護操作的說明性例程的流程圖;以及圖9是示出用于能夠?qū)崿F(xiàn)本文所提出的各種實施例的計算系統(tǒng)的說明性計算機硬件和軟件體系結(jié)構(gòu)的計算機體系結(jié)構(gòu)圖。
具體實施例方式下述具體實施方式
涉及用于存儲和恢復應(yīng)用運行時狀態(tài)的技術(shù)。如上面簡要討論的,正在執(zhí)行的應(yīng)用的運行時狀態(tài)可獨立于該應(yīng)用在其上執(zhí)行的操作系統(tǒng)的運行時狀態(tài)而被捕捉和保存。然后可對該應(yīng)用在其上執(zhí)行的操作系統(tǒng)或者計算機執(zhí)行維護操作。該應(yīng)用的運行時狀態(tài)還可被移動到另一計算機以對該計算機的處理負載進行負載平衡。然后可還原該應(yīng)用的運行時狀態(tài)。一旦還原了該應(yīng)用的運行時狀態(tài)之后,可從該執(zhí)行被掛起的點處重新啟動該應(yīng)用的執(zhí)行。還可利用代理層來對從應(yīng)用接收的對在該應(yīng)用的運行時狀態(tài)被保持后被修改的資源的請求進行翻譯。關(guān)于這些特征和其他特征的更多細節(jié)將在以下參考圖1-9來提供。
盡管在結(jié)合計算機系統(tǒng)上的操作系統(tǒng)和應(yīng)用程序的執(zhí)行而執(zhí)行的程序模塊的一般上下文中呈現(xiàn)了此處描述的主題,但是本領(lǐng)域技術(shù)人員將認識到,其他實現(xiàn)可以結(jié)合其他類型的程序模塊來執(zhí)行。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、組件、數(shù)據(jù)結(jié)構(gòu)和其它類型的結(jié)構(gòu)。此外,本領(lǐng)域技術(shù)人員將明白,可以利用其他計算機系統(tǒng)配置來實施此處描述的主題,這些計算機系統(tǒng)配置包括手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費電子產(chǎn)品、小型計算機、大型計算機等等。在下面的詳細描述中,將參考構(gòu)成本發(fā)明的一部分的附圖,并且在附圖中作為說明示出了各具體實施例或示例?,F(xiàn)在參考附圖(貫穿若干附圖,相同的標號表示相同的元素),將描述用于存儲和恢復應(yīng)用的運行時狀態(tài)的計算系統(tǒng)和方法的方面。圖1是示出用于此處公開的各個實施例的一個說明性操作環(huán)境100的軟件和網(wǎng)絡(luò)體系結(jié)構(gòu)圖。圖1中示出的說明性操作系統(tǒng)100包括被配置成提供用于執(zhí)行虛擬化應(yīng)用106的環(huán)境的計算機108,該虛擬化應(yīng)用106在此處可被稱為“應(yīng)用106”。為了提供此功能,計算機108包括操作系統(tǒng)104和應(yīng)用虛擬化層102。計算機108可以是標準臺式或膝上型計算機、服務(wù)器計算機、平板計算機、智能手機或能執(zhí)行此處呈現(xiàn)的用于存儲和恢復應(yīng)用運行時的操作的任何其他類型的計算設(shè)備。應(yīng)用虛擬化層102是被配置為提供應(yīng)用虛擬化環(huán)境的軟件組件。有關(guān)于此,應(yīng)用虛擬化層102被配置為執(zhí)行應(yīng)用106。應(yīng)用虛擬化層102提供與操作系統(tǒng)104分開地封裝應(yīng)用106的執(zhí)行的功能。應(yīng)用虛擬化層102還可提供與計算機108的其他應(yīng)用程序和系統(tǒng)資源分開地封裝應(yīng)用106的執(zhí)行的功能。例如,應(yīng)用虛擬化層102可將操作系統(tǒng)104或計算機108的資源虛擬化。當應(yīng)用106嘗試訪問實際資源時,應(yīng)用虛擬化層102將虛擬化的資源呈現(xiàn)給應(yīng)用106以供使用。以此方式,可以用不影響由操作系統(tǒng)104或計算機108所暴露的實際資源的方式來執(zhí)行應(yīng)用106。根據(jù)其他方面,應(yīng)用虛擬化層102提供用于按照需要從服務(wù)器計算機(未示出)載入應(yīng)用106的部分的功能。具體而言,應(yīng)用虛擬化層102可與服務(wù)器組件結(jié)合起來操作以將應(yīng)用106的所需部分從服務(wù)器流傳輸?shù)接嬎銠C108。以此方式,可以按照需要在計算機108處訪問應(yīng)用106。此外,因為可僅將應(yīng)用106的所需部分從服務(wù)器流傳輸至計算機108,所以可提供對應(yīng)用106的訪問而不將整個應(yīng)用106從服務(wù)器流傳輸至計算機108。有關(guān)應(yīng)用程序虛擬化層110的功能的更多細節(jié)可在2007年5月29日提交的標題為“Systems andMethods for Delivering Content over a Computer Network(用于通過計算機網(wǎng)絡(luò)遞送內(nèi)容的系統(tǒng)與方法)”的美國專利N0.7,225,264、在2007年4月3日提交的標題為“Methodand System for Serving Software Applications to Client Computers (用于向客戶端計算機供應(yīng)軟件應(yīng)用的方法與系統(tǒng))”的美國專利N0.7,200,632、在2008年11月11日提交的、標題為 “Operating System Abstraction and Protection Layer (操作系統(tǒng)抽象與保護層)”的美國專利N0.7,451,451、以及在2010年9月14日提交的標題為“ServingSoftware Applications from Servers for Client Computers (從服務(wù)器為客戶端計算機供應(yīng)軟件應(yīng)用)”的美國專利N0.7,797,372中找到,通過引用將上述專利中的每一個明確結(jié)合于此。應(yīng)當理解,盡管此處公開的發(fā)明主要是以存儲和恢復虛擬化應(yīng)用106的運行時狀態(tài)為上下文來呈現(xiàn)的,然而此處公開的實施例可以與其他類型的應(yīng)用一起使用。例如,此處公開的實施例可用于存儲和恢復在硬件虛擬化環(huán)境中執(zhí)行的非虛擬化應(yīng)用。此處公開的實施例還可結(jié)合在非虛擬化環(huán)境中執(zhí)行的應(yīng)用來利用。此處公開的實施例還可結(jié)合在本領(lǐng)域的技術(shù)人員公知的其他類型的環(huán)境中執(zhí)行的應(yīng)用來利用。有關(guān)此處公開的用于存儲和恢復應(yīng)用106的運行時狀態(tài)的更多信息將在下面參考圖2-9來提供。圖2是示出根據(jù)此處公開的一個實施例的用于存儲和恢復應(yīng)用106的運行時狀態(tài)的此處公開的若干軟件組件的方面的計算機軟件體系結(jié)構(gòu)圖。具體而言,圖2示出了若干軟件組件,這些軟件組件在各實施例中可被配置成捕捉、保持及還原應(yīng)用106的運行時狀態(tài)202。運行時狀態(tài)202是定義應(yīng)用106的當前執(zhí)行上下文的數(shù)據(jù)。如同下面將要更加詳細地討論的,運行時狀態(tài)202可被捕捉、保持、并在稍后的某個時間還原。以此方式,可對計算機108和操作系統(tǒng)104執(zhí)行維護操作而不需要關(guān)閉應(yīng)用106。如同圖2中還示出的,可利用多個不同的軟件組件來捕捉、保持和還原運行時狀態(tài)202。例如,在一種實現(xiàn)中,應(yīng)用虛擬化層102可被配置為執(zhí)行此處公開的用于捕捉、保持和還原運行時狀態(tài)202的操作。在另一實施例中,操作系統(tǒng)104被配置成生成并還原運行時狀態(tài)202。在又一實施例中,應(yīng)用204可被配置成為應(yīng)用106生成運行時狀態(tài)202。應(yīng)當理解,在各種實施例中,內(nèi)核驅(qū)動器或其他類型的低層軟件代碼可由應(yīng)用204或應(yīng)用虛擬化102安裝到操作系統(tǒng)104上以啟用此處所述的功能的各方面。其他類型的實現(xiàn)對于本領(lǐng)域技術(shù)人員可顯而易見。如同下面將要更加詳細地描述的,為虛擬化應(yīng)用106生成運行時狀態(tài)202可響應(yīng)于(諸如來自IT管理員的)請求而執(zhí)行。響應(yīng)于這樣的請求,應(yīng)用106的執(zhí)行被掛起。此夕卜,正在被應(yīng)用106使用的資源被枚舉、這些資源的當前狀態(tài)被捕捉、而定義該狀態(tài)的數(shù)據(jù)被保持為運行時狀態(tài)202。如同下面將要更加詳細地描述的,運行時狀態(tài)202可在稍后的某個時間從存儲取回以重新創(chuàng)建應(yīng)用106的執(zhí)行上下文。此外,運行時狀態(tài)202可被移動到除了計算機108以外的計算機并被重新啟動。關(guān)于此功能的更多細節(jié)將在以下提供。為了將應(yīng)用106還原到它之前的狀態(tài),所存儲的運行時狀態(tài)202被用于重新創(chuàng)建應(yīng)用106的各個進程并還原應(yīng)用106所利用的存儲器的內(nèi)容。還可以重新創(chuàng)建其他系統(tǒng)、文件和Π資源。此外,根據(jù)一種實現(xiàn),可利用代理層來將來自應(yīng)用106的請求翻譯成在已創(chuàng)建運行時狀態(tài)202之后被修改的資源。一旦還原了運行時狀態(tài)292之后,應(yīng)用106的執(zhí)行可被重新啟動。關(guān)于這些操作的附加細節(jié)在以下參考圖3-8提供。應(yīng)當理解,盡管圖2示出為單個應(yīng)用106創(chuàng)建運行時狀態(tài)202,然而此處公開的實施例可用于同時為多個應(yīng)用106創(chuàng)建運行時狀態(tài)202。例如,可利用此處呈現(xiàn)的思想來生成運行時狀態(tài)202以同時捕捉多個應(yīng)用的執(zhí)行上下文。然后可利用所存儲的運行時狀態(tài)202來同時恢復多個應(yīng)用的執(zhí)行。如同上面還提到的,應(yīng)當理解,盡管此處公開的實施例主要是以為虛擬化應(yīng)用106生成運行時狀態(tài)202為上下文來描述的,然而此處呈現(xiàn)的實施例可與其他類型的應(yīng)用一起使用。例如,此處公開的各實施例可與在硬件虛擬化環(huán)境中執(zhí)行的非虛擬化應(yīng)用、在非虛擬化環(huán)境中執(zhí)行的非虛擬化應(yīng)用、以及其它類型的應(yīng)用一起使用。還應(yīng)當理解,運行時狀態(tài)202是獨立于操作系統(tǒng)104的執(zhí)行狀態(tài)而生成的。以此方式,運行時狀態(tài)202可被遷移到另一計算機(其有可能正在執(zhí)行不同版本的操作系統(tǒng)104),并被還原到其原始狀態(tài)。圖3是示出在此處公開的一個實施例中利用的所存儲的應(yīng)用運行時狀態(tài)202(其在此處可被稱為“運行時狀態(tài)202”)的內(nèi)容的數(shù)據(jù)結(jié)構(gòu)圖。如圖3中所示,應(yīng)用運行時狀態(tài)202包括存儲器內(nèi)容302。存儲器內(nèi)容302是應(yīng)用106所使用的任何虛擬的、共享的、物理的或其他的存儲器的內(nèi)容。應(yīng)用運行時狀態(tài)202還包括寄存器上下文304。寄存器上下文304是應(yīng)用106在其上執(zhí)行的計算機108的CPU中的任何寄存器的內(nèi)容。寄存器上下文304還可包括用于應(yīng)用106的每個線程或進程的指令指針306。在一種實現(xiàn)中,應(yīng)用運行時狀態(tài)202還包括系統(tǒng)資源狀態(tài)308。系統(tǒng)資源狀態(tài)308是定義在應(yīng)用106的執(zhí)行被掛起的時刻應(yīng)用106正在使用的一組系統(tǒng)資源的狀態(tài)的數(shù)據(jù)。系統(tǒng)資源狀態(tài)308可包括定義被應(yīng)用106開放給注冊表項的句柄、開放給內(nèi)核對象的句柄、本地文件系統(tǒng)或網(wǎng)絡(luò)共享上的文件、應(yīng)用106正在使用的TCP端口、以及被應(yīng)用106開放給遠程資源的連接的狀態(tài)的數(shù)據(jù)。系統(tǒng)資源狀態(tài)308還可包括定義在應(yīng)用106被掛起的時刻應(yīng)用106正在使用的其他類型的系統(tǒng)資源的數(shù)據(jù)。根據(jù)一種實現(xiàn),應(yīng)用運行時狀態(tài)202還包括Π資源狀態(tài)310。Π資源狀態(tài)310包括定義在應(yīng)用106被掛起時應(yīng)用106正在使用的Π元素的數(shù)據(jù)。例如,Π資源狀態(tài)310可定義Π窗口的位置、各Π組件間的關(guān)系、窗口句柄、以及定義其他類型的Π資源的狀態(tài)的數(shù)據(jù)。根據(jù)一種實現(xiàn),在應(yīng)用106的執(zhí)行期間記錄應(yīng)用106所執(zhí)行的UI創(chuàng)建操作。定義所記錄的UI創(chuàng)建操作的數(shù)據(jù)可被存儲在應(yīng)用運行時狀態(tài)202中并在應(yīng)用106被重新啟動的時刻利用以重新創(chuàng)建在該應(yīng)用被掛起的時刻應(yīng)用106所呈現(xiàn)的Π。應(yīng)當理解,其他類型的機制也可用于生成可被用于重新創(chuàng)建在應(yīng)用106被重新啟動的時刻應(yīng)用106所呈現(xiàn)的UI元素的資源狀態(tài)310。應(yīng)用運行時狀態(tài)202還可包括網(wǎng)絡(luò)連接狀態(tài)312。網(wǎng)絡(luò)連接狀態(tài)312是定義在應(yīng)用106被掛起的時刻應(yīng)用106所利用的任何網(wǎng)絡(luò)連接的狀態(tài)的數(shù)據(jù)。網(wǎng)絡(luò)連接狀態(tài)312可定義例如到本地網(wǎng)絡(luò)資源的句柄、網(wǎng)絡(luò)端口、以及其他網(wǎng)絡(luò)相關(guān)數(shù)據(jù)。在一種實現(xiàn)中,在應(yīng)用106的執(zhí)行被掛起的時刻應(yīng)用106正在使用的所有文件資源在應(yīng)用106被還原時在本地文件系統(tǒng)上的相同名字下可用。然而,在其他實現(xiàn)中,應(yīng)用106正在使用的文件資源314被捆綁為對應(yīng)用運行時狀態(tài)202的補充。文件資源314還可包括指向各種文件資源314的查找指針的值。如同下面將要更加詳細地描述的,所捆綁的文件資源314可在運行時狀態(tài)202被重新創(chuàng)建的時刻利用以向應(yīng)用106呈現(xiàn)文件資源314。應(yīng)當理解,圖3中示出的應(yīng)用運行時狀態(tài)202的內(nèi)容僅僅是說明性的。根據(jù)各種實現(xiàn),其他數(shù)據(jù)也可被包括在應(yīng)用運行時狀態(tài)202中。然而,一般而言,應(yīng)當理解,應(yīng)用運行時狀態(tài)202包括重新創(chuàng)建應(yīng)用106的執(zhí)行上下文所必需的數(shù)據(jù)以使得應(yīng)用106可在稍后的某個時間點被恢復。關(guān)于應(yīng)用運行時狀態(tài)202的創(chuàng)建和使用的更多細節(jié)將在下文中參考圖4-5來提供。圖4是示出根據(jù)此處呈現(xiàn)的一個實施例的用于捕捉和保持應(yīng)用106的運行時狀態(tài)202的此處公開的一個說明性例程400的各個方面的流程圖。應(yīng)該了解,這里參考圖4和其他圖形所描述的邏輯操作是(I)作為計算機實現(xiàn)的動作或在計算系統(tǒng)上運行的程序模塊的序列和/或(2)計算系統(tǒng)內(nèi)的互連機器邏輯電路或電路模塊來實現(xiàn)的。取決于計算系統(tǒng)的性能及其他要求,可以選擇不同的實現(xiàn)。因此,此處所描述的邏輯操作被不同地稱為操作、結(jié)構(gòu)設(shè)備、動作或模塊。這些操作、結(jié)構(gòu)設(shè)備、動作和模塊可用軟件、固件、專用數(shù)字邏輯,及其任何組合來實現(xiàn)。還應(yīng)該明白,可以執(zhí)行比附圖中示出并在此處描述的操作更多或更少的操作。這些操作還可以按與此處所描述的不同的次序來執(zhí)行。例程400在操作402處開始,在操作402應(yīng)用106的執(zhí)行被掛起。具體而言,該應(yīng)用進程中的每個線程的執(zhí)行都被掛起。一旦掛起了應(yīng)用106之后,例程400繼續(xù)到操作404,在操作404存儲器內(nèi)容302被捕捉。如同上面討論的,存儲器內(nèi)容302包括應(yīng)用106正在使用的所有物理、虛擬和其他類型的存儲器的內(nèi)容。存儲器內(nèi)容302被存儲在應(yīng)用運行時狀態(tài)202中。從操作404,例程400繼續(xù)到操作406,在操作406寄存器上下文304被捕捉并存儲在應(yīng)用運行時狀態(tài)202中。如同上面討論的,寄存器上下文304是應(yīng)用106在其上執(zhí)行的計算機108的一個或多個CPU核的寄存器的內(nèi)容。一旦捕捉了寄存器上下文304并將其存儲在應(yīng)用運行時狀態(tài)202中之后,例程400繼續(xù)到操作408。在操作408,指令指針306被捕捉并存儲在應(yīng)用運行時狀態(tài)202中。然后例程400繼續(xù)到操作410,在操作410系統(tǒng)資源狀態(tài)308被捕捉并存儲在應(yīng)用運行時狀態(tài)202中。如同上面討論的,系統(tǒng)資源狀態(tài)308包括標識應(yīng)用106正在使用的資源的數(shù)據(jù)。例如,系統(tǒng)資源狀態(tài)308可包括被應(yīng)用106開放給注冊表項的句柄、開放給內(nèi)核對象的句柄、本地文件系統(tǒng)或網(wǎng)絡(luò)共享上的文件、應(yīng)用106正在使用的TCP端口、被應(yīng)用106開放給遠程資源的連接、和/或標識其他類型的系統(tǒng)資源的狀態(tài)的數(shù)據(jù)。從操作410,例程400繼續(xù)到操作412,在操作412 UI資源狀態(tài)310被捕捉并存儲。如同上面討論的,Π資源狀態(tài)310是定義應(yīng)用106所顯示的任何Π元素的狀態(tài)的數(shù)據(jù)。UI資源狀態(tài)310可包括到窗口或其他Π對象的句柄、用于在應(yīng)用106被重新啟動的時刻重新創(chuàng)建UI資源的日志數(shù)據(jù)、以及其他類型的信息。從操作412,例程400繼續(xù)到操作414。在操作414,網(wǎng)絡(luò)連接狀態(tài)3 12被捕捉并存儲在運行時狀態(tài)202中。如同上面討論的,網(wǎng)絡(luò)連接狀態(tài)312定義在該應(yīng)用被掛起時應(yīng)用106所打開的任何網(wǎng)絡(luò)連接的狀態(tài)。然后例程400繼續(xù)到操作416,在操作416應(yīng)用106正在使用的文件資源314也可被識別并存儲在運行時狀態(tài)202中。如同上面討論的,在一些實現(xiàn)中,文件資源314不被包括在運行時狀態(tài)202內(nèi)。然而,在其他實現(xiàn)中,任何文件資源314及其相關(guān)聯(lián)的查找指針被存儲在運行時狀態(tài)202中。如同下面將要更加詳細地描述的,文件資源3 14可在重新啟動應(yīng)用106的執(zhí)行之前被重新創(chuàng)建。一旦捕捉了存儲器內(nèi)容302、寄存器上下文304、指令指針306、系統(tǒng)資源狀態(tài)308、UI資源狀態(tài)310、網(wǎng)絡(luò)連接狀態(tài)312、以及可能的文件資源314之后,例程400繼續(xù)到操作418。在操作418,運行時狀態(tài)202被封裝并保持。例如,運行時狀態(tài)202可被保持到計算機108可訪問的大容量存儲設(shè)備。替代地,運行時狀態(tài)可被保持到計算機108可訪問的網(wǎng)絡(luò)位置。從操作418,例程400繼續(xù)至操作420,在那里結(jié)束。圖5是示出根據(jù)此處呈現(xiàn)的一個實施例的用于還原之前捕捉和保持的應(yīng)用106的運行時狀態(tài)202的此處公開的一個說明性例程500的各個方面的流程圖。例程500在操作502處開始,在操作502應(yīng)用106的線程被重新創(chuàng)建。一旦重新創(chuàng)建了該線程之后,例程500繼續(xù)到操作504,在操作504利用存儲在運行時狀態(tài)202中的存儲器內(nèi)容302來還原存儲器的內(nèi)容。一旦還原了存儲器的內(nèi)容之后,例程500繼續(xù)到操作506,在操作506利用存儲在運行時狀態(tài)202中的寄存器上下文304來還原CPU寄存器的內(nèi)容。在操作508還還原指令指針。從操作508,例程500繼續(xù)到操作510,在操作510利用系統(tǒng)還原狀態(tài)308來還原系統(tǒng)資源的狀態(tài)。一些系統(tǒng)資源可以通過句柄表間接訪問。在那些情況中,到該系統(tǒng)資源的所有句柄都被打開,并且間接的層被插入到應(yīng)用106和句柄表之間以使得在應(yīng)用106恢復之后它的經(jīng)索引的訪問被重定向到開放的句柄之后的實際資源。關(guān)于此過程的更多細節(jié)將在以下參考圖6來提供。從操作510,例程500繼續(xù)到操作512,在操作512,還原在應(yīng)用106掛起的時刻該應(yīng)用106所顯示的任何Π元素的狀態(tài)。如同上面簡要討論的,這可以包括重放Π創(chuàng)建命令的日志以還原該Π。因為Π元素通常由句柄引用,所以在應(yīng)用106和Π資源之間可能還需要間接的層。關(guān)于此過程的細節(jié)將在以下參考圖6來提供。從操作512,例程500繼續(xù)到操作514。在操作514,利用存儲在運行時狀態(tài)202中的網(wǎng)絡(luò)連接狀態(tài)312來還原在應(yīng)用106掛起的時刻應(yīng)用106所打開的任何網(wǎng)絡(luò)連接的狀態(tài)。如下面將參考圖6更加詳細地描述的,還可需要間接的層來向應(yīng)用106提供對之前打開的端口號的訪問。一旦在操作514還原網(wǎng)絡(luò)連接狀態(tài)之后,例程500繼續(xù)到操作516。在操作516還原存儲在運行時狀態(tài)202中的任何文件資源。應(yīng)用106所打開的文件流上的查找點也被還原以使得應(yīng)用106能夠恢復從在應(yīng)用106被掛起的時刻為當前的偏移讀取。在向文件資源開放句柄并恢復應(yīng)用106之前,可將存儲在運行時狀態(tài)202處的文件資源314在其命名的位置處還原。從操作516,例程500繼續(xù)到操作518,在操作518,執(zhí)行代理層以在應(yīng)用106和某些類型的所還原的資源之間提供間接的層。關(guān)于使用代理層來翻譯應(yīng)用請求的更多的細節(jié)將在下面參考圖6來提供。一旦實例化代理層之后,例程500繼續(xù)到操作520,在操作520,在應(yīng)用106掛起的時刻應(yīng)用106正在執(zhí)行的點處,重新啟動應(yīng)用106的執(zhí)行。從操作520,例程500繼續(xù)至操作522,在那里結(jié)束。圖6是示出在此處公開的一個實施例中用于翻譯應(yīng)用請求604的代理層602的方面的計算機軟件體系結(jié)構(gòu)圖。如同上面簡要討論的,某些系統(tǒng)資源可能在運行時狀態(tài)202被創(chuàng)建以后被修改。結(jié)果,當恢復應(yīng)用106時,這些資源可能是不可用的、被重命名、被重新編號、或者以其他方式被不同地標識。為了在應(yīng)用106的執(zhí)行被恢復以后向應(yīng)用106提供對這些資源的訪問,提供代理層602。代理層602在應(yīng)用106和某些類型的資源之間提供間接的層。如圖6中所示,代理層602接收對某些類型的資源(諸如系統(tǒng)資源606、網(wǎng)絡(luò)連接608、文件資源610、以及UI資源612)的應(yīng)用請求604。代理層602翻譯應(yīng)用請求604以使得當應(yīng)用106被恢復時應(yīng)用請求604與系統(tǒng)資源所使用的位置、名稱和其他類型的標識符相兼容。例如,一文件在應(yīng)用106被掛起的時刻可能在一個位置,但是當應(yīng)用106被恢復時可能位于另一個位置。代理層602將對在其原始位置處的文件的應(yīng)用請求604翻譯到新的位置。作為另一示例,UI窗口在應(yīng)用106被掛起的時刻可能由一個句柄標識,但是在應(yīng)用106被恢復的時刻可能由另一個句柄標識。代理層602將截取對該窗口的應(yīng)用請求604并翻譯該句柄以使得應(yīng)用請求604將成功。類似地,網(wǎng)絡(luò)端口可能在應(yīng)用106被掛起時正在被應(yīng)用106使用,但是可能在應(yīng)用106被恢復時不可用。代理層602將把原始端口號翻譯成在應(yīng)用106恢復執(zhí)行時刻用的新端口。應(yīng)當理解,盡管已在圖6中將代理層602示出為翻譯對系統(tǒng)資源606、網(wǎng)絡(luò)連接608、文件資源610和Π資源612的請求,然而代理層602還可以翻譯對其他類型的資源的請求。還應(yīng)當理解,可利用其他類型的機制來確保在恢復應(yīng)用106的執(zhí)行以后對已修改的資源的應(yīng)用請求能夠成功。圖7是示出在一個實施例中利用此處公開的用于存儲和恢復應(yīng)用106的運行時狀態(tài)202的技術(shù)來在兩個計算機系統(tǒng)之間遷移正在執(zhí)行的應(yīng)用106的說明性例程700的流程圖。例程700在操作702處開始,在操作702用上面參考圖4描述的方式捕捉并保持應(yīng)用運行時狀態(tài)202。一旦保持該應(yīng)用運行時狀態(tài)之后,例程700繼續(xù)到操作704。在操作704,運行時狀態(tài)202被移動到另一計算機。出于各種原因,可能期望這樣。例如,在計算機之間遷移應(yīng)用運行時狀態(tài)202可允許對各計算機的處理負載進行負載平衡而不需要應(yīng)用106被關(guān)閉并在目的地計算機上重新啟動。應(yīng)用運行時狀態(tài)202的遷移也可能出于其他原因而被期望。一旦將運行時狀態(tài)202遷移到目的地計算機之后,例程700繼續(xù)到操作706,在操作706用上面參考圖5描述的方式在目的地計算機處還原應(yīng)用運行時狀態(tài)202。從操作706,例程700繼續(xù)至操作708,在那里結(jié)束。圖8是示出在一個實施例中利用此處公開的用于存儲和恢復應(yīng)用106的運行時狀態(tài)202的技術(shù)來對計算機108執(zhí)行維護操作的說明性例程800的流程圖。例程800在操作802處開始,在操作802用上面參考圖4描述的方式捕捉并保持運行時狀態(tài)202。從操作802,例程800繼續(xù)到操作804,在操作804對計算機108執(zhí)行系統(tǒng)維護。例如,可對操作系統(tǒng)104或計算機108的硬件執(zhí)行維護或升級。一旦執(zhí)行了維護操作之后,例程800繼續(xù)到操作806,在操作806用上面參考圖5描述的方式還原應(yīng)用運行時狀態(tài)202。從操作806,例程800繼續(xù)至操作808,在那里結(jié)束。應(yīng)當理解,可能出于不同于上面參考圖7-8描述的原因掛起和還原正在執(zhí)行的應(yīng)用的狀態(tài)。圖9是示出用于能夠?qū)崿F(xiàn)本文所提出的各種實施例的計算系統(tǒng)的說明性計算機硬件和軟件體系結(jié)構(gòu)的計算機體系結(jié)構(gòu)圖。圖9示出的計算機體系結(jié)構(gòu)示出了傳統(tǒng)臺式計算機、膝上計算機,或服務(wù)器計算機,并可被用來執(zhí)行此處描述的各種軟件組件。圖9所示的計算機體系結(jié)構(gòu)包括中央處理單元902 ( “CPU”)、包括隨機存取存儲器914( “RAM”)和只讀存儲器(“ROM”)916的系統(tǒng)存儲器908、以及將存儲器耦合至CPU902的系統(tǒng)總線904。包含諸如在啟動期間有助于在計算機900內(nèi)的元件之間傳輸信息的基本例程的基本輸入/輸出系統(tǒng)(“BIOS”)被存儲在ROM 916中。計算機900還包括用于存儲操作系統(tǒng)918、應(yīng)用程序和其他程序模塊的大容量存儲設(shè)備910,這將在以下更為詳細地描述。大容量存儲設(shè)備910通過連接至總線904的大容量存儲控制器(未示出)連接到CPU 902。大容量存儲設(shè)備910及其相關(guān)聯(lián)的計算機可讀存儲介質(zhì)為計算機900提供非易失性的存儲。雖然對此處包含的計算機可讀介質(zhì)的描述引用了諸如硬盤或CD-ROM驅(qū)動器等大容量存儲設(shè)備,但本領(lǐng)域的技術(shù)人員應(yīng)當理解,計算機可讀介質(zhì)可以是可由計算機900訪問的任何可用計算機存儲介質(zhì)。作為示例而非限制,計算機可讀存儲介質(zhì)可包括以用于存儲諸如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)的信息的任何方法或技術(shù)實現(xiàn)的易失性和非易失性、可移動和不可移動介質(zhì)。例如,計算機可讀存儲介質(zhì)包括,但并不限于,RAM、ROM、EPROM、EEPR0M、閃存或其他固態(tài)存儲器技術(shù),⑶-ROM、數(shù)字多功能盤(“DVD”)、HD_DVD、藍光或其他光學存儲,磁帶盒、磁帶、磁盤存儲器或其他磁存儲設(shè)備,或可以用來存儲所需信息并可由計算機900訪問的任何其他非易失性介質(zhì)。可以理解,此處的計算機可讀介質(zhì)也包括通信介質(zhì)。通信介質(zhì)通常以諸如載波或其他傳輸機制等已調(diào)制數(shù)據(jù)信號來體現(xiàn)計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù),并包括任意信息傳送介質(zhì)。術(shù)語“已調(diào)制數(shù)據(jù)信號”是指其一個或多個特征以在信號中對信息進行編碼的方式來設(shè)置或改變的信號。作為示例而非限制,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直接線連接之類的有線介質(zhì),以及諸如聲學、RF、紅外及其他無線介質(zhì)之類的無線介質(zhì)。上述中任一組合也應(yīng)包括在計算機可讀介質(zhì)的范圍之內(nèi)。計算機可讀存儲介質(zhì)不包括通信介質(zhì)。根據(jù)各實施例,計算機900可以使用通過諸如網(wǎng)絡(luò)920之類的網(wǎng)絡(luò)到遠程計算機的邏輯連接來在聯(lián)網(wǎng)環(huán)境中操作。計算機900可以通過連接至總線904的網(wǎng)絡(luò)接口單元906來連接到網(wǎng)絡(luò)920。應(yīng)當理解,網(wǎng)絡(luò)接口單元906還可以被用來連接到其他類型的網(wǎng)絡(luò)和遠程計算機系統(tǒng)。計算機900還可包括用于接收和處理來自多個其他設(shè)備的輸入的輸入/輸出控制器912,這些設(shè)備包括鍵盤、鼠標或者電子指示筆(未在圖9中示出)。類似地,輸入/輸出控制器可以提供至顯示屏、打印機或其他類型的輸出設(shè)備(也未在圖9中示出)的輸出。如前簡述的那樣,多個程序模塊和數(shù)據(jù)文件可以存儲在計算機900的大容量存儲設(shè)備910和RAM 914內(nèi),包括適于控制聯(lián)網(wǎng)的臺式、膝上型或服務(wù)器計算機的操作的操作系統(tǒng)918。大容量存儲設(shè)備910和RAM 914還可以存儲一個或多個程序模塊。具體而言,大容量存儲設(shè)備910和RAM 914可存儲虛擬化應(yīng)用106、應(yīng)用虛擬化層102、和/或上面描述的其他軟件組件。大容量存儲設(shè)備910和RAM 914還可存儲其他程序模塊和數(shù)據(jù),諸如應(yīng)用狀態(tài)202。一般而言,軟件應(yīng)用或模塊在加載到CPU 902中并執(zhí)行時,可將CPU 902和整個計算機900從通用計算系統(tǒng)變換成被定制成執(zhí)行此處所呈現(xiàn)功能的專用計算系統(tǒng)。CPU 902可以用任意數(shù)量的晶體管或其他分立的電路元件(它們可以分別地或共同地呈現(xiàn)任意數(shù)量的狀態(tài))構(gòu)建。更具體地說,CPU 902可以響應(yīng)軟件或模塊內(nèi)包含的可執(zhí)行的指令,作為一個或多個有限狀態(tài)機來操作。這些計算機可執(zhí)行的指令可以通過指定CPU 902如何在多個狀態(tài)之間轉(zhuǎn)換來轉(zhuǎn)換CPU 902,從而在物理上轉(zhuǎn)換構(gòu)成CPU 902的晶體管或其他分立的硬件兀件。通過將軟件或模塊編碼到大容量存儲設(shè)備上,還可變換大容量存儲設(shè)備或相關(guān)聯(lián)的計算機可讀存儲介質(zhì)的物理結(jié)構(gòu)。在本說明書的不同實現(xiàn)中,物理結(jié)構(gòu)的具體變換可取決于各種因素。這些因素的示例包括但不限于:用來實現(xiàn)計算機可讀存儲介質(zhì)、計算機可讀存儲介質(zhì)是否被表征為主存儲還是次級存儲等技術(shù)。例如,如果計算機可讀取的存儲介質(zhì)是作為基于半導體的存儲器實現(xiàn)的,則當軟件被編碼到其中時,軟件或模塊可以轉(zhuǎn)換半導體存儲器的物理狀態(tài)。例如,軟件可以轉(zhuǎn)換構(gòu)成半導體存儲器的晶體管、電容器或其他分立的電路元件的狀態(tài)。
作為另一個示例,計算機可讀取的存儲介質(zhì)可以使用磁性或光學技術(shù)來實現(xiàn)。在這樣的實現(xiàn)方式中,當軟件被編碼到其中時,軟件或模塊可以轉(zhuǎn)換磁性或光學介質(zhì)的物理狀態(tài)。這些變換可以包括改變給定磁性介質(zhì)內(nèi)的特定位置的磁性。這些變換還可以包括改變給定光學介質(zhì)內(nèi)的特定位置的物理特征或特性,以改變這些位置的光學特性。在沒有偏離本說明書的范圍和精神的情況下,物理介質(zhì)的其他轉(zhuǎn)換也是可以的,前面提供的示例只是為了便于此討論?;谇笆鰞?nèi)容,應(yīng)當理解,在此已經(jīng)提出了用于存儲和恢復應(yīng)用運行時狀態(tài)的技術(shù)。雖然以計算機結(jié)構(gòu)特征、方法動作、以及計算機可讀介質(zhì)專用的語言描述了本文呈現(xiàn)的主題,但是應(yīng)該理解,在所附權(quán)利要求書中所限定的本發(fā)明不一定僅限于本文描述的具體特征、動作、或介質(zhì)。相反,這些具體特征、動作和介質(zhì)是作為實現(xiàn)權(quán)利要求的示例形式來公開的。上述主題僅作為說明提供,并且不應(yīng)被解釋為限制??蓪Υ颂幩龅闹黝}作出各種修改和改變,而不必遵循所示和所述的示例實施例和應(yīng)用,且不背離所附權(quán)利要求書中所述的本發(fā)明的真正精神和范圍。
權(quán)利要求
1.一種包括執(zhí)行計算機實現(xiàn)的操作的計算機實現(xiàn)的方法,所述計算機實現(xiàn)的操作用于: 接收存儲正在計算機(108)上執(zhí)行的應(yīng)用(106)的運行時狀態(tài)(202)的請求;以及 響應(yīng)于接收到所述請求,獨立于操作系統(tǒng)(104)的狀態(tài)而收集所述應(yīng)用(106)的所述運行時狀態(tài)(202),并保持所述運行時狀態(tài)(202)。
2.按權(quán)利要求1所述的計算機實現(xiàn)的方法,其特征在于,還包括: 接收還原所述應(yīng)用的所述運行時狀態(tài)的請求;以及 響應(yīng)于接收到還原所述應(yīng)用的所述運行時狀態(tài)的請求,還原所述應(yīng)用的所述運行時狀態(tài)并執(zhí)行所還原的應(yīng)用。
3.按權(quán)利要求2所述的計算機實現(xiàn)的方法,其特征在于,還包括提供代理層,其用于翻譯來自所述應(yīng)用的對在保持所述應(yīng)用的所述運行時狀態(tài)之后已改變的資源的請求。
4.按權(quán)利要求3所述的計算機實現(xiàn)的方法,其特征在于,還包括在保持所述運行時狀態(tài)之后并在還原所述運行時狀態(tài)之前對所述計算機執(zhí)行維護操作。
5.按權(quán)利要求3所述的計算機實現(xiàn)的方法,其特征在于,所述應(yīng)用包括虛擬化應(yīng)用。
6.按權(quán)利要求5所述的計算機實現(xiàn)的方法,其特征在于,所述運行時狀態(tài)包括存儲器內(nèi)容、寄存器上下文、以及指令指針。
7.一種其上存儲有計算機可執(zhí)行指令的計算機可讀存儲介質(zhì),所述計算機可執(zhí)行指令在由計算機執(zhí)行時致使所述計算機: 接收存儲正在計算機(108)上執(zhí)行的應(yīng)用(106)的運行時狀態(tài)(202)的請求; 響應(yīng)于接收到所述請求,獨立于操作系統(tǒng)(104)的狀態(tài)而收集所述應(yīng)用(106)的所述運行時狀態(tài)(202),并保持所述運行時狀態(tài)(202); 接收還原所述應(yīng)用(106)的所述運行時狀態(tài)(202)的請求;以及 響應(yīng)于接收到還原所述應(yīng)用(106)的所述運行時狀態(tài)(202)的請求,還原所述應(yīng)用(106)的所述運行時狀態(tài)(202)并執(zhí)行所還原的應(yīng)用(106)。
8.按權(quán)利要求7所述的計算機可讀存儲介質(zhì),其特征在于,具有存儲于其上的進一步的計算機可執(zhí)行指令,所述進一步的計算機可執(zhí)行指令在由所述計算機執(zhí)行時致使所述計算機提供代理層,其用于翻譯來自所述應(yīng)用的對在所述應(yīng)用的所述運行時狀態(tài)被保持之后已改變的一個或多個資源的請求。
9.按權(quán)利要求8所述的計算機可讀存儲介質(zhì),其特征在于,具有存儲于其上的進一步的計算機可執(zhí)行指令,所述進一步的計算機可執(zhí)行指令在由所述計算機執(zhí)行時致使所述計算機將所述運行時狀態(tài)從所述計算機移至第二計算機以對所述計算機的處理負載進行負載平衡。
10.按權(quán)利要求9所述的計算機可讀存儲介質(zhì),其特征在于,所述運行時狀態(tài)還包括在收集所述運行時狀態(tài)時的系統(tǒng)資源狀態(tài)、用戶界面狀態(tài)、網(wǎng)絡(luò)連接狀態(tài)、以及在收集所述運行時狀態(tài)時正在被所述應(yīng)用使用的一個或多個文件資源。
全文摘要
本發(fā)明涉及存儲和恢復應(yīng)用運行時狀態(tài)。掛起應(yīng)用的執(zhí)行并且收集并保持該應(yīng)用的運行時狀態(tài)。然后可對該應(yīng)用在其上執(zhí)行的計算機執(zhí)行維護操作。還可將該運行時狀態(tài)移至另一計算機。為了恢復該應(yīng)用的執(zhí)行,還原該應(yīng)用的運行時狀態(tài)。一旦還原了該應(yīng)用的運行時狀態(tài)之后,可從該執(zhí)行被掛起的點處重新啟動該應(yīng)用的執(zhí)行。還可利用代理層來對從應(yīng)用接收的對在該應(yīng)用的運行時狀態(tài)被保持后被修改的資源的請求進行翻譯。
文檔編號G06F9/50GK103092777SQ201110448219
公開日2013年5月8日 申請日期2011年12月28日 優(yōu)先權(quán)日2010年12月28日
發(fā)明者C·凱凱, A·科利, S·E·斯特恩斯, K·H·雷厄森, C·W·小梅福德, A·M·安德森 申請人:微軟公司