CN102388370A - 计算机进程管理 - Google Patents
计算机进程管理 Download PDFInfo
- Publication number
- CN102388370A CN102388370A CN2010800270195A CN201080027019A CN102388370A CN 102388370 A CN102388370 A CN 102388370A CN 2010800270195 A CN2010800270195 A CN 2010800270195A CN 201080027019 A CN201080027019 A CN 201080027019A CN 102388370 A CN102388370 A CN 102388370A
- Authority
- CN
- China
- Prior art keywords
- task
- execution
- data
- snapshot
- computer implemented
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1479—Generic software techniques for error detection or fault masking
- G06F11/1482—Generic software techniques for error detection or fault masking by means of middleware or OS functionality
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4418—Suspend and resume; Hibernate and awake
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4493—Object persistence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1438—Restarting or rejuvenating
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Retry When Errors Occur (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种计算机实现的进程被定义为操作三种类型的对象:任务对象、恢复对象和状态对象。任务对象意即被实现为执行完成进程的一个特定方面的必要操作。状态对象维持与当前执行的进程相关的信息,例如变量的值以及正在执行的进程中的当前位置。恢复对象通过指定下一个要执行的任务对象或者恢复对象引导进程执行。本***的一个重要的方面在于能够在任意时间挂起执行并且可以在执行被中止的精确点处或者在挂起之前的任意执行点处无缝恢复执行。这可以通过周期性地将执行的快照存储至永久性存储器中,其可以在以后被用来将***的状态复原至所述快照的状态。
Description
相关专利申请的交叉引用
本申请要求2009年6月19日提交的申请号为61/218,411,题目为“计算机进程管理”的美国临时申请的优先权,该专利申请在此全部被明确引用作为参考。
技术领域
本发明涉及计算机实现的进程的执行。更具体地讲,本发明涉及能够被挂起并且随后从进程中任意一点被恢复的计算机实现的进程的执行。
背景技术
计算机实现的进程代表性地包括一系列连续执行以完成期望任务的离散的步骤。当进程执行的时候,该进程不仅将数据在***内部传来传去,而且还将数据在***内外传来传去,并且在***内部修改数据。根据所采取的操作,先前步骤中的数据的状态可能会被随后的步骤所破坏。相关联于先前状态的数据的丢失使得进程被重启或者回复至进程中早先的状态或者点变得很困难,在一些情况下,甚至变为不可能。因此,从进程被挂起的点开始,该进程通常只能被执行一次。对于一个进程来说,不可能从一个特定的执行点开始被多次恢复,也不可能通过使用在进程中被用到的信息的离散或单独的副本而被恢复。不能从进程中任意一点重现进程或者恢复进程使得错误重现变得很困难。相应地,也使得查找错误的起因并将其修复变得费时且成本高。
发明内容
本公开附加的特征和优点将在下文中进行阐述,某种程度上易于从描述中理解,或者也可以通过实施本公开的发明原理进行了解。本公开的特征和优点可以通过使用权利要求中所特别指出的仪器及组合来实现获得。参照如下详细说明以及所附权利要求,或者通过实施所阐述的发明原理,这些特征以及其它特征会更为明显。
本发明公开一种用于执行计算机实现的进程的***、方法以及非暂态计算机可读介质。计算机进程管理(Computer Process Management,CPM)***位于通用计算装置上,且由用户定义的计算机实现的进程所构成。为了定义进程,用户实现一个或者多个任务对象(Task Object)。CPM***的模块性允许用户将一个进程分成多个单独的任务,每个任务可以在一个任务对象内实现。此外,因为一个任务可以通过子任务来完成,所以任务对象可以是其它任务对象的集合。任务对象指定一个单独的“执行”函数,该函数执行完成进程的某一特定方面所需要的操作。该“执行”函数可以使用任意可编程语言实现或者可以使用一系列构建单元任务对象对***进行预配置,用户可以使用该套构建单元任务对象来建立用户自己的任务对象。用户定义的任何任务对象都可以存储于CPM***中以便用户可以在后续的进程中使用。任务对象的“执行”函数具有单一的输入参数:状态对象(State Object)。任务对象可以通过与状态对象或者外部***(如数据库)进行交互而执行其任务。
状态对象保持与当前执行的进程相关的信息。状态对象被分为三部分:应用数据(Application Data)、上下文数据(Context Data)和执行数据(Execution Data)。当前执行的任务对象使用应用数据部分以存储数据,而在传统的执行环境中,这些数据被存储于栈或者堆中。例如,如果操作是将一个值存储至一个局部变量中,该变量会被分配应用数据部分内的空间,该值就被存储于这一位置上。这样便于将数据从一个任务对象传递至另一个任务对象。执行数据部分包括栈用以保持执行进程中的当前位置,也就是说,当前正在执行什么样的恢复对象(Resume Object),以及***所知的还有哪些恢复对象需要被执行。最后,上下文数据部分存储关于进程的上下文信息,例如,初始参数和/或发起进程的代理的特性。
恢复对象负责引导进程执行。恢复对象被入栈到状态对象中的执行数据栈中。恢复对象指定一个单一的“恢复”函数,该函数定义采取何种操作恢复、继续或者执行。可以通过指定下一个要执行的任务对象或者其它恢复对象来实现。换句话说,每当恢复对象结束执行,CPM***被视为进入了挂起状态。只有当恢复对象引导***执行一个特定的任务对象时,下一个任务对象才被执行。
CPM***的一个重要方面就在于它能够在任何时候挂起执行,并且可以在执行被中止的精确点处或者在挂起之前的任意执行点处无缝恢复执行。这可以通过周期性地将状态对象以及其全部内容,包括恢复对象,存储至永久性存储器(例如,硬盘)中来实现。这种随时在一些点对状态对象的记录被称作快照。当快照被存储时,其被分配给一个特有的标识符,该标志符可以在随后的恢复中被用到。当快照被恢复时,调用位于执行数据栈中的最顶部恢复对象的“恢复”函数,从而在状态对象被捕获时候的点处重启进程。
附图说明
为了描述上述以及本公开的其它优点和特征的实现方式,将结合附图中所示的具体的示例对上文简述的发明原理进行详细描述。应当理解的是,附图中示意的只是本发明所公开的示例性实施例,而且附图并不局限于此范围。结合附图,对本发明的发明原理进行具体且详细的描述。
图1为本发明示例性的***实施例的示意图;
图2为本发明示例性的方法实施例的示意图;
图3为本发明向控制进程管理***发出请求的外部进程的示意图;
图4为本发明示例性的适用于控制进程管理***的计算机实现的进程的详细示意图;
图5为本发明控制进程管理***中的状态对象的示例性演进示意图。
具体实施方式
以下将对本公开的各种实施例给出详细的说明。尽管论述了具体的实现,但需要注意的是这种论述仅为说明的目的。相关领域的技术人员能够认识到不超出本发明精神和发明范围内的其它组件和配置也可以被使用。
本公开讨论本领域需要一种执行能够被挂起且随后从执行中的任意一点被恢复的计算机实现的进程的方法。本公开首先在图1中讨论了能够被用来实施本发明所公开的概念的基本通用***或者计算装置。接下来,本公开简要讨论了在通用计算装置上执行计算机实现的进程。之后,本公开继续讨论一个示例性方法实施例以及两个说明性的示例。
参考图1,示例性***100包括通用计算装置100,包括有处理器120(如中央处理器或者处理器)和将包括***存储器130(例如只读存储器140和随机存取存储器150)在内的各种***部件连接至处理器120的***总线110。***100还可以包括有高速缓冲存储器,该高速缓冲存储器与处理器120直接紧密连接或者集成为处理器120的一部分。***100将数据从存储器130和/或存储装置160处复制到高速缓冲存储器,以便于处理器120能够快速存取。这样,高速缓冲存储器提供执行加速从而避免处理器120在等待数据期间的延迟。这些以及其它的模块可以被配置以控制处理器120执行不同的操作。其它的***存储器130同样可供使用。存储器130可以包括多种不同类型的具有不同性能特征的存储器。应了解本公开可以运行于具有不止一个处理器120的计算装置100上或者运行于一群或者一组网络连接在一起的计算装置上以提供更加良好的处理能力。处理器120可以包括任意通用处理器和被配置以控制处理器120的硬件模块或者软件模块(如存储于存储装置160中的模块1 162、模块2 164以及模块3 166),以及软件指令被合并到实际的处理器设计中的专用处理器。处理器120实质上可以是一个完全独立的计算***,包括多个内核或者处理器、总线、存储器控制器、高速缓冲存储器等。多内核处理器可以是对称的也可以是不对称的。
***总线110可以是多种类型的总线结构(包括存储器总线或者存储器控制器、***总线以及使用任意一种总线结构的局部总线)中的一种。存储于只读存储器140或者类似的装置内的基本输入输出***可以提供基本的程序,该程序有助于在例如启动期间在计算装置100内部的元件之间传送消息。计算装置100还包括存储装置160,例如硬盘驱动、磁盘驱动、光盘驱动、磁带驱动或者类似物。存储装置160可以包括软件模块162、164、166用于控制处理器120。其他的硬件模块或者软件模块也在考虑范围内。存储装置160经由驱动接口连接至***总线110。这些驱动和相关联的计算机可读存储媒介为计算装置100提供了计算机可读指令、数据结构、程序模块以及其它数据的非易失性的存储。一方面,执行特定函数的硬件模块包括存储于与必要的硬件部件(如处理器120、总线110、显示器170等)相连接的非暂态计算机可读介质中的软件部件以实现该函数。基本的部件被本领域技术人员所熟知,根据装置的类型(如装置100是否是小型手持计算装置、桌面计算装置或者计算机服务器等),适当的变体也在考虑范围之内。
尽管此处描述的示例性的实施例使用硬盘作为存储装置160,本领域技术人员应当了解,其它类型的能够存储可以被计算机存取的数据的计算机可读媒介,如磁性卡带、闪存卡、数字多函数光盘、盒式磁带、随机存取存储器150、只读存储器140、电缆或者包含比特流及类似物的无线信号,也可以被用于示例性的运行环境中。非暂态计算机可读介质明确地排除了例如能量、载波信号、电磁波和信号本身。
为了使用户能够与计算装置100进行交互,输入装置190表示任意数目的输入机构,如用于讲话的话筒、用于手势或者图形输入的触摸感应屏幕、键盘、鼠标、运动输入、语音等。输出装置170也可以是一个或者多个数目的本领域技术人员所熟知的输出机构。在某些情况下,多模式***使得用户能够提供多种类型的输入与计算装置100进行通信。通信接口180通常控制并管理用户输入和***输出。对于在任意特定的硬件配置上的运行没有限制,因此,随着硬件配置和固件配置的发展,此处基本的特征可以被改进的硬件配置和固件配置所替代。
为了清楚地阐述,说明性的***实施例被示意为包括有独立的函数模块包括标注为“处理器”的函数模块或者处理器120。这些模块所代表的函数可以通过使用共享的或者专用的硬件(包括,但不局限于,能够执行软件的硬件、专用运行以作为在通用处理器上执行的软件的等同物的硬件,如处理器120)提供。例如,图1所示的一个或者多个处理器的函数可以通过单独的一个共享的处理器或者多个处理器提供(“处理器”一词不应当仅解释为指执行软件的硬件)。说明性的实施例可能包括微处理器和/或数字信号处理器硬件,只读存储器140(用于存储执行下述操作的软件)以及用于存储结果的随机存取存储器150。超大规模集成电路硬件实施例以及定制超大规模集成电路电路结合通用数字信号处理器电路,也可以被提供。
多个实施例的逻辑操作被实现为:(1)一系列运行在通用计算机内部的可编程电路上的计算机实现的步骤、操作或者程序;(2)一系列运行在专用可编程电路上的计算机可执行的步骤、操作或者程序;和/或(3)可编程电路内部的互连的机器模块或者程序引擎。图1所示的***100可以执行全部或者部分所述的方法,可以作为所述***中的一部分,和/或可以根据所述非暂态计算机可读储存介质内的指令运行。这种逻辑操作可以以模块的形式实现,用以控制处理器120根据模块的编程来执行特定功能。例如,图1示意三个模块:模块1 162、模块2 164以及模块3 166。这些模块被配置成用以控制处理器120。这些模块可以存储于存储装置160中,并且在运行时被加载到随机存取存储器150上或者存储器130上;或者存储在本领域技术人员所熟知的其它的计算机可读存储单元内。
一些基本的***部件被公开后,现在简要讨论在运用所公开的计算机进程管理(Computer Process Management,CPM)***的通用计算装置上执行计算机实现的进程。CPM***位于通用计算装置(例如图1所示的***100)上,且由用户定义的计算机实现的进程所构成。为了定义进程,用户实现一个或者多个任务对象。CPM***的模块性允许用户将一个进程分成多个单独的任务,每个任务可以在一个任务对象内实现。此外,因为一个任务可以通过子任务来完成,所以任务对象可以是其它任务对象的集合。举例而言,任务对象可以定义一些低级别的任务,如计算两个数字的算术和;或者定义高级别的任务,如“输入顾客详细信息”,牵涉到向用户显示图形用户界面及处理用户输入,因此,一个任务对象可以被定义为多个更加简单的任务对象。例如,“输入顾客详细信息”这一任务可以由下面一系列单独的任务实现:(1)向用户显示顾客名单使得用户能够选择顾客;(2)获取所选顾客的详细信息;(3)在屏幕上显示顾客详细信息用于编辑;(4)保存顾客的详细信息。为具体的任务而设计的任务对象可以实现每个子任务。
任务对象指定一个单独的“执行”函数,该函数执行完成进程的某一特定方面所需要的操作。该“执行”函数可以使用任意可编程语言实现或者可以使用一系列构建单元任务对象对***进行预配置,用户可以使用该套构建单元任务对象来建立用户自己的任务对象。用户定义的任何任务对象都可以存储于CPM***中以便用户可以在后续的进程中使用。任务对象的“执行”函数具有单一的输入参数:状态对象。任务对象可以通过与状态对象或者外部***(如数据库)进行交互而执行其任务。
状态对象保持与当前执行的进程相关的信息。状态对象被分为三部分:应用数据、上下文数据和执行数据。当前执行的任务对象使用应用数据部分来存储数据,而在传统的执行环境中,这些数据被存储于栈或者堆中。例如,如果操作是将一个值存储至一个局部变量中,该变量会被分配应用数据部分内的空间,该值就被存储于这一位置上。这样便于将数据从一个任务对象传递到另一个任务对象。执行数据部分包括栈用以保持执行进程中的执行顺序,也就是说,当前正在执行什么样的恢复对象,以及***所知的还有哪些恢复对象需要被执行。执行数据部分还包括用于存储与在执行的进程(如,被恢复对象执行的最后的任务对象)中的当前位置有关的信息的栈。最后,上下文数据部分存储关于进程的上下文信息,如,初始参数和/或发起进程的代理的性能。
恢复对象负责引导进程执行。恢复对象被入栈到状态对象中的执行数据栈中。恢复对象指定一个单一的“恢复”函数,该函数定义采取何种操作来恢复、继续或者执行。可以通过指定下一个要执行的任务对象或者其它恢复对象来实现。换句话说,每次恢复对象完成执行,CPM***被视为进入了挂起状态。只有当恢复对象引导***执行一个特定的任务对象时,下一个任务对象才被执行。
CPM***的一个重要方面就在于它能够在任何时候挂起执行,并且可以在执行被中止的精确点处或者在挂起之前的任意执行点处无缝恢复执行。这可以通过周期性地将状态对象以及其全部内容,包括恢复对象,存储至永久性存储器(例如,硬盘)中来实现。在这种情况下,这种随时在一些点对状态对象的记录被称作快照。当快照被存储时,其被分配得到一个特有的标识符,该标志符可以在随后的恢复中被用到。当快照被恢复时,调用位于执行数据栈中的恢复对象最顶部的“恢复”函数,从而在状态对象被捕获时候的点处重启进程。
CPM***经由通信接口180从***100上运行的其它进程中,或者经由网络接口195从连接至***100的其它装置中接收执行用户定义的进程的请求。当CPM***接收到请求时,CPM***通过创建状态对象、将被提供的信息存储至状态对象的上下文数据部分以及将适当的恢复对象入栈到状态对象的执行数据栈中来初始化进程。
在讨论一些基本的***部件之后,本公开讨论图2中所示的示例性方法实施例200。为了清楚起见,结合图1所示的用以实施该方法的示例性***对该方法进行讨论。图2示意一种用于创建和执行计算机实现的进程的示例性方法的实施例。适当配置的***100可以执行方法中的任意和/或者全部的步骤。尽管图2中示意了具体的步骤,在其它的实施例中,方法还可以具有多于或者少于图2中所示的步骤。首先,***100创建一个或者多个任务对象,每个任务对象关联于一个可执行的函数,任务对象被存储至永久性存储器中(202)。在一些实施例中,***100通过选择先前被定义并且存储于永久性存储器中的任务对象来创建任务对象。在一些实施例中,***100基于用户提供的说明创建任务对象。
任务对象可以是一个或者多个执行一个进程所需要的操作的实现。这些操作在相关联的可执行函数中被指定。如上文所述,可执行的函数通过与被提供的状态对象或者一些外部***(如果需要)进行交互来完成其被设计以实现的任务。例如,可执行的函数可以从状态对象中获取变量或者可以存取外部存储装置以获取必要的值。可执行的函数还可以将值存储至状态对象,这样,其他的任务对象可以使用这些值。可执行的函数还可以将值存储至外部存储装置。
在一些实施例中,可以只通过使用一个单独的任务对象来实现进程,或者该进程可以被拆分,从而使用拆分成的多个任务对象。在一些实施例中,任务对象可以指定一系列任务对象,而不是一个任务对象指定一系列达到期望任务的计算机操作。
在创建任务对象之后,任务对象被存储至永久性存储器中。永久性存储器可以是任意存储器,在执行任务对象,甚至是执行CPM***结束之后,永久性存储器中的任务对象还可以被存取。适当的永久性存储器的例子有:内部硬盘、连接至***100的外部硬盘以及其它一些连接至***100的外部存储装置。
***100还将恢复对象与其中一个任务对象相关联(204)。如上文所述,恢复对象通过相关联的任务对象来引导计算机实施的进程的执行。在一些实施例中,恢复对象具有关联函数。这一函数指定一个或者多个相关联的任务对象以及它们应当执行的顺序。一个恢复对象还可以指定一个或者多个应当被执行的恢复对象。在一些实施例中,如同上文所述的任务对象被存储于永久性存储器中一样,恢复进程也被存储于永久性存储器中。
随着进程的执行,***100将描述当前执行的任务对象的数据写入状态对象中,状态对象包括执行数据部分、应用数据部分和上下文数据部分(206)。如上文所述,状态对象被用于保持和当前执行的进程有关的信息。当任务对象和恢复对象执行时,所有已经执行的任务对象和恢复对象都应该被传递至状态对象。依据对状态对象的修改而非传统的执行计算机实现的进程所使用的隐藏的堆或栈,定义所有的形成***的全部进程的一部分的操作。
状态对象可以包括三个数据部分:执行数据部分、应用数据部分和上下文数据部分。在一些实施例中,执行数据部分包括一个栈,该栈以将最顶部的恢复对象作为下一个被执行的恢复对象的方式来存储恢复对象,从而保持在执行中的当前位置。执行可以通过恢复对象从栈中出栈并执行它来进行。在一些实施例中,起初进行时,执行数据栈可以用恢复对象来初始化。在一些实施例中,恢复对象可以在执行中被添加至执行数据栈。例如,如果一个恢复对象指定一系列其它的恢复对象,这些恢复对象可以被添加至栈的顶部,并且通过将新的恢复对象从栈中出栈,执行还可以继续。
应用数据部分可以是一个存储和当前执行相关的数据的位置。在一些实施例中,应用数据可以采用简单的值的形式,如文本或者数字;或者可以是比较复杂的数据,如由数据库查询形成的结构化的表格数据。在一些实施例中,如果一个任务对象从外部***中读取数据,之后,该数据被存储至应用数据部分,这样,该数据就可以被随后的任务对象所存取。例如,一个任务对象可以被设计为用来计算两个数字的和。对于被进程中随后的任务对象所存取的计算结果,该结果被存储至状态对象。当随后的任务对象被执行时,状态对象被传递至这些随后的任务对象中。另外一个例子,进程可以从外部***中读取数据,如通过询问从数据库中获取数据。执行这一操作的任务对象将一系列结果数据存储至状态对象,这样,随后的任务对象可以存取该结果数据而无需再次询问数据库。
上下文数据部分可以是一个地方存储数据,其与某些条件(在该条件下,进程被启动)及有关发起进程的代理的特性的信息相关。例如,进程的执行可能需要一些初始的输入参数。这些参数可以被存储在状态对象中的上下文数据部分。另外,如果执行是通过外部的***(如web服务器)发起的,上下文数据可以提供对调用执行的***的存取。在web服务器的情况下,web请求的详细信息也可以通过这种方式进行存取。任务对象可以使用这一信息以提供对该请求的响应,例如以超文本链接标示语言(HTML)的格式将该答复显示在web网页上。在一些实施例中,上下文数据可以包括与代理相关的特性(如认证信息)。
随着进程的执行,***周期性地通过将当前的状态对象存储至永久性存储器来保存执行的快照(208)。在一些实施例中,***100可以被配置为在一定时间间隔内自动保存快照。例如,快照可以在每个任务对象或者恢复对象完成之后被保存。另外,快照也可以在一定的秒数之后被保存。在一些实施例中,***100可以被配置为接收保存命令并且将快照存储至永久性存储器。在一些实施例中,特有的标志符(ID)与每一个被保存的快照相关联,这样快照能够很容易地被识别并且在之后的点处及时被恢复。
在之后的一些点处,当与其中一个任务对象相关联的可执行函数失败之后,***100加载在步骤208中被保存在永久性存储器中的快照(210)。在一些实施例中,由于用户挂起执行,任务对象也可能会失败。***100能够加载之前保存的任意快照,而不仅仅是最近才保存的快照。在一些实施例中,***100甚至可以加载保存在不同***、并且被传送至***100的快照。在一些实施例中,同一快照可以被加载多次并且不会破坏最初保存的快照。
在步骤210的加载快照完成之后,***100调用由快照指定的恢复对象,由此恢复之前正在执行的并且与恢复对象相关联的任务对象(212)。因为状态对象包括所有自存储的点继续执行的必要信息,所以执行可以如同从来没有被挂起一样得以继续。
本公开现在讨论两个说明性的示例中的第一个。第一个示例如图3所示。在这一示例中,CPM***执行计算机实现的进程从而在两个银行账户之间转移钱款。在图3中,CPM***302接收来自银行接口304的请求308从而执行转移进程310。银行接口304提供一系列输入参数312(包括源账户号码、目的帐号号码以及转移数目)作为请求的一部分。
图4中所示的转移进程400的详细示图示意该进程包括三个任务对象(402、404和406)、三个恢复对象(408、410和412)、一个状态对象(414)和一个主函数416。当CPM***302执行转移进程310时,主函数416被调用。在这一钱款转移的示例中,主函数的伪代码如下所示:
主函数执行一系列初始化状态对象状态414的操作,这样状态对象包括了启动执行恢复对象和任务对象的必要信息。这些更新反映在图5所示的状态对象510中。首先,输入参数被存储至上下文数据部分514。之后,执行数据部分512中的栈由三个恢复对象(408、410和412)来初始化。位于栈的最顶部的恢复对象应当被首先执行,而位于栈的底部的恢复对象最后被执行,以这样的方式完成栈的初始化。在初始化之后,主函数继续将恢复对象从执行数据部分的栈中出栈直至栈被清空。
从栈中出栈的第一恢复对象是“恢复对象::初始化数据”408。恢复对象408指示CPM***302执行任务对象“任务对象::初始化数据”402。任务对象402执行的任务可以由下列伪代码说明:
任务对象402通过获得来自上下文数据部分526的输入参数并将其存储至应用数据部分524来对状态对象510进行操作,从而将状态对象510转换成状态对象状态520。这种操作使得当转移进程310执行时,输入参数可以被其它的任务对象所存取。
在执行中的这一点处,执行数据部分522中的栈还有两个恢复对象,因此,CPM***302将恢复对象“恢复对象::检查源账户”410从栈的顶部出栈。恢复对象410引导CPM***302执行任务对象“任务对象::检查源账户”404。由任务对象404所执行的任务可以由下列伪代码说明:
任务对象404从账户数据库306中获取源帐户并且检查确认源账户是否包含有足够的金额。如果帐户金额不足够转移,CPM***302发出错误指示,转移进程310中止。如果金额足够,任务对象404会通过将源账户信息保存至应用数据区域534对状态对象520进行操作。这一操作产生状态对象530。
再一次的,执行数据部分532的栈还没有清空,因此另外一个恢复对象从栈的顶部出栈。这次出栈的是恢复对象“恢复对象::执行转移”412。恢复对象412引导CPM***302执行任务对象“任务对象::执行转移”406。任务对象406执行钱款从源账户到目的账户的实际转移,由下列伪代码说明:
首先,CPM***302从账户数据库306中获取目的账户。利用源账户和保存在应用数据部分544内的转移数目,源账户中的余额被扣除。之后,将转移的数目存入至目的账户。最后,源账户和目的账户都被存储至账户数据库306中。在这一点上,执行数据542中的栈空闲,从而,转移进程结束。
第二个示例说明CPM***中的挂起和恢复特征允许在执行中对进程的检查。挂起特征和恢复特征的优点之一在于这些特征使得调试变得容易。为了实现CMP***中的调试进程,用户可以创建一个执行循环的主函数。例如,下列伪代码可以被用作为调试进程:
调试进程起初询问用户决定调试哪个进程。CPM***进行初始化,包括将必要的信息存储至状态对象,例如将输入参数存储至上下文数据部分以及将恢复对象入栈至执行数据部分。之后,创建名单以存储与每个被保存的快照相关联的ID。这一名单便于在执行中的任意先前点处恢复执行。在进入主执行循环之前,初始状态的快照被存储至永久性存储器,其ID被存储至历史名单。这一初始快照允许用户从初始处开始进程且无需重新启动调试器。
在初始设置之后,调试程序进入循环,该循环提示用户选择四个操作中的一个:运行、返回、显示状态和退出。在这一示例性的调试器中,运行操作获取与当前快照ID相关的快照,并且执行一个单一恢复对象。如上文所述,恢复对象可以引导CPM***执行一个或者多个任务对象,因此,在一个单一的运行步骤中执行的任务数目由用户设计时的恢复对象的粒度规定。然而,不同的调试器会实现不同程度的粒度。在执行这一单一恢复对象之后,新的快照被捕获并且被保存至永久性存储器。保存操作产生一个快照ID,这一快照ID被添加到历史名单中,并作为当前快照ID的值。
返回操作使得用户可以返回到执行中的任意先前点处,之后再从这一点处恢复执行。这一选项不会被普遍地用到调试器中,因为返回操作会在执行进程中破坏先前的状态。然而,由于CPM***可以周期性地捕获状态并将状态存储至永久性存储器,先前的状态也可以被复原并且执行可以从这一点处恢复。在这一示例性的调试器中,通过将上一个添加至历史名单的快照ID移除并将其设置为当前快照ID从而运行这一选项。如果用户想返回多于一个快照,返回选项会被多次重复选择直至执行中的期望位置被选取。然而,调试器还可以实现允许用户在一次操作中返回n个步骤而不是必须重复选择返回选项的方式。为了自选取的快照处恢复执行,用户选择运行选项。
显示状态选项显示当前状态对象的内容,即与当前快照ID相关的状态。这一选项可以显示状态对象的所有三个部分,或者仅显示应用数据部分。另外,这一选项可以具有子选项以使得用户能够检查状态对象中的特定部分。这一选项类似于其它调试器中的选项,可以允许用户在程序执行时检查栈或者存储器中的内容。
最后,退出选项被用来从调试进程中完全退出。应当注意到,即使在退出调试程序之后,保存的快照也不会丢失。因为快照被保存在永久性存储器中,用户可以重启调试器并且使用已保存的快照恢复调试先前的进程。另外,如果用户怀疑失败来源于计算装置的配置而不是来源于进程,已保存的快照可以被转移至另一个计算装置,并且可以在使用已保存的快照的装置上恢复调试。
使用CPM***除可以进行调试之外,还可以很容易地捕获与进程执行相关的数据。例如,测量一个任务对象被执行的次数的数据或者一个任务对象或多个任务对象执行的持续时间的数据可以被捕获。该数据可以用于报告或者优化使用CPM***而实现的商业任务的时间。
本发明范围内的实施例还可以包括用于带有或者具有存储于其内部的计算机可执行指令或者数据结构的有形的和/或非暂态计算机可读存储媒介。这种非暂态计算机可读存储媒介可以是任何能够被通用计算机或者专用计算机所存取的可用媒介,包括上述讨论的专用处理器的功能性设计。举例来说,但并不局限于此,这种非暂态计算机可读存储媒介可以包括随机存储器、只读存储器、电可擦可编程只读存储器、只读光盘或其它光盘存储器、磁盘存储器或其他磁盘存储装置,或者任何其他可以带有或者存储具有计算机可执行指令、数据结构或者处理芯片设计形式的期望程序代码的媒介。当信息经由网络或者其他的通信连接(例如硬件连接、无线连接、以及其结合)被传送或者提供给计算机时,计算机适当地将此连接视为计算机可读媒介。这样,任何这种连接都被适当地视作计算机可读媒介。上文所述的结合也可以被涵盖在计算机可读媒介的范围内。
计算机可执行指令包括,例如,使通用计算机、专用计算机或者专用计算处理装置执行某一个或者一组特定函数的指令以及数据。计算机可执行指令还包括可以由计算机在单机环境或者网络环境下所执行的程序模块。通常来说,程序模块包括子程序、程序、组件、数据结构、对象以及专用处理器设计所固有的函数等等,这些函数能够执行特定的任务或者实现特定抽象数据类型。计算机可执行指令、相关联的数据结构以及程序模块代表执行本发明所公开方法的步骤的程序代码方式的示例。这种可执行的指令或者相关联的数据结构的特定顺序代表实现这些步骤中所描述的函数的对应的操作。
本领域的技术人员应该理解,本发明所公开的其它的实施例还可以在具有多种类型的计算机***配置(例如,个人电脑、手持装置、多处理器***、基于微处理器或者可编程的消费性电子产品、网络个人计算机、微型计算机、大型计算机等)的网络环境中实施。实施例还可以在分布式计算环境中实施。在分布式环境中,任务被经由通信网络连接(硬件连接、无线连接或者其结合)的本地处理器和远程处理器所执行。在分布式计算环境中,程序模块不仅可以位于本地存储装置而且还可以位于远程存储装置。
本发明通过这些实施例进行说明,但是本发明并不局限于此。本领域的技术人员应当理解,在不脱离本发明的精神和范围的前提下,可以不必按照上文中说明的示例性实施例和应用,而对本发明原理做出各种修改和变换。
Claims (15)
1.一种计算机实现的方法包括:
创建一个或者多个任务对象,每个任务对象与一个可执行的函数相关联;
保存所述一个或者多个任务对象至永久性存储器;
将一个恢复对象与其中一个任务对象相关联;
向一个状态对象中写入描述目前正在执行的任务对象的数据,所述状态对象包括执行数据部分、应用数据部分和上下文数据部分;
通过将当前状态对象存储至永久性存储器来保存执行的快照;
与其中一个任务对象相关联的可执行的函数失败之后,加载所述快照;
调用所述快照指定的恢复对象,从而恢复执行先前正在运行的与所述恢复对象相关联的任务对象。
2.根据权利要求1所述的计算机实现的方法,其中所述执行数据部分包括栈。
3.根据权利要求1或2所述的计算机实现的方法,其中向一个状态对象中写入描述目前正在执行的任务对象的数据,包括在所述状态对象中的所述应用数据部分写入被目前正在执行的任务对象使用的数据。
4.根据权利要求1至3中任意一项所述的计算机实现的方法,其中所述上下文数据部分被用于存储一个或者多个用于计算机实现的进程的初始参数。
5.根据权利要求1至4中任意一项所述的计算机实现的方法,其中所述上下文数据部分存储发起所述计算机实现的进程的代理的特性。
6.一种计算机实现的方法包括:
接收一执行函数与一任务对象之间的关联;
将描述当前正在执行的任务对象的数据存储为状态对象;
定义一个恢复对象,所述恢复对象指定即将执行的任务对象;
执行所述恢复对象;
将快照存储至永久性存储器装置,所述快照包括描述当前状态对象的数据;
向所述快照分配一个特有的标识符。
7.根据权利要求6所述的计算机实现的方法,其中所述函数包括应用或者应用中的子程序。
8.根据权利要求6或7所述的计算机实现的方法,其中所述状态对象包括与所述任务对象相关的应用数据、上下文数据和执行数据。
9.根据权利要求6至8中任意一项所述的计算机实现的方法,其中所述任务对象将与其执行相关的数据存储至所述状态对象。
10.根据权利要求6至9中任意一项所述的计算机实现的方法,所述方法还包括:
通过加载被所述特有的标志符识别的快照来恢复一个进程的执行;
调用所述快照指定的恢复对象。
11.根据权利要求6至10中任意一项所述的计算机实现的方法,其中所述任务对象将所述状态对象作为输入参数接收。
12.根据权利要求6至11中任意一项所述的计算机实现的方法,其中所述任务对象与外部***进行交互。
13.一种计算机可读的媒介包括存储于其内部的用于使计算机执行权利要求1至12中的任意一项所述的方法的计算机可读代码。
14.一种装置包括:
处理器,用以执行任务对象,所述任务对象与恢复对象相关联;
永久性存储器,用于存储所述任务对象的当前操作条件的快照,所述快照包括状态对象,所述状态对象包括执行数据部分、应用数据部分和上下文数据部分;
所述处理器还用于在所述任务对象执行失败之后,加载所述快照以恢复由所述恢复对象指定的进程的执行。
15.根据权利要求14所述的装置,其中所述处理器还进一步用于根据所述恢复对象执行的恢复,将所述状态对象作为输入提供给恢复对象。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US21841109P | 2009-06-19 | 2009-06-19 | |
US61/218,411 | 2009-06-19 | ||
PCT/NZ2010/000114 WO2010147486A2 (en) | 2009-06-19 | 2010-06-21 | Computer process management |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102388370A true CN102388370A (zh) | 2012-03-21 |
Family
ID=43356958
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010800270195A Pending CN102388370A (zh) | 2009-06-19 | 2010-06-21 | 计算机进程管理 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20120089571A1 (zh) |
EP (1) | EP2443547A4 (zh) |
CN (1) | CN102388370A (zh) |
AU (1) | AU2010260587A1 (zh) |
BR (1) | BRPI1009660A2 (zh) |
CA (1) | CA2764235A1 (zh) |
WO (1) | WO2010147486A2 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103592551A (zh) * | 2013-11-27 | 2014-02-19 | 中国电子科技集团公司第四十一研究所 | 一种基于状态快照保存、无缝恢复的测量方法 |
CN106598703A (zh) * | 2016-12-08 | 2017-04-26 | 用友网络科技股份有限公司 | 集成***的事务补偿方法和装置 |
CN113377543A (zh) * | 2021-06-28 | 2021-09-10 | 上海商汤科技开发有限公司 | 任务处理***、电子设备和存储介质 |
WO2023185137A1 (zh) * | 2022-03-31 | 2023-10-05 | 苏州浪潮智能科技有限公司 | 一种任务管理方法、装置、设备及存储介质 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9021299B2 (en) | 2011-02-18 | 2015-04-28 | Ab Initio Technology Llc | Restarting processes |
US9116759B2 (en) | 2011-02-18 | 2015-08-25 | Ab Initio Technology Llc | Restarting data processing systems |
US9298499B2 (en) * | 2012-01-27 | 2016-03-29 | Microsoft Technology Licensing, Llc | Identifier generation using named objects |
WO2014062191A1 (en) * | 2012-10-19 | 2014-04-24 | Hewlett-Packard Development Company, L.P. | Asyncrhonous consistent snapshots in persistent memory stores |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5379432A (en) * | 1993-07-19 | 1995-01-03 | Taligent, Inc. | Object-oriented interface for a procedural operating system |
US20040078636A1 (en) * | 2002-03-20 | 2004-04-22 | National Inst. Of Advanced Ind. Science And Tech. | Input and output control means for computer system storage and a software execution method using same |
CN1695282A (zh) * | 2001-07-06 | 2005-11-09 | 电脑联合想象公司 | 用于管理基于对象的群集的***与方法 |
CN1801096A (zh) * | 2005-01-05 | 2006-07-12 | 国际商业机器公司 | 在计算机***中用于对进程进行休眠的方法和*** |
US20070198676A1 (en) * | 2006-01-20 | 2007-08-23 | Vertes Marc P | Non-intrusive method for simulation or replay of external events related to an application process, and a system implementing said method |
CN101093453A (zh) * | 2007-07-25 | 2007-12-26 | 湖南大学 | 基于虚拟内核对象的Linux程序检查点用户级实现方法 |
US20080120620A1 (en) * | 2006-09-27 | 2008-05-22 | Richard Lett | Systems and methods for scheduling, processing, and monitoring tasks |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7231436B1 (en) * | 2000-05-25 | 2007-06-12 | Microsoft Corporation | Object-based machine automation method and system |
US7590668B2 (en) * | 2005-04-15 | 2009-09-15 | Microsoft Corporation | Pausable backups of file system items |
US20080244325A1 (en) * | 2006-09-30 | 2008-10-02 | Mikhail Tyulenev | Automated software support system with backwards program execution and debugging |
-
2010
- 2010-06-21 CA CA2764235A patent/CA2764235A1/en not_active Abandoned
- 2010-06-21 US US13/375,898 patent/US20120089571A1/en not_active Abandoned
- 2010-06-21 EP EP10789790.2A patent/EP2443547A4/en not_active Withdrawn
- 2010-06-21 AU AU2010260587A patent/AU2010260587A1/en not_active Abandoned
- 2010-06-21 BR BRPI1009660A patent/BRPI1009660A2/pt not_active IP Right Cessation
- 2010-06-21 CN CN2010800270195A patent/CN102388370A/zh active Pending
- 2010-06-21 WO PCT/NZ2010/000114 patent/WO2010147486A2/en active Application Filing
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5379432A (en) * | 1993-07-19 | 1995-01-03 | Taligent, Inc. | Object-oriented interface for a procedural operating system |
CN1695282A (zh) * | 2001-07-06 | 2005-11-09 | 电脑联合想象公司 | 用于管理基于对象的群集的***与方法 |
US20040078636A1 (en) * | 2002-03-20 | 2004-04-22 | National Inst. Of Advanced Ind. Science And Tech. | Input and output control means for computer system storage and a software execution method using same |
CN1801096A (zh) * | 2005-01-05 | 2006-07-12 | 国际商业机器公司 | 在计算机***中用于对进程进行休眠的方法和*** |
US20070198676A1 (en) * | 2006-01-20 | 2007-08-23 | Vertes Marc P | Non-intrusive method for simulation or replay of external events related to an application process, and a system implementing said method |
US20080120620A1 (en) * | 2006-09-27 | 2008-05-22 | Richard Lett | Systems and methods for scheduling, processing, and monitoring tasks |
CN101093453A (zh) * | 2007-07-25 | 2007-12-26 | 湖南大学 | 基于虚拟内核对象的Linux程序检查点用户级实现方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103592551A (zh) * | 2013-11-27 | 2014-02-19 | 中国电子科技集团公司第四十一研究所 | 一种基于状态快照保存、无缝恢复的测量方法 |
CN103592551B (zh) * | 2013-11-27 | 2015-10-14 | 中国电子科技集团公司第四十一研究所 | 一种基于状态快照保存、无缝恢复的测量方法 |
CN106598703A (zh) * | 2016-12-08 | 2017-04-26 | 用友网络科技股份有限公司 | 集成***的事务补偿方法和装置 |
CN106598703B (zh) * | 2016-12-08 | 2020-04-03 | 用友网络科技股份有限公司 | 集成***的事务补偿方法和装置 |
CN113377543A (zh) * | 2021-06-28 | 2021-09-10 | 上海商汤科技开发有限公司 | 任务处理***、电子设备和存储介质 |
WO2023185137A1 (zh) * | 2022-03-31 | 2023-10-05 | 苏州浪潮智能科技有限公司 | 一种任务管理方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
BRPI1009660A2 (pt) | 2016-03-15 |
EP2443547A2 (en) | 2012-04-25 |
US20120089571A1 (en) | 2012-04-12 |
CA2764235A1 (en) | 2010-12-23 |
WO2010147486A2 (en) | 2010-12-23 |
EP2443547A4 (en) | 2013-07-17 |
AU2010260587A1 (en) | 2011-12-22 |
WO2010147486A3 (en) | 2011-04-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102388370A (zh) | 计算机进程管理 | |
Zhang et al. | Kappa: A programming framework for serverless computing | |
CN103620561B (zh) | 用于n路运行时互操作调试的方法和*** | |
Nukada et al. | NVCR: A transparent checkpoint-restart library for NVIDIA CUDA | |
US10255086B2 (en) | Determining optimal methods for creating virtual machines | |
US10613964B2 (en) | Conditional debugging of server-side production code | |
CN102236578A (zh) | 分布式工作流执行 | |
CN101416214A (zh) | 用于基于延续的元运行时环境的抽象执行模型 | |
CN104471557A (zh) | 动态语言的优化执行 | |
CN112286823A (zh) | 一种操作***内核的测试方法和装置 | |
WO2019074730A1 (en) | IMPROVED TECHNIQUES TO UPDATE SOFTWARE | |
US20160179570A1 (en) | Parallel Computing Without Requiring Antecedent Code Deployment | |
Ma et al. | A stack-on-demand execution model for elastic computing | |
Burckhardt et al. | Serverless workflows with durable functions and netherite | |
EP3719645B1 (en) | Extension application mechanisms through intra-process operation systems | |
WO2022100439A1 (en) | Workflow patching | |
CN111563253B (zh) | 智能合约运行方法、装置、设备及存储介质 | |
US20160314047A1 (en) | Managing a Computing System Crash | |
US10552135B1 (en) | Reducing a size of an application package | |
CN110289043B (zh) | 存储设备测试方法、装置、电子设备 | |
US11656888B2 (en) | Performing an application snapshot using process virtual machine resources | |
CN111868698A (zh) | 空闲空间直通 | |
US11720348B2 (en) | Computing node allocation based on build process specifications in continuous integration environments | |
US10248534B2 (en) | Template-based methodology for validating hardware features | |
CN115769191A (zh) | 在云计算环境中管理异步操作 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20170111 |