CN101231588B - 从协同例程环境执行事件驱动环境中函数的装置、***和方法 - Google Patents
从协同例程环境执行事件驱动环境中函数的装置、***和方法 Download PDFInfo
- Publication number
- CN101231588B CN101231588B CN2008100026966A CN200810002696A CN101231588B CN 101231588 B CN101231588 B CN 101231588B CN 2008100026966 A CN2008100026966 A CN 2008100026966A CN 200810002696 A CN200810002696 A CN 200810002696A CN 101231588 B CN101231588 B CN 101231588B
- Authority
- CN
- China
- Prior art keywords
- context
- environment
- coroutine
- event
- driven
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
所公开的装置、***和方法用于执行事件驱动环境中的函数。桥接模块在桥接结构中为协同例程环境中执行的协同例程上下文存储代理函数的参数和代理函数指针。代理函数被配置为在事件驱动环境中执行。所述桥接模块还在事件驱动上下文结构的桥接指针寄存器中存储所述桥接结构的桥接指针。交换上下文模块交换到事件驱动上下文。如果桥接指针寄存器不为空,执行模块使用桥接指针从桥接结构中检索代理函数指针,执行所述代理函数并在桥接结构中存储所述代理函数的结果。
Description
技术领域
本发明涉及执行函数,更确切地说,涉及从协同例程环境上下文执行事件驱动环境中的若干函数。
背景技术
典型情况下,软件过程设计为在特定的操作环境中运行。例如,许多软件过程都设计为在完成后返回(ROC)环境中运行。在ROC环境中,第一软件过程可以调用或启动第二软件过程的执行。第一软件过程的上下文状态被保存到堆栈,其中以后进先出体制存储上下文状态。在第二软件过程执行完成后,才从所述堆栈检索第一软件过程的上下文状态。第一软件过程恢复执行。
软件过程也可以在替代环境中执行。例如,软件过程可以在事件驱动环境中执行,它也可以称为实时环境。在事件驱动环境中,一个软件过程与另一个软件过程交换。软件过程之间的交换由执行的软件过程启动和/或控制,不同于由中断或操作***干预启动的典型的外部控制交换。事件驱动环境可以被配置为确保软件过程的一部分在指定的时间间隔内执行。在一个实施例中,第一软件过程可以响应任何中断而与第二软件过程的上下文交换,而不是调用第二软件过程。
此外,软件过程也可以设计为在协同例程环境中执行。协同例程环境可以包括小堆栈以及对访问资源的若干限制。结果,在协同例程环境中执行的软件过程可以更高效地利用计算***的资源。协同例程软件过程也可以从第一软件过程到第二软件过程交换上下文,而无须操作***的干预。在本文中,在事件驱动环境和/或协同例程环境中执行的软件过程称为上下文。
某些数据处理设备可以并发地采用两个或更多环境。例如,数据处理设备可以既采用事件驱动环境,又采用协同例程环境。在这样的设备中,协同例程环境上下文可能需要执行被配置为在事件驱动环境中执行的函数。遗憾的是,在事件驱动环境中执行该函数可能将软件执行的线程过早地交换到事件驱动环境,扰乱了原定的指令流。
发明内容
根据以上讨论,需要从协同例程环境执行事件驱动环境中函数的装置、***和方法。有益的是,这样的装置、***和方法会允许协同例程环境软件过程执行事件驱动环境的函数。
针对本领域的当前状态,尤其是针对本领域中执行函数的现有方法尚未完全解决的问题和需要,研究出本发明。所以,本发明的研究是为了提供从协同例程环境执行事件驱动环境中函数的装置、***和方法,它们克服了本领域中许多或全部以上讨论的缺点。
从协同例程环境执行事件驱动环境中函数的装置配备为多个模块,被配置为在功能上执行以下步骤:在桥接结构中存储代理函数指针、在桥接指针寄存器中存储所述桥接结构的桥接指针、交换到事件驱动上下文、检索所述代理指针以及执行所述代理函数。所介绍实施例中的这些模块包括桥接模块、交换上下文模块和执行模块。此外,所述装置可以包括上下文结构模块。
所述桥接模块在桥接结构中为协同例程环境中执行的协同例程上下文存储代理函数的若干参数和代理函数指针。代理函数被配置为在事件驱动环境中执行。所述桥接模块还在事件驱动上下文结构的桥接指针寄存器中存储所述桥接结构的桥接指针。所述事件驱动上下文结构存储被配置为在事件驱动环境中执行的事件驱动上下文的事件驱动上下文状态。
所述交换上下文模块初始设置到事件驱动上下文。如果桥接指针寄存器不为空,所述执行模块使用桥接指针从桥接结构中检索代理函数指针,执行所述代理函数并在桥接结构中存储所述代理函数的结果。
当要从协同例程环境执行事件驱动环境中函数时,所述交换上下文模块进一步从事件驱动上下文交换到协同例程上下文。上下文结构模块创建事件驱动上下文结构和协同例程上下文结构。所述装置从协同例程环境执行事件驱动环境中的代理函数,允许协同例程上下文采用事件驱动环境的函数。
为了从协同例程环境执行事件驱动环境中的函数,还提供了本发明的***。本***可以实施在控制器中,比如采用事件驱动和协同例程环境的存储控制器。具体地说,在一个实施例中,本***包括了处理器模块和存储器模块。
所述处理器模块执行软件过程,包括事件驱动环境和协同例程环境上下文。所述存储器模块存储所述软件过程。所述软件过程包括上下文结构模块、桥接模块、交换上下文模块和执行模块。
所述上下文结构模块创建事件驱动上下文结构和协同例程上下文结构。所述桥接模块在桥接结构中存储代理函数的若干参数和代理函数指针。另外,所述桥接模块还在所述事件驱动上下文结构的桥接指针寄存器中存储所述桥接结构的桥接指针。
所述交换上下文模块初始设置到事件驱动上下文。如果桥接指针寄存器不为空,所述执行模块使用桥接指针从桥接结构中检索代理函数指针,执行所述代理函数并在桥接结构中存储所述代理函数的结果。当要从协同例程环境执行事件驱动环境中的函数时所述交换上下文模块进一步从事件驱动上下文交换到协同例程上下文。所述***为协同例程环境中的协同例程上下文执行而执行事件驱动环境中的代理函数。
为了从协同例程环境执行事件驱动环境中的函数,还提供了本发明的方法。在公开实施例中的方法实质上包括若干步骤,以实现以上关于所介绍装置和***的操作而呈现的若干功能。在一个实施例中,本方法包括在桥接结构中存储代理函数指针、在桥接指针寄存器中存储所述桥接结构的桥接指针、交换到事件驱动上下文、检索所述代理指针以及执行所述代理函数。
桥接模块在协同例程环境中协同例程上下文执行所用的桥接结构中存储代理函数的若干参数和代理函数指针。代理函数被配置为在事件驱动环境中执行。所述桥接模块还在事件驱动上下文结构的桥接指针寄存器中存储所述桥接结构的桥接指针。所述事件驱动上下文结构存储被配置为在事件驱动环境中执行的事件驱动上下文的事件驱动上下文状态。
交换上下文模块初始设置到事件驱动上下文。如果桥接指针寄存器不为空,执行模块使用桥接指针从桥接结构中检索代理函数指针,执行所述代理函数并在桥接结构中存储所述代理函数的结果。当要从协同例程环境执行事件驱动环境中的函数时,所述交换上下文模块进一步从事件驱动上下文交换到协同例程上下文。本方法从协同例程环境执行事件驱动环境中的代理函数。
贯穿本说明书中对特征、优点或类似语言的引用并不暗示以本发明可以实现的全部特征和优点都应当包括在本发明的任何单一实施例中。相反,引用所述特征和优点的语言应当理解为表明连同某实施例介绍的具体特征、优点或特点包括在本发明的至少一个实施例中。因此,贯穿本说明书中对特征和优点以及类似语言的讨论可以但是不一定指同一实施例。
不仅如此,所介绍的本发明的特征、优点或特点在一个或多个实施例中可以以任何适宜的方式进行组合。相关领域的技术人员将认识到,没有某具体实施例的一种或多种具体特征或优点,也可以实践本发明。在其他事例中,在某些实施例中可以实现的附加特点和优点可能不在本发明的全部实施例中出现。
本发明的实施例从协同例程环境执行事件驱动环境中的函数。本发明允许协同例程上下文采用为事件驱动环境设计的若干函数。本发明的这些特征和优点从以下说明和附带的权利要求书中将变得更加完全显而易见,或者可以从后文阐述的本发明的实践中学到。
附图说明
为了便于理解本发明的优点,通过参考附图中展示的若干特定实施例,对以上简要介绍的本发明将呈现更加具体的说明。理解了这些附图仅仅描绘了本发明的典型实施例,所以不应当视为对其范围的限制,将通过使用这些附图,更加确切、详细地介绍和讲解本发明,其中:
图1是示意框图,展示了根据本发明在混合的事件驱动和协同例程环境中上下文执行的一个实施例;
图2是示意框图,展示了本发明数据结构的一个实施例;
图3是示意框图,展示了本发明桥接装置的一个实施例;
图4是示意框图,展示了本发明存储控制器的一个实施例;
图5A、5B和5C是示意流程图,展示了本发明函数执行方法的一个实施例。
具体实施方式
本说明书中介绍的许多功能单元已经被标注为模块,以便更加确切地强调其实施独立性。例如,模块可以实施为硬件电路,包括定制的VLSI电路或门阵列、成品半导体比如逻辑芯片、晶体管或者其他分立元件。模块也可以实施在可编程硬件器件中,比如现场可编程门阵列、可编程阵列逻辑、可编程逻辑器件等。
模块也可以实施在由多种类型处理器执行的软件中。例如,可执行代码的已识别模块可以包括计算机指令的一个或多个物理或逻辑块,这些指令可以例如被组织为对象、过程或函数。不过,已识别模块的可执行码在物理上可以不必位于一起,而是可以由存储在不同位置中完全不同的指令所组成,当将它们逻辑地接合在一起时,组成所述模块并实现所述模块所陈述的目的。
实际上,可执行代码的模块可以是单一指令,也可以是许多指令,甚至可以分布在几个不同的代码段上、分布在不同的程序当中并且横跨几个存储器器件。同样,在本文中,操作数据可以在若干模块内标识和展示,并且可以以任何适宜的形式实施以及组织在任何适宜类型的数据结构内。该操作数据可以被收集为单数据集,也可以分布在不同位置上,包括不同的存储设备上,并且至少可以至少部分地仅仅作为***或网络上的电子信号存在。
贯穿本说明书引用的“一个实施例”、“某实施例”或类似的语言表明,连同该实施例介绍的具体特点、结构或特征包括在本发明的至少一个实施例中。因此,贯穿本说明书的短语“在一个实施例中”、“在某实施例中”和类似语言的出现,可以但是不一定都指同一实施例。
不仅如此,所介绍的本发明的特征、结构或特点在一个或多个实施例中可以以任何适宜的方式进行组合。在以下说明中,提供了众多的具体细节,比如编程实例、软件模块、用户选项、网络事务处理、数据库查询、数据库结构、硬件模块、硬件电路、硬件芯片等,以便提供对本发明实施例的彻底理解。不过,相关领域的技术人员将认识到,没有一种和多种所述具体细节,或者利用其他方法、组件、材料等等也可以实践本发明。在其他事例中,为了避免模糊本发明的若干方面,没有显示或详细地介绍众所周知的结构、材料和操作。
图1是示意框图,展示了根据本发明在混合的事件驱动和协同例程环境100中上下文执行的一个实施例。环境100被描述为包括事件驱动环境115和协同例程环境125的逻辑空间。在本文中,逻辑空间包括处理器寄存器值、可访问的软件过程服务和数据值等,它们可以由执行的软件过程和/或上下文所采用。例如,堆栈和存储分配过程就是服务的范例,它们可用于环境100中的软件过程和/或上下文。
事件驱动环境115可以配置为执行一个或多个事件驱动上下文105。每个事件驱动上下文105都可以包括多条软件指令,并且被配置为加载被存储的和/或被初始化的上下文状态,执行所述软件指令直到被暂停以及存储上下文状态。事件驱动上下文105启动和/或控制到随后上下文的交换。在一个实施例中,事件驱动环境115配置为在指定时间间隔内执行一个或多个事件驱动上下文105的一部分。
协同例程环境125配置为执行一个或多个协同例程上下文110。协同例程环境125可以包括协同例程堆栈所用的有限存储空间,并且限制协同例程上下文110对资源的访问。每个协同例程上下文110都可以包括多条软件指令。此外,每个协同例程上下文110都可以加载被存储的和/或被初始化的上下文状态,执行所述软件指令直到被暂停以及存储上下文状态。因此上下文的切换由所述协同例程上下文110启动和/或控制。
所描述的实施例显示了由数据处理器件比如后文将介绍的存储控制器随着时间流逝而执行事件驱动上下文105和协同例程上下文110的范例。执行开始于第一事件驱动上下文105a。第一事件驱动上下文105a从第一事件驱动上下文105a交换到第二事件驱动上下文105b。此外,第二事件驱动上下文105b从第二事件驱动上下文105b和事件驱动环境115交换到协同例程上下文110和协同例程环境125。
上下文执行的线程继续从协同例程上下文110到第三事件驱动上下文105c到协同例程上下文110并且继续到第***驱动上下文105d。上下文105、110相继交换到指定的上下文,而不是像ROC环境中使用从软件过程的调用和返回。结果,协同例程上下文110可能无法执行被配置在事件驱动环境115中执行的函数,因为执行的线程将不会返回到协同例程上下文110。本发明从协同例程环境125执行事件驱动环境115中的事件驱动函数,允许协同例程上下文110采用为事件驱动环境115设计的若干函数。
图2是示意框图,展示了本发明数据结构200的一个实施例。数据结构200用于在图1的事件驱动环境115和协同例程环境125中运行的事件驱动上下文105和协同例程上下文110。如图所示,数据结构200包括代理函数205、控制块210、桥接指针寄存器215、一个或多个上下文结构220、事件驱动堆栈225、桥接结构230、协同例程堆栈235、代理函数指针245和桥接指针250。数据结构200的描述涉及图1的若干单元,相同的数字指相同的单元。数据结构200通过在协同例程环境125中运行的协同例程上下文110支持在事件驱动环境115中代理函数205的执行。
在一个实施例中,代理函数205包括设计为在ROC环境中执行的若干软件指令。一条或多条软件指令可以加入代理函数205,以便允许代理函数205在事件驱动环境115中执行。在一个实施例中,代理函数205被封装在控制块210中,其中控制块210提供了代理函数205与事件驱动环境115之间的接口。
代理函数指针245被配置作为代理函数205中指定软件指令的地址。该地址可以是后文将介绍的存储器模块地址。作为替代,该地址也可以是后文将介绍的存储设备地址。在一个实施例中,代理函数指针245是控制块210的地址。代理函数205可以通过以代理函数指针245加载处理器模块的指令指针而执行。
事件驱动上下文结构220a存储事件驱动上下文105的信息。例如,事件驱动上下文结构220a可以存储事件驱动上下文105的上下文状态,该上下文状态包括一个或多个处理器寄存器值、处理器指令指针值等的内容。当将上下文状态复制到处理器的一个或多个寄存器时,该处理器就配置为执行事件驱动上下文105,如本领域技术人员所熟知的那样。事件驱动上下文结构220a包括桥接指针寄存器215。当协同例程上下文110交换到事件驱动上下文105时,桥接指针寄存器215可以被设置为空值。不过,如将在后文中介绍,执行代理函数205时,桥接指针寄存器215存储桥接指针250。
同样,协同例程上下文结构220b存储协同例程上下文110的信息。协同例程上下文结构220b可以存储协同例程上下文110的上下文状态,以便将上下文状态复制到处理器模块的一个或多个寄存器时,该处理器模块配置为执行该协同例程驱动上下文110。
事件驱动环境115使用事件驱动堆栈225作为存储器。在一个实施例中,事件驱动堆栈225被配置为本领域技术人员熟知的后进先出存储器。事件驱动上下文结构220a可以保存到事件驱动堆栈225,并且可以从其检索。
协同例程环境125使用协同例程堆栈235作为存储器。协同例程堆栈235也可以配置为后进先出存储器。在一个实施例中,协同例程上下文结构220b保存到协同例程堆栈235中,并且从其检索。在一个实施例中,事件驱动堆栈225和协同例程堆栈235被配置为单一堆栈。
桥接结构230用于存储执行代理函数205所用的数据。此外,桥接结构230还可以用于存储执行代理函数205的结果。例如,桥接结构可以包括一个或多个数据结构,配置为存储即刻复制操作的若干参数。桥接指针250可以包括桥接结构230的地址。该地址可以是如后文将介绍的存储器模块地址和/或存储设备地址。
图3是示意框图,展示了本发明桥接装置300的一个实施例。装置300的描述涉及图1和图2的若干单元,相同的数字指相同的单元。装置300从在协同例程环境125中运行的协同例程上下文110执行事件驱动环境115中的代理函数205。如图所示,装置300包括桥接模块305、交换上下文模块310、执行模块315和上下文结构模块320。
桥接模块305在协同例程环境125中执行的协同例程上下文110所用的桥接结构230中存储代理函数205的若干参数和代理函数指针245。桥接模块305还在事件驱动上下文结构220a的桥接指针寄存器215中存储桥接结构230的桥接指针250。
交换上下文模块310从协同例程上下文110交换到事件驱动上下文105。例如,当协同例程上下文110被挂起时,交换上下文模块310就可以在协同例程上下文结构220b中存储协同例程上下文110的上下文状态,从事件驱动上下文结构220a中检索事件驱动上下文105的上下文状态并且执行事件驱动上下文105。同样,交换上下文模块310也可以通过在事件驱动上下文结构220a中存储事件驱动上下文105的上下文状态、从协同例程上下文结构220b中检索协同例程上下文110的上下文状态并且执行协同例程上下文110,从而从事件驱动上下文105交换到协同例程上下文110。
如果桥接指针寄存器215存储的不是空值,执行模块315就使用桥接指针250从桥接结构230中检索代理函数指针245。在一个实施例中,空值是二进制零(0)。执行模块315进一步执行代理函数205,并且在桥接结构230中存储代理函数205的结果。装置300从协同例程环境125执行事件驱动环境115中的若干事件驱动环境函数,比如代理函数205,从而允许协同例程上下文110采用事件驱动环境的函数。
图4是示意框图,展示了本发明存储控制器400的一个实施例。控制器400的描述涉及图1至图3的若干单元,相同的数字指相同的单元。控制器400包括处理器模块405、存储器模块410、桥接模块415、网络接口模块420和存储接口模块425。控制器400也显示为与存储服务器435和存储设备440通讯。
处理器模块405、存储器模块410、桥接模块415、网络接口模块420和存储接口模块425可以由一片或多片半导体基片上的若干半导体门制成。每片半导体基片都可以封装在一个或多个半导体器件中,它们都安装在电路卡上。处理器模块405、存储器模块410、桥接模块415、网络接口模块420和存储接口模块425之间的连接可以通过若干半导体金属层、基片与基片联线、电路卡迹线和/或连接半导体器件的若干联线。
存储器模块410存储软件指令和数据。处理器模块405执行所述软件指令并操作数据,正如本领域技术人员所熟知。在一个实施例中,存储器模块410存储的和处理器模块405执行的软件指令包括桥接模块305、交换上下文模块310、执行模块315和上下文结构模块320。
存储器模块410可以存储软件指令和数据,包括:在一个或多个地址处的代理模块205、控制块210、上下文结构220、事件驱动堆栈225、协同例程堆栈235、桥接结构230、代理函数指针245和桥接指针250。例如,存储器模块410可以在以第一地址开始的邻接地址块处存储代理模块205。代理函数指针245可以存储所述第一地址,正如本领域技术人员所熟知。同样,桥接结构230可以占用以第二地址开始的邻接地址块,而桥接指针250可以存储所述第二地址。在替代实施例中,代理函数205、控制块210、上下文结构220、事件驱动堆栈225、协同例程堆栈235、桥接结构230、代理函数指针245和桥接指针250位于存储设备440上。
在一个实施例中,控制器400将数据存储到存储服务器435的存储设备440。控制器400还可以对存储设备440中存储的数据执行若干操作,比如即刻复制操作。虽然为了简单起见仅仅显示了一台存储设备440,但是可以采用多台存储设备440。
随后的示意流程图被一般地阐述为逻辑流程图。因而,描述的次序和标注的步骤是本方法一个实施例的表达。可以构想出其他步骤和方法,它们在功能上、逻辑上或效果上者等效于所展示方法的一个或多个步骤或者其若干部分。另外,提供了采用的格式和若干符号以便解释本方法的逻辑步骤,并且应当理解它们不限制本方法的范围。尽管流程图中可以采用多种箭头类型和线条类型,但是应当理解它们不限制对应方法的范围。实际上,某些箭头或其他连接符可以用于仅仅表明本方法的逻辑流程。例如,箭头可以表明在所描述方法的若干枚举步骤之间未指定持续时间的等待或监视阶段。另外,具体方法出现的次序可以严格坚持、也可以不严格坚持所显示对应步骤的次序。
图5A、5B和5C是示意流程图,展示了本发明函数执行方法500的一个实施例。方法500实质上包括若干步骤,以实现以上关于图1至图4所介绍的装置和***的操作所呈现的若干功能。方法500的描述涉及图1至图4的若干单元,相同的数字指相同的单元。方法500允许协同例程上下文110采用为事件驱动环境115设计的若干函数。
方法500的若干步骤被显示为出现在事件驱动环境115中或者出现在协同例程环境125中。在一个实施例中,处理器模块405采用了若干寄存器值和可用的若干服务,或者包含事件驱动环境115或者包含协同例程环境125。处理器模块405还可以在事件驱动环境115或协同例程环境125中执行比如桥接模块305、交换上下文模块310、执行模块315和上下文结构模块320的若干软件过程,以及执行比如事件驱动上下文105和协同例程上下文110的若干上下文。处理器模块405不在事件驱动环境115中和协同例程环境125中同时运行。
在一个实施例中,上下文结构模块320创建了505事件驱动上下文结构220a和协同例程上下文结构220b,如图5A所示。上下文结构模块320可以根据需要创建505事件驱动上下文结构220a和协同例程上下文结构220b。作为替代,上下文结构模块320可以创建505所述结构作为初始化过程的一部分。上下文结构模块320还可以为指定上下文105、110用若干指针、参数等填充上下文结构220。
在某个实施例中,交换上下文模块310为了恢复协同例程上下文110的执行而修改510协同例程上下文结构220b。例如,交换上下文模块310可以为事件驱动上下文105的(或者设计为当协同例程上下文110挂起执行时恢复的另一个协同例程上下文的)上下文结构220存储指针。
交换上下文模块310进一步交换515到协同例程上下文110。在一个实施例中,交换上下文模块310通过将事件驱动上下文105的上下文状态保存到事件驱动上下文结构220a中,并且从协同例程上下文结构220b加载协同例程上下文110的上下文状态,而交换515到协同例程上下文。协同例程上下文状态可以包括若干寄存器值、某指令指针值等,当将其加载到处理器模块405上时,允许处理器模块405执行协同例程上下文110。
执行模块315可以在协同例程环境125中执行520协同例程上下文110。例如,协同例程上下文110可以执行一个或多个瞬间复制(flashcopy)例程。在一个实施例中,执行模块315检查事件驱动堆栈225和协同例程堆栈235以确定运行环境。例如,执行模块315可以从堆栈检索上下文结构220,比如事件驱动堆栈225和/或协同例程堆栈235。执行模块315通过检查上下文结构可以确定上下文结构220是事件驱动上下文结构220a还是协同例程上下文结构220b。如果上下文结构220是事件驱动上下文结构220a,执行模块315就可以确定该运行环境是事件驱动环境115,同样如果上下文结构220是协同例程上下文结构220b,执行模块315就可以确定该运行环境是协同例程环境125。
当协同例程上下文110必须执行另一个例程时,执行模块315判断525该例程是不是代理函数205,如果执行模块315判定525该例程不是代理函数205,交换上下文模块310就可以交换到它,执行模块315执行527协同例程上下文110的不同代码。此外,交换上下文模块310可以交换585到事件驱动上下文105、将协同例程上下文110的上下文状态保存到协同例程上下文结构220b中,并且从事件驱动上下文结构220a加载事件驱动上下文105的上下文状态,如图5C所示。方法500可以终止,尽管处理器模块405可以继续执行一个或多个事件驱动上下文105以及一个或多个协同例程上下文110。
如果执行模块315判定525该例程是代理函数205,桥接模块305就在桥接结构230中为协同例程环境125中执行的协同例程上下文110存储530用于代理函数205的若干参数和代理函数指针245。在一个实施例中,桥接模块305在存储器模块410中为桥接结构230分配存储器地址。在某个实施例中,所述分配的地址包括代理函数205的结果所用的存储空间。
代理函数205配置为在事件驱动环境115中执行。桥接模块305还在事件驱动上下文结构220a的桥接指针寄存器215中存储535桥接结构230的桥接指针250。事件驱动上下文结构220a存储事件驱动上下文105的事件驱动上下文状态。
如图5B所示,交换上下文模块310交换540到事件驱动上下文105,将协同例程上下文110的上下文状态保存到协同例程上下文结构220b中,并且从事件驱动上下文结构220a加载事件驱动上下文105的上下文状态。过去,执行模块305会执行事件驱动上下文105。不过,本发明支持在事件驱动环境115中执行代理函数205。
在事件驱动环境115中运行的执行模块315判断545桥接指针寄存器215是否为空。如果桥接指针寄存器215非空,执行模块315就使用桥接指针寄存器215的桥接指针250从桥接结构230检索550代理函数指针245。例如,执行模块315可以检索桥接指针250并使用桥接指针250的地址检索代理指针245。执行模块315可以通过对桥接指针250增加指定的偏离并从结果地址检索代理指针而检索代理指针245,正如本领域的技术人员所熟知。
执行模块315执行555事件驱动环境115中的代理函数205。此外,执行模块315可以在桥接结构230中存储560代理函数205的执行结果。例如,执行模块315可以在桥接模块305分配的存储空间中存储560代理函数205的结果。
如图5C所示,交换模块310交换562到协同例程上下文110,将事件驱动上下文105的上下文状态保存到事件驱动上下文结构220a并从协同例程上下文结构220b加载协同例程上下文110的上下文状态。在协同例程环境125中,协同例程上下文110从桥接结构230检查541代理函数205的结果。因为协同例程上下文110可以访问代理函数205的结果,方法500终止,尽管处理器模块405可以继续执行协同例程上下文110、事件驱动上下文105等。
如果执行模块315判定545桥接指针寄存器215包含空值和/或交换上下文模块310交换585到事件驱动上下文105,执行模块315就在事件驱动环境115中执行565事件驱动上下文105,方法500终止。
本发明的实施例从协同例程上下文110所用的协同例程驱动环境125执行事件驱动环境115中的代理函数205。本发明允许协同例程上下文110采用为事件驱动环境115设计的函数。
本发明可以以其他具体形式实施而不脱离其实质和本质特征。所介绍的实施例在所有方面都仅仅被视为展示性的而不是限制性的。所以,本发明的范围由附带的权利要求书而不是以上说明指明。落入权利要求书等效内容的意义和范围的全部改变都包含在其范围之内。
Claims (11)
1.一种从第二环境执行第一环境中的函数的装置,所述装置包括:
桥接模块,被配置为在所述第二环境中执行的第二上下文所用的桥接结构中存储代理函数的参数和代理函数指针,所述代理函数被配置为在所述第一环境中执行,并且在第一上下文结构的桥接指针寄存器中存储所述桥接结构的桥接指针,所述第一上下文结构存储被配置为在所述第一环境中执行的第一上下文的第一上下文状态;
交换上下文模块,被配置为初始设置到所述第一上下文,并当要从第二环境执行第一环境中的函数时进一步被配置为从所述第一上下文交换到所述第二上下文;以及
执行模块,被配置为如果所述桥接指针寄存器不为空,则使用所述桥接指针从所述桥接结构中检索所述代理函数指针,执行所述代理函数并在所述桥接结构中存储所述代理函数的结果。
2.根据权利要求1的装置,进一步包括上下文结构模块,被配置为创建所述第一上下文结构和第二上下文结构。
3.根据权利要求2的装置,其中,所述交换上下文模块进一步被配置为在所述第二上下文结构中保存所述第二上下文的第二上下文状态。
4.根据权利要求3的装置,其中,所述交换上下文模块进一步被配置为使用所述第二上下文结构交换到所述第二上下文。
5.根据权利要求1的装置,其中,所述执行模块进一步被配置为通过检查堆栈而确定操作环境。
6.根据权利要求1的装置,其中,所述第一和第二上下文以及所述代理函数被配置为完成后返回(ROC)函数。
7.一种从协同例程环境执行事件驱动环境中的函数的***,所述***包括:
上下文结构模块,被配置为创建事件驱动上下文结构和协同例程上下文结构;
桥接模块,被配置为在所述协同例程环境中执行的协同例程所用的桥接结构中为所述协同例程环境中执行的协同例程上下文存储代理函数的参数和代理函数指针,所述代理函数被配置为在所述事件驱动环境中执行,并且在事件驱动上下文结构的桥接指针寄存器中存储所述桥接结构的桥接指针,所述事件驱动上下文结构存储被配置为在所述事件驱动环境中执行的事件驱动上下文的事件驱动上下文状态;
交换上下文模块,被配置为初始设置到所述事件驱动上下文,并当要从协同例程环境执行事件驱动环境中的函数时进一步被配置为从所述事件驱动上下文交换到所述协同例程上下文;以及
执行模块,被配置为如果所述桥接指针寄存器不为空,则使用所述桥接指针从所述桥接结构中检索所述代理函数指针,执行所述代理函数并在所述桥接结构中存储所述代理函数的结果。
8.根据权利要求7的***,其中,所述交换上下文模块进一步被配置为在所述协同例程上下文结构中保存所述协同例程上下文的协同例程上下文状态,以及使用所述协同例程上下文结构交换到所述协同例程上下文。
9.根据权利要求7的***,其中,所述执行模块进一步被配置为通过检查堆栈而确定操作环境。
10.根据权利要求7的***,其中,所述事件驱动上下文和协同例程上下文以及所述代理函数被配置为完成后返回(ROC)函数。
11.一种从协同例程环境执行事件驱动环境中的函数的方法,包括以下步骤:
创建事件驱动上下文结构和协同例程上下文结构;
在所述协同例程环境中执行的协同例程所用的桥接结构中存储代理函数的参数和代理函数指针,同时在协同例程环境中执行协同例程上下文,所述代理函数被配置为在事件驱动环境中执行;
在事件驱动上下文结构的桥接指针寄存器中存储所述桥接结构的桥接指针,所述事件驱动上下文结构存储被配置为在所述事件驱动环境中执行的事件驱动上下文的事件驱动上下文状态;
初始设置到所述事件驱动上下文;
如果所述桥接指针寄存器不为空,则使用所述桥接指针从所述桥接结构中检索所述代理函数指针;
执行所述代理函数;
在所述桥接结构中存储所述代理函数的结果;以及
当要从协同例程环境执行事件驱动环境中的函数时从所述事件驱动上下文交换到所述协同例程上下文。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/626,242 | 2007-01-23 | ||
US11/626,242 US7958517B2 (en) | 2007-01-23 | 2007-01-23 | Apparatus, system, and method for executing functions in an event driven environment from a co-routine environment |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101231588A CN101231588A (zh) | 2008-07-30 |
CN101231588B true CN101231588B (zh) | 2011-04-13 |
Family
ID=39642516
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008100026966A Expired - Fee Related CN101231588B (zh) | 2007-01-23 | 2008-01-14 | 从协同例程环境执行事件驱动环境中函数的装置、***和方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7958517B2 (zh) |
CN (1) | CN101231588B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8839403B2 (en) | 2007-12-31 | 2014-09-16 | Sandisk Il Ltd. | Local proxy system and method |
US20140229715A1 (en) * | 2011-12-29 | 2014-08-14 | Laura A. Knauth | Apparatus and method for providing eventing ip and source data address in a statistical sampling infrastructure |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9126289D0 (en) | 1991-12-10 | 1992-02-12 | Int Computers Ltd | Computer system |
US5778059A (en) | 1996-08-30 | 1998-07-07 | Digital Technics, Inc. | Distributed predictive and event-driven processing environment |
EP1117033A1 (en) * | 2000-01-14 | 2001-07-18 | Sun Microsystems, Inc. | Dynamic dispatch function |
US6813761B1 (en) | 2000-06-30 | 2004-11-02 | Microsoft Corporation | Methods for enhancing flow analysis |
US6721826B2 (en) | 2001-09-25 | 2004-04-13 | Lsi Logic Corporation | Buffer partitioning for managing multiple data streams |
US6999999B2 (en) | 2001-12-28 | 2006-02-14 | Hewlett-Packard Development Company, L.P. | System and method for securing fiber channel drive access in a partitioned data library |
US6839824B2 (en) | 2001-12-28 | 2005-01-04 | Hewlett-Packard Development Company, L.P. | System and method for partitioning a storage area network associated data library employing element addresses |
CN1306430C (zh) | 2002-12-31 | 2007-03-21 | 上海科泰世纪科技有限公司 | 基于构件的用户自定义事件方法 |
US7197745B2 (en) * | 2003-05-02 | 2007-03-27 | Microsoft Corporation | User debugger for use on processes running in a high assurance kernel in an operating system |
US7788669B2 (en) * | 2003-05-02 | 2010-08-31 | Microsoft Corporation | System for isolating first computing environment from second execution environment while sharing resources by copying data from first portion to second portion of memory |
US7246216B2 (en) | 2004-07-14 | 2007-07-17 | Lsi Corporation | Dynamic partitioning of storage media for mixed applications |
-
2007
- 2007-01-23 US US11/626,242 patent/US7958517B2/en not_active Expired - Fee Related
-
2008
- 2008-01-14 CN CN2008100026966A patent/CN101231588B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101231588A (zh) | 2008-07-30 |
US20080178203A1 (en) | 2008-07-24 |
US7958517B2 (en) | 2011-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101233489B (zh) | 自适应进程分派的方法和*** | |
CN101271409B (zh) | 用于迁移逻辑分区的装置和方法以及设备 | |
US9047162B2 (en) | Dynamic software version selection | |
US8291261B2 (en) | Lightweight application-level runtime state save-and-restore utility | |
CN104364769B (zh) | 处理器特性的运行时间检测监控 | |
US8108880B2 (en) | Method and system for enabling state save and debug operations for co-routines in an event-driven environment | |
CN104205064A (zh) | 将程序事件记录事件向运行时间检测事件的变换 | |
US11893390B2 (en) | Method of debugging a processor that executes vertices of an application, each vertex being assigned to a programming thread of the processor | |
CN104380264A (zh) | 运行时间检测报告 | |
GB2348306A (en) | Batch processing of tasks in data processing systems | |
CN104704474A (zh) | 用于管理的运行时间的基于硬件的运行时间检测设施 | |
CN105389261A (zh) | 异步测试的方法及装置 | |
EP1760580B1 (en) | Processing operation information transfer control system and method | |
US20040148603A1 (en) | Technique for reaching consistent state in a multi-threaded data processing system | |
CN101231588B (zh) | 从协同例程环境执行事件驱动环境中函数的装置、***和方法 | |
US5907693A (en) | Autonomously cycling data processing architecture | |
CN100451950C (zh) | 信息处理装置、例外控制电路 | |
CN1124546C (zh) | 一种超标量处理器及在该超标量处理器中完成指令的方法 | |
CN110289043B (zh) | 存储设备测试方法、装置、电子设备 | |
CN114896149A (zh) | 基于微服务架构的分布式自动化测试装置、方法、设备及介质 | |
US20040064814A1 (en) | System and method for task arbitration in multi-threaded simulations | |
CN104731633A (zh) | 一种Linux***下多分区存储设备卸载失败后回滚方法及*** | |
CN112783886B (zh) | 缓存清理方法、装置、计算机设备及存储介质 | |
JP2866588B2 (ja) | 処理プロセス間で制御の移転を行うシステムおよび方法 | |
Feather et al. | Validation of a fault-tolerant multiprocessor: Baseline experiments and workload implementation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110413 Termination date: 20190114 |
|
CF01 | Termination of patent right due to non-payment of annual fee |