專利名稱:在計(jì)算機(jī)系統(tǒng)中用于對進(jìn)程進(jìn)行休眠的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)處理技術(shù),特別地,本發(fā)明涉及在計(jì)算機(jī)系統(tǒng)中用于對進(jìn)程進(jìn)行休眠的方法和系統(tǒng),以及對已休眠進(jìn)程進(jìn)行喚醒的方法和系統(tǒng)。
背景技術(shù):
隨著信息技術(shù)的快速發(fā)展,人們在個(gè)人計(jì)算機(jī)(PC)上運(yùn)行各種應(yīng)用程序時(shí),時(shí)常會同時(shí)打開多個(gè)應(yīng)用程序,顯然,這將占用許多系統(tǒng)資源而且會降低系統(tǒng)的性能。即使某些應(yīng)用程序在系統(tǒng)中處于掛起狀態(tài),但是這些應(yīng)用程序仍舊占用了相關(guān)的文件(句柄)資源、硬件/端口/網(wǎng)絡(luò)/圖象資源,這仍會降低計(jì)算機(jī)的性能。另外,當(dāng)人們在重新打開應(yīng)用程序以繼續(xù)以前的工作時(shí),需要采取一系列的動作,例如在文字編輯時(shí),除了打開編輯軟件,還需要選擇并打開被編輯的文件,并通過翻頁/滾動拖動條定位到上次的編輯對象上,然后才能繼續(xù)工作,因此需要提供一種可針對單個(gè)進(jìn)程,例如一個(gè)已經(jīng)打開的應(yīng)用程序,進(jìn)行休眠的技術(shù)方案來解決上述這些問題。
為解決這些問題,現(xiàn)有技術(shù)中提供了一些技術(shù)解決方案。其中,就本發(fā)明的技術(shù)人員所了解的,在一種Palm操作系統(tǒng)中,使用一種特定的硬件平臺(例如,能夠被用作內(nèi)存和硬盤的公共存儲器),能將運(yùn)行的應(yīng)用程序凍結(jié)。但是,在個(gè)人計(jì)算機(jī)(PC)平臺,在當(dāng)前的硬件條件和操作系統(tǒng)下仍舊存在上述問題。
在其他領(lǐng)域曾使用了一些解決方案,其類似于本發(fā)明的解決方案。舉例來說,以下是一些相關(guān)技術(shù)和應(yīng)用程序的示例1、進(jìn)程管理應(yīng)用,諸如Windows2000/XP中的taskmgr.exe。它能修改進(jìn)程的工作優(yōu)先級,但是修改的范圍僅限于六個(gè)級別實(shí)時(shí)(realtime)、高(high)、高于正常(above normal)、正常(normal)、低于正常(below normal)、以及低(low)。這種技術(shù)不能完全中止進(jìn)程、從而回收所有進(jìn)程占用的資源。
2、一些軟件能保存最后工作的場景(scenario),例如winamp3.exe。但是,這種技術(shù)需要由軟件開發(fā)者來實(shí)施,并且現(xiàn)在大多數(shù)的軟件都不能支持這個(gè)特性。
3、一些集群(cluster)/并行系統(tǒng)支持進(jìn)程移植技術(shù),例如MOSIX系統(tǒng)。但是這種技術(shù)需要完全修改系統(tǒng)內(nèi)核并且僅能在多計(jì)算機(jī)系統(tǒng)上實(shí)施。
4、備份/恢復(fù)應(yīng)用程序?,F(xiàn)在的備份/恢復(fù)應(yīng)用程序只能處理靜態(tài)的文件鏡像。
5、系統(tǒng)休眠技術(shù),這種技術(shù)能快照(snapshot)整個(gè)內(nèi)存的鏡像并將所述鏡像保存到硬盤上。但是,系統(tǒng)體眠針對的是整個(gè)計(jì)算機(jī)系統(tǒng),它不能對計(jì)算機(jī)系統(tǒng)上運(yùn)行的單個(gè)的進(jìn)程進(jìn)行休眠。并且,系統(tǒng)休眠技術(shù)還依賴于特定的硬件平臺,例如計(jì)算機(jī)的電源管理必須支持ACPI(高級配置和功率管理接口Advanced configuration andPower Interface)等。
由以上對現(xiàn)有技術(shù)的描述可知,在現(xiàn)有技術(shù)中,在提高系統(tǒng)資源利用率、改善計(jì)算機(jī)性能方面,現(xiàn)有的休眠技術(shù)只針對的是整個(gè)計(jì)算機(jī)系統(tǒng),而沒有提供管理單個(gè)進(jìn)程的能力,因此特別對于正在運(yùn)行的系統(tǒng)而言,并沒有為其提供高的運(yùn)算性能。
發(fā)明內(nèi)容
為解決現(xiàn)有技術(shù)中存在的問題,提出了本發(fā)明的用于對進(jìn)程進(jìn)行休眠的方法和系統(tǒng)。根據(jù)本發(fā)明,可以簡化用戶在打開/關(guān)閉應(yīng)用程序時(shí)的操作,并且在系統(tǒng)高負(fù)荷下提高系統(tǒng)的性能,而且也提供了一種恢復(fù)實(shí)時(shí)工作環(huán)境的方法。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種新型的技術(shù)方案來休眠和重2使用(喚醒)進(jìn)程(運(yùn)行的應(yīng)用程序)。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種在計(jì)算機(jī)系統(tǒng)中用于對進(jìn)程進(jìn)行休眠的方法,包括以下步驟隱藏所述進(jìn)程的所有窗口;掛起所述進(jìn)程的所有線程;記錄所述進(jìn)程的上下文并將所記錄的所述進(jìn)程上下文作為一個(gè)休眠進(jìn)程文件進(jìn)行轉(zhuǎn)存;以及終止所述進(jìn)程以對所述進(jìn)程休眠。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種在計(jì)算機(jī)系統(tǒng)中用于對休眠進(jìn)程進(jìn)行喚醒的方法,構(gòu)造一個(gè)與所述休眠進(jìn)程的上下文結(jié)構(gòu)相似的包裝器(Wrapper),通過執(zhí)行以下步驟來喚醒休眠進(jìn)程,所述步驟包括恢復(fù)所述休眠進(jìn)程的上下文;喚醒所述休眠進(jìn)程的所有線程;以及顯示所述休眠進(jìn)程的所有窗口以繼續(xù)使用所述進(jìn)程。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種在計(jì)算機(jī)系統(tǒng)中用于對進(jìn)程進(jìn)行休眠的系統(tǒng),包括一個(gè)位于內(nèi)存中的第一存儲器,用于保存所述進(jìn)程在內(nèi)存中的進(jìn)程上下文;一個(gè)原始讀/寫驅(qū)動器(RRWD),用于與所述第一存儲器進(jìn)行交互,而對待休眠進(jìn)程執(zhí)行以下操作隱藏所述進(jìn)程的所有窗口;通過掛起所述進(jìn)程的所有線程來掛起所述進(jìn)程;從所述第一存儲器中讀取記錄在其中的所述進(jìn)程的上下文并將所讀取的所述進(jìn)程上下文作為一個(gè)休眠進(jìn)程文件進(jìn)行轉(zhuǎn)存;以及終止所述進(jìn)程以對所述進(jìn)程休眠;一個(gè)第二存儲器,位于所述計(jì)算機(jī)系統(tǒng)的硬盤中,用于保存由所述RRWD從第一存儲器中讀取的所述進(jìn)程的上下文內(nèi)容。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種在計(jì)算機(jī)系統(tǒng)中用于對休眠進(jìn)程進(jìn)行喚醒的系統(tǒng),包括一個(gè)休眠進(jìn)程文件存儲器,用于保存休眠進(jìn)程的進(jìn)程上下文;以及一個(gè)包裝器(Wrapper),用于構(gòu)造與所述休眠進(jìn)程的上下文結(jié)構(gòu)相似的Wrapper上下文,并用于執(zhí)行以下操作恢復(fù)所述休眠進(jìn)程的上下文;喚醒所述休眠進(jìn)程的所有線程;以及顯示所述休眠進(jìn)程的所有窗口以繼續(xù)使用所述進(jìn)程。
本發(fā)明還提供一種觸發(fā)進(jìn)程休眠/喚醒/備份/恢復(fù)的用戶接口。
根據(jù)本發(fā)明的在計(jì)算機(jī)系統(tǒng)中用于對進(jìn)程進(jìn)行休眠以及對休眠進(jìn)程進(jìn)行喚醒的方法和系統(tǒng),降低了打開/關(guān)閉應(yīng)用程序上的操作,并能通過對運(yùn)行的應(yīng)用程序執(zhí)行休眠來釋放系統(tǒng)資源從而提供高的性能。并且本發(fā)明還可用于運(yùn)行時(shí)間應(yīng)用程序上下文備份和恢復(fù),本發(fā)明可以自動保存當(dāng)前的工作環(huán)境,以及當(dāng)計(jì)算機(jī)發(fā)生故障時(shí)能恢復(fù)整個(gè)環(huán)境。
以下結(jié)合附圖,對本發(fā)明的具體實(shí)施方式
進(jìn)行詳細(xì)的說明,由此,本發(fā)明的特點(diǎn)、優(yōu)點(diǎn)、目的和有益效果將會變得更明顯,其中
圖1示意性示出了根據(jù)現(xiàn)有技術(shù)在進(jìn)程與操作系統(tǒng)中的內(nèi)核之間的結(jié)構(gòu)的圖;圖2示意性示出了根據(jù)本發(fā)明的進(jìn)程休眠系統(tǒng)的結(jié)構(gòu)圖;圖3示意性示出了在休眠進(jìn)程的過程中轉(zhuǎn)存單個(gè)進(jìn)程上下文的過程的示意圖;圖4示意性示出了根據(jù)本發(fā)明的對單個(gè)進(jìn)程執(zhí)行休眠處理的流程圖;圖5示意性示出了根據(jù)本發(fā)明在休眠進(jìn)程喚醒過程中,Wrapper恢復(fù)休眠進(jìn)程的基本信息的步驟中,進(jìn)程1和Wrapper的上下文的示意圖;圖6示意性示出了根據(jù)本發(fā)明在休眠進(jìn)程喚醒過程中,Wrapper恢復(fù)休眠進(jìn)程所占用的系統(tǒng)資源的步驟中,進(jìn)程1和Wrapper的上下文的示意圖;圖7示意性示出了根據(jù)本發(fā)明在休眠進(jìn)程喚醒過程中,Wrapper恢復(fù)休眠進(jìn)程的用戶空間內(nèi)容的步驟中,進(jìn)程1和Wrapper的上下文的示意圖;圖8示意性示出了根據(jù)本發(fā)明在休眠進(jìn)程喚醒過程中,Wrapper恢復(fù)休眠進(jìn)程的所有線程上下文的步驟中,進(jìn)程1和Wrapper的上下文的示意圖;圖9示意性地示出了根據(jù)本發(fā)明的進(jìn)程休眠過程的流程圖;
圖10示意性地示出了根據(jù)本發(fā)明的休眠進(jìn)程喚醒過程的流程圖;圖11示意性地示出了根據(jù)本發(fā)明的進(jìn)程備份過程的流程圖;以及圖12示意性地示出了根據(jù)本發(fā)明的進(jìn)程恢復(fù)過程的流程圖。
具體實(shí)施例方式
以下結(jié)合附圖對本發(fā)明的優(yōu)選實(shí)施方式進(jìn)行描述,應(yīng)該理解,這里描述的實(shí)施例僅是例示的作用,本領(lǐng)域技術(shù)人員在本發(fā)明的教導(dǎo)下,還可以對本發(fā)明進(jìn)行修改、變換,而這些修改或變換均不會脫離本發(fā)明的原理。
圖1示意性示出了根據(jù)現(xiàn)有技術(shù)在進(jìn)程與操作系統(tǒng)中的內(nèi)核之間的結(jié)構(gòu)的圖?,F(xiàn)有計(jì)算機(jī)系統(tǒng)中,通常會有多個(gè)應(yīng)用程序被同時(shí)運(yùn)行,運(yùn)行的應(yīng)用程序(進(jìn)程)與計(jì)算機(jī)系統(tǒng)的內(nèi)核進(jìn)行交互,從而完成數(shù)據(jù)的傳輸、處理等交互操作。
在附圖1中,示意性示出了一個(gè)單個(gè)進(jìn)程,例如進(jìn)程1。該進(jìn)程上下文(Process Context)被分成兩個(gè)部分,一個(gè)是在用戶模式中的用戶空間,另一個(gè)是在內(nèi)核模式中的進(jìn)程記錄。
在圖1中所示出的系統(tǒng)中,在用戶模式中,例如進(jìn)程1的用戶空間中,包括進(jìn)程1的堆棧、代碼以及數(shù)據(jù)等信息;一個(gè)或多個(gè)動態(tài)鏈接庫/函數(shù)庫(DLL/Lib)110(Dynamic-Link Library);一個(gè)與內(nèi)核相連接的內(nèi)核接口120,通過該內(nèi)核接口120,每個(gè)進(jìn)程都可以與操作系統(tǒng)中的進(jìn)程記錄部分130進(jìn)行交互。在附圖1中所示的內(nèi)核模式中,包括一個(gè)進(jìn)程記錄部分130,其中記錄了多個(gè)進(jìn)程,例如進(jìn)程1,進(jìn)程2……進(jìn)程n中的每一個(gè)的進(jìn)程記錄。在圖1中所示出的進(jìn)程1的進(jìn)程記錄中,包括進(jìn)程1的資源索引131、進(jìn)程1的基本信息132,以及進(jìn)程1的運(yùn)行時(shí)間上下文133。具體來講,進(jìn)程1的基本信息132,例如包括進(jìn)程1的名稱、父進(jìn)程、內(nèi)存數(shù)據(jù)庫地址等;進(jìn)程1的資源索引131,例如包括由進(jìn)程所占用的所有資源,其通過與系統(tǒng)資源部分135進(jìn)行交互來獲得所述有關(guān)資源占用的資源索引信息;運(yùn)行時(shí)間上下文133中記錄了進(jìn)程1中的每個(gè)線程TC 1,TC 2,……,TC m的線程上下文,例如寄存器值、定時(shí)器設(shè)置,優(yōu)先級等等。此外,在內(nèi)核模式中,還包括一個(gè)內(nèi)核部分140和一些驅(qū)動程序150,其中在內(nèi)核部分140中例如進(jìn)一步可以包括文件系統(tǒng)管理141,I/O管理142,內(nèi)存/虛擬內(nèi)存管理143...進(jìn)程/線程管理144等功能部件。以上對涉及本發(fā)明的現(xiàn)有技術(shù)的相關(guān)部分進(jìn)行了描述,應(yīng)該知道,為了說明的目的,附圖1中示出的系統(tǒng)做了一些簡化。
根據(jù)本發(fā)明,提出了一種可對單個(gè)進(jìn)程進(jìn)行休眠處理的方法和相應(yīng)的系統(tǒng)。參考附圖2,其中示意性示出了根據(jù)本發(fā)明的進(jìn)程休眠/喚醒系統(tǒng)的結(jié)構(gòu)圖。
在根據(jù)本發(fā)明的進(jìn)程休眠/喚醒系統(tǒng)200中,主要包括原始讀/寫驅(qū)動器(RRWD)230;包裝器(Wrapper)240;系統(tǒng)界面補(bǔ)丁部件(Shell patch SP)210;優(yōu)選地,還可以包括備份/恢復(fù)部件(BRC)250。此外在進(jìn)程休眠系統(tǒng)中,還包括一個(gè)第一外部存儲器240(例如,支持普通文件系統(tǒng)的硬盤,或硬盤上的存儲器),用于保存休眠進(jìn)程的文件;一個(gè)內(nèi)部存儲器260(內(nèi)存),其中保存了供中央處理器(CPU)調(diào)用的進(jìn)程上下文數(shù)據(jù);以及一個(gè)外部備份存儲器270作為備份數(shù)據(jù)庫(例如,支持普通文件系統(tǒng)的硬盤),用于保存?zhèn)浞莸男菝哌M(jìn)程的文件。
以下具體描述根據(jù)本發(fā)明的進(jìn)程休眠/喚醒系統(tǒng)200中各個(gè)部件的功能及所實(shí)現(xiàn)的相應(yīng)的方法步驟。具體地,以下以進(jìn)程1為例來描述根據(jù)本發(fā)明的對單個(gè)進(jìn)程的休眠處理方法和相應(yīng)的系統(tǒng)以及對休眠的進(jìn)程喚醒以繼續(xù)使用該進(jìn)程的方法和相應(yīng)的系統(tǒng)。類似地,根據(jù)本發(fā)明的方法和系統(tǒng)可以實(shí)現(xiàn)對多個(gè)進(jìn)程同時(shí)、或順序?qū)崿F(xiàn)進(jìn)程休眠處理以及相應(yīng)的進(jìn)程喚醒處理。
有三類數(shù)據(jù)需要進(jìn)行處理。RRWD將進(jìn)程上下文從內(nèi)存轉(zhuǎn)存到硬盤(存為文件),并且,修改進(jìn)程內(nèi)容以繼續(xù)使用休眠的進(jìn)程。BRC將使用備份數(shù)據(jù)庫來備份/恢復(fù)休眠的進(jìn)程。
I、原始讀/寫驅(qū)動器(Raw Read/Write Driver RRWD)
根據(jù)本發(fā)明設(shè)計(jì)的所述原始讀/寫驅(qū)動器230是一個(gè)內(nèi)核驅(qū)動器,用于讀取/修改所有用戶進(jìn)程/線程的全部地址空間并掛起/喚醒所有用戶進(jìn)程/線程。所述原始讀/寫驅(qū)動器230與其中存儲了進(jìn)程上下文的內(nèi)部存儲器260交互作用,一方面,在將單個(gè)進(jìn)程進(jìn)行休眠操作時(shí),將存儲器260中所保存的進(jìn)程上下文數(shù)據(jù)讀出,并作為一個(gè)休眠進(jìn)程的文件轉(zhuǎn)存到硬盤上的存儲器240中,另一方面,在對休眠進(jìn)程執(zhí)行喚醒操作時(shí),對在存儲器260中的Wrapper上下文進(jìn)行修改以用于休眠進(jìn)程的喚醒操作,如圖2所示。
特別地,在執(zhí)行根據(jù)本發(fā)明的對單個(gè)進(jìn)程執(zhí)行休眠處理時(shí),RRWD 230能將每個(gè)進(jìn)程,例如進(jìn)程1在內(nèi)存中的所有上下文通過執(zhí)行以下步驟而作為一個(gè)休眠進(jìn)程1的文件轉(zhuǎn)存到計(jì)算機(jī)系統(tǒng)的硬盤中。參見附圖3,其中示意性示出了在休眠進(jìn)程的過程中,轉(zhuǎn)存要休眠的進(jìn)程1的上下文的過程的示意圖(1)RRWD 230將內(nèi)存中的進(jìn)程1用戶空間中的所有內(nèi)容分別轉(zhuǎn)存到計(jì)算機(jī)的硬盤中。在進(jìn)程1的用戶空間中的所有內(nèi)容包括進(jìn)程1的堆棧、進(jìn)程1的代碼、進(jìn)程1的數(shù)據(jù)以及進(jìn)程1在內(nèi)存中對應(yīng)的地址;動態(tài)鏈接庫DLL/Lib、內(nèi)核接口。
(2)RRWD記錄由進(jìn)程1所占用的所有資源并將其轉(zhuǎn)存到硬盤上。其中,由進(jìn)程1所占用的所有資源包括進(jìn)程1的基本信息,例如包括進(jìn)程1的名稱、父進(jìn)程等,以及關(guān)于進(jìn)程1的資源描述(例如資源索引以及所占用的資源的內(nèi)容)。
(3)RRWD將進(jìn)程1的運(yùn)行時(shí)間上下文轉(zhuǎn)存到硬盤。其中,進(jìn)程1的運(yùn)行時(shí)間上下文中包括了進(jìn)程1中的每個(gè)線程TC 1,TC2,......,TC m的線程上下文,例如寄存器值、定時(shí)器設(shè)置,優(yōu)先級等等。
應(yīng)該知道,對以上三個(gè)部分的數(shù)據(jù)的轉(zhuǎn)存不存在時(shí)間上的順序,可以依次執(zhí)行,也可以同時(shí)執(zhí)行。
如圖3所示,當(dāng)對單個(gè)進(jìn)程進(jìn)行休眠的過程中,將內(nèi)存中進(jìn)程1的上下文轉(zhuǎn)存到硬盤的步驟以后,會在硬盤中存在一個(gè)休眠進(jìn)程1的文件。該休眠進(jìn)程1的文件中包括(1)關(guān)于進(jìn)程1基本信息和資源描述的數(shù)據(jù),其中,進(jìn)程1的基本信息中記錄了進(jìn)程1的名稱、父進(jìn)程、內(nèi)存數(shù)據(jù)庫地址等;而進(jìn)程1的資源描述數(shù)據(jù)包括了資源索引以及所占用的資源的內(nèi)容;(2)關(guān)于進(jìn)程1的運(yùn)行時(shí)間上下文數(shù)據(jù),其中,進(jìn)程1的運(yùn)行時(shí)間上下文數(shù)據(jù)包括了進(jìn)程1中的每個(gè)線程TC 1,TC 2,......,TC m的線程上下文,例如寄存器值、定時(shí)器設(shè)置,優(yōu)先級等等;(3)關(guān)于進(jìn)程1的用戶空間描述的數(shù)據(jù),其中,如上所述,記錄了進(jìn)程1在其用戶空間的所有內(nèi)容及相關(guān)聯(lián)的地址。
此外,當(dāng)根據(jù)本發(fā)明對休眠的進(jìn)程進(jìn)行喚醒的過程中,RRWD能夠修改Wrapper的上下文。其通過對內(nèi)存進(jìn)行直接修改而將Wrapper的運(yùn)行時(shí)間上下文恢復(fù)為休眠進(jìn)程。詳細(xì)的過程描述在參照Wrapper部分的描述進(jìn)行詳細(xì)說明。
II、WrapperWrapper是一種用于執(zhí)行對休眠進(jìn)程的處理的專用應(yīng)用程序,其被設(shè)計(jì)用于部分修改其上下文作為目標(biāo)進(jìn)程、其中包括進(jìn)程名稱、用戶空間,系統(tǒng)資源、線程數(shù);以及然后利用RRWD修改剩余的信息,包括線程上下文、父進(jìn)程、優(yōu)先級,以及最后從用戶空間去除Wrapper代碼來實(shí)現(xiàn)對休眠進(jìn)程的喚醒處理。Wrapper將讀取休眠進(jìn)程的轉(zhuǎn)存文件并在Wrapper運(yùn)行時(shí),將其自身的上下文修改為休眠進(jìn)程的上下文。
Wrapper是在用戶希望恢復(fù)使用休眠進(jìn)程的時(shí)候運(yùn)行的。如圖2所示,Wrapper與在硬盤中的存儲器240進(jìn)行交互,通過訪問存儲器240中所保存的休眠進(jìn)程文件,而將Wrapper的上下文設(shè)置為休眠進(jìn)程的上下文。其工作過程通過參見附圖4進(jìn)行如下所述的詳細(xì)描述參見附圖4,其中示出了當(dāng)將Wrapper加載到內(nèi)存時(shí),Wrapper進(jìn)程在內(nèi)存中的上下文鏡像。此處,為簡明起見,將根據(jù)本發(fā)明構(gòu)造的Wrapper進(jìn)程的堆棧、代碼和數(shù)據(jù)在一個(gè)單個(gè)的方框中示出,并且在這里還假設(shè)Wrapper只有一個(gè)線程。
類似地,在附圖4中示出的Wrapper上下文中,可以看到,在用戶模式中,Wrapper的用戶空間也包括Wrapper的堆棧、代碼和數(shù)據(jù);以及與內(nèi)核之間的內(nèi)核接口。而Wrapper在內(nèi)核模式中,包括了Wrapper所占用的資源、所占用資源的索引、基本信息和運(yùn)行時(shí)間上下文。
(1)恢復(fù)休眠進(jìn)程的基本信息Wrapper首先根據(jù)在對單個(gè)進(jìn)程休眠的過程中轉(zhuǎn)存到硬盤中的休眠進(jìn)程的文件來恢復(fù)出進(jìn)程1的基本信息。也就是說,根據(jù)硬盤中轉(zhuǎn)存的休眠進(jìn)程文件中的休眠進(jìn)程1的內(nèi)容,將Wrapper的基本信息修改為進(jìn)程1的內(nèi)容,例如進(jìn)程名稱。
參見附圖5,其中示意性示出了根據(jù)本發(fā)明在休眠進(jìn)程喚醒過程中,Wrapper恢復(fù)休眠進(jìn)程的基本信息的步驟中,進(jìn)程1和Wrapper的上下文的示意圖。
通過這個(gè)步驟,在比較附圖4與附圖5之后可以看到通過首先恢復(fù)出進(jìn)程1的基本信息,附圖4中所示出的初始Wrapper上下文變成當(dāng)前附圖5中所示出的進(jìn)程1&Wrapper的上下文。
(2)恢復(fù)休眠進(jìn)程所占用的系統(tǒng)資源Wrapper從在對單個(gè)進(jìn)程休眠的過程中轉(zhuǎn)存到硬盤中的休眠進(jìn)程的文件中,查詢由休眠進(jìn)程所占用的全部系統(tǒng)資源并且重新應(yīng)用所述休眠進(jìn)程的系統(tǒng)資源。
參見附圖6,其中示意性示出了根據(jù)本發(fā)明在休眠進(jìn)程喚醒過程中,Wrapper恢復(fù)休眠進(jìn)程所占用的系統(tǒng)資源的步驟中,進(jìn)程1和Wrapper的上下文的示意圖。
通過這個(gè)步驟,在比較附圖5與附圖6之后可以進(jìn)一步得到在附圖6中所示出的進(jìn)程1&Wrapper的上下文中,初始Wrapper所占用的系統(tǒng)資源變成了休眠進(jìn)程1所占用的系統(tǒng)資源,以及初始Wrapper中的資源索引也變成了休眠進(jìn)程1的資源索引。
此外,優(yōu)選地,如果當(dāng)前系統(tǒng)不能滿足全部資源應(yīng)用程序的需求,則提示用戶故障并退出對休眠進(jìn)程的喚醒過程。
(3)恢復(fù)休眠進(jìn)程的用戶空間Wrapper找出休眠進(jìn)程的用戶空間中的空閑地址空間,并且將當(dāng)前的代碼移動到空閑地址空間。
除內(nèi)核接口模塊以外,從在對單個(gè)進(jìn)程休眠的過程中轉(zhuǎn)存到硬盤中的休眠進(jìn)程的文件中,讀取休眠進(jìn)程的用戶空間中的所有內(nèi)容并覆蓋到Wrapper用戶空間的對應(yīng)地址上。
參見附圖7,其中示意性示出了根據(jù)本發(fā)明在休眠進(jìn)程喚醒過程中,Wrapper恢復(fù)休眠進(jìn)程的用戶空間內(nèi)容的步驟中,進(jìn)程1和Wrapper的上下文的示意圖。
通過這個(gè)步驟,在比較附圖6與附圖7之后可以進(jìn)一步得到在附圖7中所示出的進(jìn)程1&Wrapper的上下文中,休眠進(jìn)程1在用戶模式下的大部分內(nèi)容,例如進(jìn)程1的堆棧、代碼、數(shù)據(jù),以及進(jìn)程1的DLL/Lib的內(nèi)容都得到了恢復(fù)。
(4)恢復(fù)休眠進(jìn)程的線程上下文在這個(gè)步驟中,Wrapper從對單個(gè)進(jìn)程休眠的過程中轉(zhuǎn)存到硬盤中的休眠進(jìn)程的文件中,讀取休眠進(jìn)程1的線程數(shù)目,并且啟動相同的線程數(shù)目。
然后,Wrapper向系統(tǒng)申請掛起所有線程,包括主要的線程。
在這個(gè)步驟之后,Wrapper的上下文被部分恢復(fù)成休眠進(jìn)程的上下文。然后,RRWD把每個(gè)線程的上下文修改為休眠線程的上下文,并且恢復(fù)一些關(guān)鍵信息,例如父進(jìn)程等。
最后的步驟是從用戶空間去除Wrapper的內(nèi)容。此時(shí),原來Wrapper的進(jìn)程上下文已經(jīng)完全被進(jìn)程1的上下文所替換,也即,休眠進(jìn)程上下文被完全恢復(fù)。如果RRWD喚醒進(jìn)程1的所有線程,則休眠進(jìn)程將得以繼續(xù)使用。
參見附圖8,其中示意性示出了根據(jù)本發(fā)明在休眠進(jìn)程喚醒過程中,Wrapper恢復(fù)休眠進(jìn)程的所有線程上下文的步驟中,進(jìn)程1和Wrapper的上下文的示意圖。
通過這個(gè)步驟,在比較附圖7與附圖8之后可以進(jìn)一步得到在附圖8中所示出的進(jìn)程1&Wrapper的上下文中,由Wrapper初始只具有一個(gè)線程而恢復(fù)到實(shí)現(xiàn)休眠進(jìn)程1所有線程得到完全恢復(fù)。也就是說,在完成附圖8的步驟后,實(shí)現(xiàn)了對休眠進(jìn)程的喚醒以及可以使休眠進(jìn)程在得到喚醒后得以繼續(xù)使用。
III 備份/恢復(fù)部件(Backup & Restore Component BRC)在根據(jù)本發(fā)明的一種優(yōu)選實(shí)施方式中,還可以包括一個(gè)備份/恢復(fù)部件(BRC),用于以一定的時(shí)間周期自動保存所有進(jìn)程上下文,以便在計(jì)算機(jī)系統(tǒng)出現(xiàn)故障或異常關(guān)閉的情況下,能利用所保存的進(jìn)程的最新上下文來恢復(fù)進(jìn)程或休眠進(jìn)程的內(nèi)容。該部件可以通過定時(shí)器或用戶首選項(xiàng)(preference)來進(jìn)行觸發(fā),例如,它將每隔五分鐘自動調(diào)用RRWD以保存所有進(jìn)程上下文。當(dāng)計(jì)算機(jī)啟動時(shí),如果計(jì)算機(jī)最后的關(guān)閉是異常的,例如計(jì)算機(jī)崩潰并重啟時(shí),則它可以根據(jù)用戶的設(shè)定,恢復(fù)最后保存的進(jìn)程所有上下文。
如圖2所示,BRC與存儲器240進(jìn)行交互,以每隔一定時(shí)間間隔將在進(jìn)程休眠處理過程中轉(zhuǎn)存到硬盤中的休眠進(jìn)程文件自動保存到一個(gè)備份數(shù)據(jù)庫270中。
IV.Shell Patch(系統(tǒng)界面補(bǔ)丁)(SP)。
SP是用于Linux(例如Gnome)或Windows Explorer(視窗瀏覽器)中的回調(diào)函數(shù)(call back)功能的桌面平臺的補(bǔ)丁(patch)。它集中在用戶接口(UI)設(shè)計(jì)上能在用戶輸入熱鍵(例如“Alt-F5”)時(shí),觸發(fā)用于當(dāng)前進(jìn)程的休眠處理,并且如果用戶輸入另一個(gè)熱鍵(例如“Ctrl-Tab”)則可以列出硬盤中的所有休眠進(jìn)程。其在Shell中增加一個(gè)將觸發(fā)繼續(xù)使用指定進(jìn)程的上下文菜單項(xiàng)。
再次參見附圖2,SP是提供進(jìn)程休眠系統(tǒng)與操作系統(tǒng)之間交互的接口。通過所述SP,用戶可以選擇待休眠的進(jìn)程或者待喚醒的進(jìn)程;當(dāng)用戶選擇某待休假進(jìn)程時(shí),SP通過調(diào)用RRWD對進(jìn)程進(jìn)行休眠;當(dāng)用戶選擇待喚醒進(jìn)程時(shí),SP通過選擇Wrapper和RRWD對休眠進(jìn)程進(jìn)行喚醒以繼續(xù)使用,當(dāng)需要備份所有進(jìn)程上下文時(shí),SP通過選擇BRC來備份進(jìn)程等。
以下通過參考附圖2并結(jié)合附圖9-12的流程圖來描述根據(jù)本發(fā)明的進(jìn)程休眠/喚醒過程的具體步驟。
附圖9示意性地示出了根據(jù)本發(fā)明的進(jìn)程休眠過程的流程圖。參見附圖9,首先當(dāng)啟動對單個(gè)進(jìn)程的進(jìn)程休眠過程時(shí),在步驟S905中,RRWD將隱藏(最小化)指定要進(jìn)行休眠的進(jìn)程的所有窗口。然后,在步驟S910中,RRWD通過掛起該進(jìn)程的所有線程而將該指定進(jìn)程掛起。接著在步驟S915中,RRWD將該指定休眠的進(jìn)程的上下文轉(zhuǎn)存到計(jì)算機(jī)的硬盤中。具體地,在該步驟中,RRWD將以下指定休眠進(jìn)程的上下文內(nèi)容轉(zhuǎn)存到計(jì)算機(jī)的硬盤中(1)將內(nèi)存中指定進(jìn)程的用戶空間中的所有內(nèi)容轉(zhuǎn)存到計(jì)算機(jī)的硬盤中,例如,指定進(jìn)程的用戶空間中的所有內(nèi)容包括指定進(jìn)程的堆棧、代碼、數(shù)據(jù);動態(tài)鏈接庫DLL/Lib、內(nèi)核接口。(2)查詢由指定進(jìn)程所占用的所有資源并將其轉(zhuǎn)存到硬盤上。其中,由指定進(jìn)程所占用的所有資源包括指定進(jìn)程的基本信息,例如包括指定進(jìn)程的名稱、父進(jìn)程、地址空間入口等,以及關(guān)于指定進(jìn)程的資源描述,例如資源索引以及所占用的資源的內(nèi)容。(3)將指定進(jìn)程的進(jìn)程狀態(tài)信息,例如運(yùn)行時(shí)間上下文轉(zhuǎn)存到硬盤。其中,所述運(yùn)行時(shí)間上下文中包括了進(jìn)程中的每個(gè)線程TC 1,TC 2,......,TC m的線程上下文,例如寄存器值、定時(shí)器設(shè)置,優(yōu)先級等等。最后,在步驟S920中,終止該進(jìn)程,即進(jìn)程休眠成功,以及釋放該指定進(jìn)程所占用的所有資源。
附圖10示意性地示出了根據(jù)本發(fā)明的休眠進(jìn)程喚醒過程的流程圖。參見附圖10,休眠進(jìn)程喚醒過程的簡單工作過程如下所示。在步驟S1005中,Wrapper將恢復(fù)休眠進(jìn)程上下文。在所述恢復(fù)休眠進(jìn)程上下文的步驟中,進(jìn)一步包括以下子步驟(1)恢復(fù)休眠進(jìn)程的基本信息。也就是說,根據(jù)硬盤中轉(zhuǎn)存的休眠進(jìn)程文件中的休眠進(jìn)程的內(nèi)容,修改其基本信息,例如進(jìn)程名稱;(2)恢復(fù)休眠進(jìn)程所占用的系統(tǒng)資源;(3)恢復(fù)休眠進(jìn)程的用戶空間;(4)恢復(fù)運(yùn)行時(shí)間上下文,包括每個(gè)線程的上下文;(5)恢復(fù)其他的基本信息,例如父進(jìn)程(如果可用的話);以及(6)RRWD通過釋放Wrapper所占用的地址區(qū)域而從用戶空間去除Wrapper代碼。然后,在成功實(shí)現(xiàn)所述恢復(fù)休眠進(jìn)程上下文的步驟之后,在步驟S1010中,RRWD將喚醒該休眠進(jìn)程。以及,最后在步驟S1015中,RRWD將顯示休眠進(jìn)程的所有窗口。由此,成功實(shí)現(xiàn)了對休眠進(jìn)程的喚醒。
附圖11、12示意性地示出了根據(jù)本發(fā)明的進(jìn)程備份/恢復(fù)過程的流程圖。該進(jìn)程備份/恢復(fù)過程優(yōu)選地是進(jìn)程休眠過程的附加和擴(kuò)展功能,其在進(jìn)行進(jìn)程休眠的過程中,自動將在進(jìn)程休眠過程中轉(zhuǎn)存到硬盤上的內(nèi)容按一定的時(shí)間間隔進(jìn)行自動備份,以及在計(jì)算機(jī)系統(tǒng)出現(xiàn)故障或異常關(guān)閉的情況下,能利用所保存的進(jìn)程的最新上下文來恢復(fù)進(jìn)程或休眠進(jìn)程的內(nèi)容。
參見附圖11,進(jìn)程備份的簡單工作過程如下所示首先,在步驟S1105中,執(zhí)行對進(jìn)程休眠過程的調(diào)用。在該步驟中,實(shí)際上是對進(jìn)程執(zhí)行了進(jìn)程休眠全部過程(圖9描述)。接下來,在步驟S1110中,BRC將在硬盤上保存的進(jìn)程轉(zhuǎn)存文件和由進(jìn)程打開的所有文件備份到一個(gè)非易失性存儲器中。以及,在計(jì)算機(jī)運(yùn)行出現(xiàn)故障或異常關(guān)閉的情況下,在步驟S1115中,調(diào)用進(jìn)程喚醒過程,即圖10描述的過程,由此成功實(shí)現(xiàn)備份。
附圖12示意性地示出了根據(jù)本發(fā)明的進(jìn)程恢復(fù)過程的流程圖。參見附圖12,進(jìn)程恢復(fù)的簡單進(jìn)程過程如下所示首先在步驟S1205中,BRC將從備份數(shù)據(jù)庫中復(fù)制所有文件到原始位置,其將覆蓋現(xiàn)有文件。也就是說,恢復(fù)硬盤上的進(jìn)程轉(zhuǎn)存文件和該進(jìn)程打開的所有文件。
然后,在步驟S1210中,BRC通過調(diào)用進(jìn)程喚醒過程,即圖10描述的過程,來恢復(fù)進(jìn)程。
以上結(jié)合附圖,對根據(jù)本發(fā)明針對單個(gè)進(jìn)程的進(jìn)程休眠/喚醒的方法和系統(tǒng)的各個(gè)實(shí)施例進(jìn)行了詳細(xì)描述,但是以上這些實(shí)施例僅是示例的,本領(lǐng)域技術(shù)人員可以在本發(fā)明的精神和范圍內(nèi)作出各種變化和修改。因此,本發(fā)明不限于這些實(shí)施例,本發(fā)明的范圍由隨附權(quán)利要求限定為準(zhǔn)。
權(quán)利要求
1.一種在計(jì)算機(jī)系統(tǒng)中用于對進(jìn)程進(jìn)行休眠的方法,包括以下步驟隱藏所述進(jìn)程的所有窗口;掛起所述進(jìn)程的所有線程;記錄所述進(jìn)程的上下文并將所記錄的所述進(jìn)程上下文作為一個(gè)休眠進(jìn)程文件進(jìn)行轉(zhuǎn)存;以及終止所述進(jìn)程以對所述進(jìn)程休眠。
2.根據(jù)權(quán)利要求1的用于對進(jìn)程進(jìn)行休眠的方法,進(jìn)一步包括,將所記錄的所述進(jìn)程上下文轉(zhuǎn)存到硬盤的步驟,其中包括以下子步驟將內(nèi)存中記錄的所述進(jìn)程的用戶空間中的所有內(nèi)容轉(zhuǎn)存到計(jì)算機(jī)的硬盤中;將內(nèi)存中記錄的所述進(jìn)程所占用的所有資源轉(zhuǎn)存到硬盤上;將內(nèi)存中記錄的所述進(jìn)程的運(yùn)行時(shí)間上下文轉(zhuǎn)存到硬盤中。
3.根據(jù)權(quán)利要求2的用于對進(jìn)程進(jìn)行休眠的方法,其中,所述將內(nèi)存中記錄的所述進(jìn)程的用戶空間中的所有內(nèi)容轉(zhuǎn)存到計(jì)算機(jī)的硬盤中的子步驟包括將關(guān)于所述進(jìn)程的堆棧、代碼和數(shù)據(jù),動態(tài)鏈接庫DLL/Lib、以及內(nèi)核接口的內(nèi)容轉(zhuǎn)存到計(jì)算機(jī)的硬盤中。
4.根據(jù)權(quán)利要求2的用于對進(jìn)程進(jìn)行休眠的方法,其中,所述將內(nèi)存中記錄的所述進(jìn)程所占用的所有資源轉(zhuǎn)存到硬盤上的子步驟包括將所述進(jìn)程的基本信息以及關(guān)于所述進(jìn)程的資源描述轉(zhuǎn)存到硬盤上,其中,所述進(jìn)程的基本信息包括所述進(jìn)程的名稱、父進(jìn)程、地址空間入口,以及所述進(jìn)程的資源描述包括資源索引以及所述進(jìn)程所占用的資源的內(nèi)容。
5.根據(jù)權(quán)利要求2的用于對進(jìn)程進(jìn)行休眠的方法,其中,所述將內(nèi)存中記錄的所述進(jìn)程的運(yùn)行時(shí)間上下文轉(zhuǎn)存到硬盤中的子步驟包括將所述進(jìn)程中的每個(gè)線程的線程上下文轉(zhuǎn)存到硬盤中,其中所述線程上下文包括寄存器值、定時(shí)器設(shè)置,優(yōu)先級等。
6.根據(jù)權(quán)利要求1的用于對進(jìn)程進(jìn)行休眠的方法,進(jìn)一步包括以一定的時(shí)間間隔,將所述轉(zhuǎn)存到硬盤中的所述進(jìn)程的休眠進(jìn)程文件自動備份到一個(gè)數(shù)據(jù)庫中的步驟。
7.根據(jù)權(quán)利要求1的用于對進(jìn)程進(jìn)行休眠的方法,進(jìn)一步包括為用戶提供已運(yùn)行進(jìn)程的列表,用于由用戶選擇待休眠的進(jìn)程。
8.一種在計(jì)算機(jī)系統(tǒng)中用于對休眠進(jìn)程進(jìn)行喚醒的方法,構(gòu)造一個(gè)與所述休眠進(jìn)程的上下文結(jié)構(gòu)相似的包裝器(Wrapper),通過執(zhí)行以下步驟來喚醒休眠進(jìn)程,所述步驟包括恢復(fù)所述休眠進(jìn)程的上下文;喚醒所述休眠進(jìn)程的所有線程;以及顯示所述休眠進(jìn)程的所有窗口以繼續(xù)使用所述進(jìn)程。
9.根據(jù)權(quán)利要求8的用于對休眠進(jìn)程進(jìn)行喚醒的方法,進(jìn)一步包括根據(jù)在進(jìn)程休眠過程中轉(zhuǎn)存到硬盤中的休眠進(jìn)程文件,由所述Wrapper通過執(zhí)行以下子步驟來恢復(fù)所述休眠進(jìn)程的上下文,所述子步驟包括恢復(fù)休眠進(jìn)程的基本信息;恢復(fù)休眠進(jìn)程所占用的系統(tǒng)資源;以及恢復(fù)休眠進(jìn)程的用戶空間。
10.根據(jù)權(quán)利要求8的用于對休眠進(jìn)程進(jìn)行喚醒的方法,進(jìn)一步包括根據(jù)在進(jìn)程休眠過程中轉(zhuǎn)存到硬盤中的休眠進(jìn)程文件,由所述Wrapper通過執(zhí)行以下子步驟來喚醒所述休眠進(jìn)程的所有線程,所述子步驟包括從轉(zhuǎn)存到硬盤中的休眠進(jìn)程文件中讀取所述休眠進(jìn)程的線程數(shù);根據(jù)休眠進(jìn)程的數(shù)目,修改所述Wrapper的線程數(shù)目。
11.根據(jù)權(quán)利要求8的用于對休眠進(jìn)程進(jìn)行喚醒的方法,還包括在計(jì)算機(jī)系統(tǒng)出現(xiàn)故障或異常關(guān)閉計(jì)算機(jī)系統(tǒng)時(shí),調(diào)用存儲在一個(gè)備份數(shù)據(jù)庫中的所述休眠進(jìn)程的休眠進(jìn)程文件的步驟。
12.根據(jù)權(quán)利要求8的用于對休眠進(jìn)程進(jìn)行喚醒的方法,進(jìn)一步包括為用戶提供已休眠進(jìn)程的列表,用于由用戶選擇待喚醒的進(jìn)程。
13.一種在計(jì)算機(jī)系統(tǒng)中用于對進(jìn)程進(jìn)行休眠的系統(tǒng),包括一個(gè)位于內(nèi)存中的第一存儲器,用于保存所述進(jìn)程在內(nèi)存中的進(jìn)程上下文;一個(gè)原始讀/寫驅(qū)動器(RRWD),用于與所述第一存儲器進(jìn)行交互,而對待休眠進(jìn)程執(zhí)行以下操作隱藏所述進(jìn)程的所有窗口;通過掛起所述進(jìn)程的所有線程來掛起所述進(jìn)程;從所述第一存儲器中讀取記錄在其中的所述進(jìn)程的上下文并將所讀取的所述進(jìn)程上下文作為一個(gè)休眠進(jìn)程文件進(jìn)行轉(zhuǎn)存;以及終止所述進(jìn)程以對所述進(jìn)程休眠;一個(gè)第二存儲器,位于所述計(jì)算機(jī)系統(tǒng)的硬盤中,用于保存由所述RRWD從第一存儲器中讀取的所述進(jìn)程的上下文內(nèi)容。
14.根據(jù)權(quán)利要求13的用于對進(jìn)程進(jìn)行休眠的系統(tǒng),其中配置所述RRWD以執(zhí)行以下操作來將所記錄的所述進(jìn)程上下文轉(zhuǎn)存到硬盤上,所述操作包括將內(nèi)存中記錄的所述進(jìn)程的用戶空間中的所有內(nèi)容轉(zhuǎn)存到計(jì)算機(jī)的硬盤中;將內(nèi)存中記錄的所述進(jìn)程所占用的所有資源轉(zhuǎn)存到硬盤上;將內(nèi)存中記錄的所述進(jìn)程的運(yùn)行時(shí)間上下文轉(zhuǎn)存到硬盤中。
15.根據(jù)權(quán)利要求13的用于對進(jìn)程進(jìn)行休眠的系統(tǒng),其中配置所述RRWD以執(zhí)行以下操作來把內(nèi)存中記錄的所述進(jìn)程的用戶空間中的所有內(nèi)容轉(zhuǎn)存到計(jì)算機(jī)的硬盤中,所述操作包括將關(guān)于所述進(jìn)程的堆棧、代碼和數(shù)據(jù),動態(tài)鏈接庫DLL/Lib、以及內(nèi)核接口的內(nèi)容轉(zhuǎn)存到計(jì)算機(jī)的硬盤中。
16.根據(jù)權(quán)利要求13的用于對進(jìn)程進(jìn)行休眠的系統(tǒng),其中配置所述RRWD以執(zhí)行以下操作來把內(nèi)存中所述進(jìn)程所占用的所有資源轉(zhuǎn)存到硬盤上,所述操作包括將所述進(jìn)程的基本信息以及關(guān)于所述進(jìn)程的資源描述轉(zhuǎn)存到硬盤上,其中,所述進(jìn)程的基本信息包括所述進(jìn)程的名稱、父進(jìn)程、內(nèi)存空間入口地址,以及所述進(jìn)程的資源描述包括資源索引以及所述進(jìn)程所占用的資源的內(nèi)容。
17.根據(jù)權(quán)利要求13的用于對進(jìn)程進(jìn)行休眠的系統(tǒng),其中配置所述RRWD以執(zhí)行以下操作來將所述進(jìn)程的運(yùn)行時(shí)間上下文轉(zhuǎn)存到硬盤中,所述操作包括將所述進(jìn)程中的每個(gè)線程的線程上下文轉(zhuǎn)存到硬盤中,其中所述線程上下文包括寄存器值、定時(shí)器設(shè)置,優(yōu)先級等。
18.根據(jù)權(quán)利要求13的用于對進(jìn)程進(jìn)行休眠的系統(tǒng),進(jìn)一步包括一個(gè)備份/恢復(fù)部件(BRC),用于以一定的時(shí)間間隔,自動備份轉(zhuǎn)存到硬盤中的所述進(jìn)程的休眠進(jìn)程文件;以及一個(gè)備份數(shù)據(jù)庫,用于保存由所述備份/恢復(fù)部件所備份的休眠進(jìn)程文件。
19.根據(jù)權(quán)利要求13的用于對進(jìn)程進(jìn)行休眠的系統(tǒng),進(jìn)一步包括一個(gè)與計(jì)算機(jī)系統(tǒng)連接的用戶接口,用于提供已運(yùn)行進(jìn)程列表供用戶選擇待休眠進(jìn)程。
20.一種在計(jì)算機(jī)系統(tǒng)中用于對休眠進(jìn)程進(jìn)行喚醒的系統(tǒng),包括一個(gè)休眠進(jìn)程文件存儲器,用于保存休眠進(jìn)程的進(jìn)程上下文;以及一個(gè)包裝器(Wrapper),用于構(gòu)造與所述休眠進(jìn)程的上下文結(jié)構(gòu)相似的Wrapper上下文,并用于執(zhí)行以下操作恢復(fù)所述休眠進(jìn)程的上下文;喚醒所述休眠進(jìn)程的所有線程;以及顯示所述休眠進(jìn)程的所有窗口以繼續(xù)使用所述進(jìn)程。
21.根據(jù)權(quán)利要求20的用于對休眠進(jìn)程進(jìn)行喚醒的系統(tǒng),進(jìn)一步包括根據(jù)在休眠進(jìn)程文件存儲器中所保存的休眠進(jìn)程文件,由所述Wrapper通過執(zhí)行以下操作來恢復(fù)所述休眠進(jìn)程的上下文,所述操作包括恢復(fù)休眠進(jìn)程的基本信息;恢復(fù)休眠進(jìn)程所占用的系統(tǒng)資源;以及恢復(fù)休眠進(jìn)程的用戶空間。
22.根據(jù)權(quán)利要求20的用于對休眠進(jìn)程進(jìn)行喚醒的系統(tǒng),進(jìn)一步包括一個(gè)備份數(shù)據(jù)庫,用于保存所述休眠進(jìn)程的進(jìn)程上下文的備份文件;一個(gè)備份/恢復(fù)部件(BRC),用于在計(jì)算機(jī)系統(tǒng)出現(xiàn)故障或異常關(guān)閉計(jì)算機(jī)系統(tǒng)時(shí),調(diào)用存儲在所述備份數(shù)據(jù)庫中的所述休眠進(jìn)程的備份休眠進(jìn)程文件。
23.根據(jù)權(quán)利要求22的用于對休眠進(jìn)程進(jìn)行喚醒的系統(tǒng),進(jìn)一步包括一個(gè)與計(jì)算機(jī)系統(tǒng)連接的用戶接口,用于提供已休眠進(jìn)程列表供用戶選擇待喚醒進(jìn)程。
全文摘要
本發(fā)明涉及一種在計(jì)算機(jī)系統(tǒng)中用于單個(gè)進(jìn)程休眠/喚醒的方法和系統(tǒng)。進(jìn)程休眠包括隱藏所述進(jìn)程的所有窗口;掛起所述進(jìn)程的所有線程;記錄所述進(jìn)程的上下文并將所記錄的所述進(jìn)程上下文作為一個(gè)休眠進(jìn)程文件進(jìn)行轉(zhuǎn)存;以及終止所述進(jìn)程以對所述進(jìn)程休眠。喚醒休眠進(jìn)程包括構(gòu)造一個(gè)與所述休眠進(jìn)程的上下文結(jié)構(gòu)相似的包裝器;恢復(fù)所述休眠進(jìn)程的上下文;喚醒所述休眠進(jìn)程的所有線程;以及顯示所述休眠進(jìn)程的所有窗口以繼續(xù)使用所述進(jìn)程。根據(jù)本發(fā)明,降低了打開/關(guān)閉應(yīng)用程序上的操作,優(yōu)化了系統(tǒng)資源。并且還可用于運(yùn)行時(shí)間應(yīng)用程序上下文備份和恢復(fù),自動保存當(dāng)前工作環(huán)境,以及當(dāng)計(jì)算機(jī)發(fā)生故障時(shí)恢復(fù)整個(gè)環(huán)境。
文檔編號G06F9/48GK1801096SQ200510004029
公開日2006年7月12日 申請日期2005年1月5日 優(yōu)先權(quán)日2005年1月5日
發(fā)明者過曉冰, 王哲鵬, 顧光導(dǎo), 蘇輝 申請人:國際商業(yè)機(jī)器公司