具体实施方式
以下结合附图对本发明的优选实施方式进行描述,应该理解,这里描述的实施例仅是例示的作用,本领域技术人员在本发明的教导下,还可以对本发明进行修改、变换,而这些修改或变换均不会脱离本发明的原理。
图1示意性示出了根据现有技术在进程与操作***中的内核之间的结构的图。现有计算机***中,通常会有多个应用程序被同时运行,运行的应用程序(进程)与计算机***的内核进行交互,从而完成数据的传输、处理等交互操作。
在附图1中,示意性示出了一个单个进程,例如进程1。该进程上下文(Process Context)被分成两个部分,一个是在用户模式中的用户空间,另一个是在内核模式中的进程记录。
在图1中所示出的***中,在用户模式中,例如进程1的用户空间中,包括:进程1的堆栈、代码以及数据等信息;一个或多个动态链接库/函数库(DLL/Lib)110(Dynamic-Link Library);一个与内核相连接的内核接口120,通过该内核接口120,每个进程都可以与操作***中的进程记录部分130进行交互。在附图1中所示的内核模式中,包括:一个进程记录部分130,其中记录了多个进程,例如进程1,进程2......进程n中的每一个的进程记录。在图1中所示出的进程1的进程记录中,包括进程1的资源索引131、进程1的基本信息132,以及进程1的运行时间上下文133。具体来讲,进程1的基本信息132,例如包括进程1的名称、父进程、内存数据库地址等;进程1的资源索引131,例如包括由进程所占用的所有资源,其通过与***资源部分135进行交互来获得所述有关资源占用的资源索引信息;运行时间上下文133中记录了进程1中的每个线程TC 1,TC 2,......,TC m的线程上下文,例如寄存器值、定时器设置,优先级等等。此外,在内核模式中,还包括一个内核部分140和一些驱动程序150,其中在内核部分140中例如进一步可以包括文件***管理141,I/O管理142,内存/虚拟内存管理143...进程/线程管理144等功能部件。以上对涉及本发明的现有技术的相关部分进行了描述,应该知道,为了说明的目的,附图1中示出的***做了一些简化。
根据本发明,提出了一种可对单个进程进行休眠处理的方法和相应的***。参考附图2,其中示意性示出了根据本发明的进程休眠/唤醒***的结构图。
在根据本发明的进程休眠/唤醒***200中,主要包括:原始读/写驱动器(RRWD)230;包装器(Wrapper)240;***界面补丁部件(Shell patch SP)210;优选地,还可以包括备份/恢复部件(BRC)250。此外在进程休眠***中,还包括一个第一外部存储器240(例如,支持普通文件***的硬盘,或硬盘上的存储器),用于保存休眠进程的文件;一个内部存储器260(内存),其中保存了供中央处理器(CPU)调用的进程上下文数据;以及一个外部备份存储器270作为备份数据库(例如,支持普通文件***的硬盘),用于保存备份的休眠进程的文件。
以下具体描述根据本发明的进程休眠/唤醒***200中各个部件的功能及所实现的相应的方法步骤。具体地,以下以进程1为例来描述根据本发明的对单个进程的休眠处理方法和相应的***以及对休眠的进程唤醒以继续使用该进程的方法和相应的***。类似地,根据本发明的方法和***可以实现对多个进程同时、或顺序实现进程休眠处理以及相应的进程唤醒处理。
有三类数据需要进行处理。RRWD将进程上下文从内存转存到硬盘(存为文件),并且,修改进程内容以继续使用休眠的进程。BRC将使用备份数据库来备份/恢复休眠的进程。
I、原始读/写驱动器(Raw Read/Write Driver RRWD)
根据本发明设计的所述原始读/写驱动器230是一个内核驱动器,用于读取/修改所有用户进程/线程的全部地址空间并挂起/唤醒所有用户进程/线程。所述原始读/写驱动器230与其中存储了进程上下文的内部存储器260交互作用,一方面,在将单个进程进行休眠操作时,将存储器260中所保存的进程上下文数据读出,并作为一个休眠进程的文件转存到硬盘上的存储器240中,另一方面,在对休眠进程执行唤醒操作时,对在存储器260中的Wrapper上下文进行修改以用于休眠进程的唤醒操作,如图2所示。
特别地,在执行根据本发明的对单个进程执行休眠处理时,RRWD 230能将每个进程,例如进程1在内存中的所有上下文通过执行以下步骤而作为一个休眠进程1的文件转存到计算机***的硬盘中。参见附图3,其中示意性示出了在休眠进程的过程中,转存要休眠的进程1的上下文的过程的示意图:
(1)RRWD 230将内存中的进程1用户空间中的所有内容分别转存到计算机的硬盘中。在进程1的用户空间中的所有内容包括:进程1的堆栈、进程1的代码、进程1的数据以及进程1在内存中对应的地址;动态链接库DLL/Lib、内核接口。
(2)RRWD记录由进程1所占用的所有资源并将其转存到硬盘上。其中,由进程1所占用的所有资源包括:进程1的基本信息,例如包括进程1的名称、父进程等,以及关于进程1的资源描述(例如资源索引以及所占用的资源的内容)。
(3)RRWD将进程1的运行时间上下文转存到硬盘。其中,进程1的运行时间上下文中包括了进程1中的每个线程TC 1,TC2,......,TC m的线程上下文,例如寄存器值、定时器设置,优先级等等。
应该知道,对以上三个部分的数据的转存不存在时间上的顺序,可以依次执行,也可以同时执行。
如图3所示,当对单个进程进行休眠的过程中,将内存中进程1的上下文转存到硬盘的步骤以后,会在硬盘中存在一个休眠进程1的文件。该休眠进程1的文件中包括:
(1)关于进程1基本信息和资源描述的数据,其中,进程1的基本信息中记录了进程1的名称、父进程、内存数据库地址等;而进程1的资源描述数据包括了资源索引以及所占用的资源的内容;
(2)关于进程1的运行时间上下文数据,其中,进程1的运行时间上下文数据包括了进程1中的每个线程TC 1,TC 2,......,TC m的线程上下文,例如寄存器值、定时器设置,优先级等等;
(3)关于进程1的用户空间描述的数据,其中,如上所述,记录了进程1在其用户空间的所有内容及相关联的地址。
此外,当根据本发明对休眠的进程进行唤醒的过程中,RRWD能够修改Wrapper的上下文。其通过对内存进行直接修改而将Wrapper的运行时间上下文恢复为休眠进程。详细的过程描述在参照Wrapper部分的描述进行详细说明。
II、Wrapper
Wrapper是一种用于执行对休眠进程的处理的专用应用程序,其被设计用于部分修改其上下文作为目标进程、其中包括进程名称、用户空间,***资源、线程数;以及然后利用RRWD修改剩余的信息,包括线程上下文、父进程、优先级,以及最后从用户空间去除Wrapper代码来实现对休眠进程的唤醒处理。Wrapper将读取休眠进程的转存文件并在Wrapper运行时,将其自身的上下文修改为休眠进程的上下文。
Wrapper是在用户希望恢复使用休眠进程的时候运行的。如图2所示,Wrapper与在硬盘中的存储器240进行交互,通过访问存储器240中所保存的休眠进程文件,而将Wrapper的上下文设置为休眠进程的上下文。其工作过程通过参见附图4进行如下所述的详细描述:
参见附图4,其中示出了当将Wrapper加载到内存时,Wrapper进程在内存中的上下文镜像。此处,为简明起见,将根据本发明构造的Wrapper进程的堆栈、代码和数据在一个单个的方框中示出,并且在这里还假设Wrapper只有一个线程。
类似地,在附图4中示出的Wrapper上下文中,可以看到,在用户模式中,Wrapper的用户空间也包括:Wrapper的堆栈、代码和数据;以及与内核之间的内核接口。而Wrapper在内核模式中,包括了Wrapper所占用的资源、所占用资源的索引、基本信息和运行时间上下文。
(1)恢复休眠进程的基本信息
Wrapper首先根据在对单个进程休眠的过程中转存到硬盘中的休眠进程的文件来恢复出进程1的基本信息。也就是说,根据硬盘中转存的休眠进程文件中的休眠进程1的内容,将Wrapper的基本信息修改为进程1的内容,例如进程名称。
参见附图5,其中示意性示出了根据本发明在体眠进程唤醒过程中,Wrapper恢复休眠进程的基本信息的步骤中,进程1和Wrapper的上下文的示意图。
通过这个步骤,在比较附图4与附图5之后可以看到:通过首先恢复出进程1的基本信息,附图4中所示出的初始Wrapper上下文变成当前附图5中所示出的进程1&Wrapper的上下文。
(2)恢复休眠进程所占用的***资源
Wrapper从在对单个进程休眠的过程中转存到硬盘中的休眠进程的文件中,查询由休眠进程所占用的全部***资源并且重新应用所述休眠进程的***资源。
参见附图6,其中示意性示出了根据本发明在休眠进程唤醒过程中,Wrapper恢复休眠进程所占用的***资源的步骤中,进程1和Wrapper的上下文的示意图。
通过这个步骤,在比较附图5与附图6之后可以进一步得到:在附图6中所示出的进程1&Wrapper的上下文中,初始Wrapper所占用的***资源变成了休眠进程1所占用的***资源,以及初始Wrapper中的资源索引也变成了休眠进程1的资源索引。
此外,优选地,如果当前***不能满足全部资源应用程序的需求,则提示用户故障并退出对休眠进程的唤醒过程。
(3)恢复休眠进程的用户空间
Wrapper找出休眠进程的用户空间中的空闲地址空间,并且将当前的代码移动到空闲地址空间。
除内核接口模块以外,从在对单个进程休眠的过程中转存到硬盘中的休眠进程的文件中,读取休眠进程的用户空间中的所有内容并覆盖到Wrapper用户空间的对应地址上。
参见附图7,其中示意性示出了根据本发明在休眠进程唤醒过程中,Wrapper恢复休眠进程的用户空间内容的步骤中,进程1和Wrapper的上下文的示意图。
通过这个步骤,在比较附图6与附图7之后可以进一步得到:在附图7中所示出的进程1&Wrapper的上下文中,休眠进程1在用户模式下的大部分内容,例如进程1的堆栈、代码、数据,以及进程1的DLL/Lib的内容都得到了恢复。
(4)恢复休眠进程的线程上下文
在这个步骤中,Wrapper从对单个进程休眠的过程中转存到硬盘中的休眠进程的文件中,读取休眠进程1的线程数目,并且启动相同的线程数目。
然后,Wrapper向***申请挂起所有线程,包括主要的线程。
在这个步骤之后,Wrapper的上下文被部分恢复成休眠进程的上下文。然后,RRWD把每个线程的上下文修改为休眠线程的上下文,并且恢复一些关键信息,例如父进程等。
最后的步骤是从用户空间去除Wrapper的内容。此时,原来Wrapper的进程上下文已经完全被进程1的上下文所替换,也即,休眠进程上下文被完全恢复。如果RRWD唤醒进程1的所有线程,则休眠进程将得以继续使用。
参见附图8,其中示意性示出了根据本发明在休眠进程唤醒过程中,Wrapper恢复休眠进程的所有线程上下文的步骤中,进程1和Wrapper的上下文的示意图。
通过这个步骤,在比较附图7与附图8之后可以进一步得到:在附图8中所示出的进程1&Wrapper的上下文中,由Wrapper初始只具有一个线程而恢复到实现休眠进程1所有线程得到完全恢复。也就是说,在完成附图8的步骤后,实现了对休眠进程的唤醒以及可以使休眠进程在得到唤醒后得以继续使用。
III 备份/恢复部件(Backup&Restore Component BRC)
在根据本发明的一种优选实施方式中,还可以包括一个备份/恢复部件(BRC),用于以一定的时间周期自动保存所有进程上下文,以便在计算机***出现故障或异常关闭的情况下,能利用所保存的进程的最新上下文来恢复进程或休眠进程的内容。该部件可以通过定时器或用户首选项(preference)来进行触发,例如,它将每隔五分钟自动调用RRWD以保存所有进程上下文。当计算机启动时,如果计算机最后的关闭是异常的,例如计算机崩溃并重启时,则它可以根据用户的设定,恢复最后保存的进程所有上下文。
如图2所示,BRC与存储器240进行交互,以每隔一定时间间隔将在进程休眠处理过程中转存到硬盘中的休眠进程文件自动保存到一个备份数据库270中。
IV.Shell Patch(***界面补丁)(SP)。
SP是用于Linux(例如Gnome)或Windows Explorer(视窗浏览器)中的回调函数(call back)功能的桌面平台的补丁(patch)。它集中在用户接口(UI)设计上:能在用户输入热键(例如“Alt-F5”)时,触发用于当前进程的休眠处理,并且如果用户输入另一个热键(例如“Ctrl-Tab”)则可以列出硬盘中的所有休眠进程。其在Shell中增加一个将触发继续使用指定进程的上下文菜单项。
再次参见附图2,SP是提供进程休眠***与操作***之间交互的接口。通过所述SP,用户可以选择待休眠的进程或者待唤醒的进程;当用户选择某待休假进程时,SP通过调用RRWD对进程进行休眠;当用户选择待唤醒进程时,SP通过选择Wrapper和RRWD对休眠进程进行唤醒以继续使用,当需要备份所有进程上下文时,SP通过选择BRC来备份进程等。
以下通过参考附图2并结合附图9-12的流程图来描述根据本发明的进程休眠/唤醒过程的具体步骤。
附图9示意性地示出了根据本发明的进程休眠过程的流程图。参见附图9,首先当启动对单个进程的进程休眠过程时,在步骤S905中,RRWD将隐藏(最小化)指定要进行休眠的进程的所有窗口。然后,在步骤S910中,RRWD通过挂起该进程的所有线程而将该指定进程挂起。接着在步骤S915中,RRWD将该指定休眠的进程的上下文转存到计算机的硬盘中。具体地,在该步骤中,RRWD将以下指定休眠进程的上下文内容转存到计算机的硬盘中:(1)将内存中指定进程的用户空间中的所有内容转存到计算机的硬盘中,例如,指定进程的用户空间中的所有内容包括:指定进程的堆栈、代码、数据;动态链接库DLL/Lib、内核接口。(2)查询由指定进程所占用的所有资源并将其转存到硬盘上。其中,由指定进程所占用的所有资源包括:指定进程的基本信息,例如包括指定进程的名称、父进程、地址空间入口等,以及关于指定进程的资源描述,例如资源索引以及所占用的资源的内容。(3)将指定进程的进程状态信息,例如运行时间上下文转存到硬盘。其中,所述运行时间上下文中包括了进程中的每个线程TC 1,TC 2,......,TC m的线程上下文,例如寄存器值、定时器设置,优先级等等。最后,在步骤S920中,终止该进程,即进程休眠成功,以及释放该指定进程所占用的所有资源。
附图10示意性地示出了根据本发明的休眠进程唤醒过程的流程图。参见附图10,休眠进程唤醒过程的简单工作过程如下所示。在步骤S1005中,Wrapper将恢复休眠进程上下文。在所述恢复休眠进程上下文的步骤中,进一步包括以下子步骤:(1)恢复休眠进程的基本信息。也就是说,根据硬盘中转存的休眠进程文件中的休眠进程的内容,修改其基本信息,例如进程名称;(2)恢复休眠进程所占用的***资源;(3)恢复休眠进程的用户空间;(4)恢复运行时间上下文,包括每个线程的上下文;(5)恢复其他的基本信息,例如父进程(如果可用的话);以及(6)RRWD通过释放Wrapper所占用的地址区域而从用户空间去除Wrapper代码。然后,在成功实现所述恢复休眠进程上下文的步骤之后,在步骤S1010中,RRWD将唤醒该休眠进程。以及,最后在步骤S1015中,RRWD将显示休眠进程的所有窗口。由此,成功实现了对休眠进程的唤醒。
附图11、12示意性地示出了根据本发明的进程备份/恢复过程的流程图。该进程备份/恢复过程优选地是进程休眠过程的附加和扩展功能,其在进行进程休眠的过程中,自动将在进程休眠过程中转存到硬盘上的内容按一定的时间间隔进行自动备份,以及在计算机***出现故障或异常关闭的情况下,能利用所保存的进程的最新上下文来恢复进程或休眠进程的内容。
参见附图11,进程备份的简单工作过程如下所示:
首先,在步骤S1105中,执行对进程休眠过程的调用。在该步骤中,实际上是对进程执行了进程休眠全部过程(图9描述)。接下来,在步骤S1110中,BRC将在硬盘上保存的进程转存文件和由进程打开的所有文件备份到一个非易失性存储器中。以及,在计算机运行出现故障或异常关闭的情况下,在步骤S1115中,调用进程唤醒过程,即图10描述的过程,由此成功实现备份。
附图12示意性地示出了根据本发明的进程恢复过程的流程图。参见附图12,进程恢复的简单进程过程如下所示:
首先在步骤S1205中,BRC将从备份数据库中复制所有文件到原始位置,其将覆盖现有文件。也就是说,恢复硬盘上的进程转存文件和该进程打开的所有文件。
然后,在步骤S1210中,BRC通过调用进程唤醒过程,即图10描述的过程,来恢复进程。
以上结合附图,对根据本发明针对单个进程的进程休眠/唤醒的方法和***的各个实施例进行了详细描述,但是以上这些实施例仅是示例的,本领域技术人员可以在本发明的精神和范围内作出各种变化和修改。因此,本发明不限于这些实施例,本发明的范围由随附权利要求限定为准。