从协同例程环境执行事件驱动环境中函数的装置、系统和方法

文档序号:6457722阅读:165来源:国知局
专利名称:从协同例程环境执行事件驱动环境中函数的装置、系统和方法
技术领域
本发明涉及执行函数,更确切地说,涉及从协同例程环境上下文 执行事件驱动环境中的若干函数。
背景技术
典型情况下,软件过程设计为在特定的操作环境中运行。例如,许多软件过程都设计为在完成后返回(ROC)环境中运行。在ROC 环境中,第一软件过程可以调用或启动第二软件过程的执行。第一软 件过程的上下文状态被保存到堆栈,其中以后进先出体制存储上下文 状态。在第二软件过程执行完成后,才从所述堆栈检索第一软件过程 的上下文状态。第一软件过程恢复执行。软件过程也可以在替代环境中执行。例如,软件过程可以在事件 驱动环境中执行,它也可以称为实时环境。在事件驱动环境中, 一个 软件过程与另 一个软件过程交换。软件过程之间的交换由执行的软件 过程启动和/或控制,不同于由中断或操作系统干预启动的典型的外部控制交换。事件驱动环境可以被配置为确保软件过程的一部分在指定 的时间间隔内执行。在一个实施例中,第一软件过程可以响应任何中 断而与第二软件过程的上下文交换,而不是调用第二软件过程。此外,软件过程也可以设计为在协同例程环境中执行。协同例程 环境可以包括小堆栈以及对访问资源的若干限制。结果,在协同例程 环境中执行的软件过程可以更高效地利用计算系统的资源。协同例程 软件过程也可以从第一软件过程到第二软件过程交换上下文,而无须 操作系统的干预。在本文中,在事件驱动环境和/或协同例程环境中执 行的软件过程称为上下文。某些数据处理设备可以并发地采用两个或更多环境。例如,数据 处理设备可以既采用事件驱动环境,又采用协同例程环境。在这样的 设备中,协同例程环境上下文可能需要执行被配置为在事件驱动环境 中执行的函数。遗憾的是,在事件驱动环境中执行该函数可能将软件 执行的线程过早地交换到事件驱动环境,扰乱了原定的指令流。发明内容根据以上讨论,需要从协同例程环境执行事件驱动环境中函数的 装置、系统和方法。有益的是,这样的装置、系统和方法会允许协同 例程环境软件过程执行事件驱动环境的函数。针对本领域的当前状态,尤其是针对本领域中执行函数的现有方 法尚未完全解决的问题和需要,研究出本发明。所以,本发明的研究 是为了提供从协同例程环境执行事件驱动环境中函数的装置、系统和 方法,它们克服了本领域中许多或全部以上讨论的缺点。从协同例程环境执行事件驱动环境中函数的装置配备为多个模块,被配置为在功能上执行以下步骤在桥接结构中存储代理函数指 针、在桥接指针寄存器中存储所述桥接结构的桥接指针、交换到事件 驱动上下文、检索所述代理指针以及执行所述代理函数。所介绍实施 例中的这些模块包括桥接模块、交换上下文模块和执行模块。此外, 所述装置可以包括上下文结构模块。所述桥接模块在桥接结构中为协同例程环境中执行的协同例程 上下文存储代理函数的若干参数和代理函数指针。代理函数被配置为 在事件驱动环境中执行。所述桥接模块还在事件驱动上下文结构的桥 接指针寄存器中存储所述桥接结构的桥接指针。所述事件驱动上下文 结构存储被配置为在事件驱动环境中执行的事件驱动上下文的事件驱 动上下文状态。所述交换上下文模块交换到事件驱动上下文。如果桥接指针寄存 器不为空,所述执行模块使用桥接指针从桥接结构中检索代理函数指 针,执行所述代理函数并在桥接结构中存储所述代理函数的结果。所述交换上下文模块进一步交换到协同例程上下文。上下文结构 模块创建事件驱动上下文结构和协同例程上下文结构。所述装置从协 同例程环境执行事件驱动环境中的代理函数,允许协同例程上下文采 用事件驱动环境的函数。为了从协同例程环境执行事件驱动环境中的函数,还提供了本发 明的系统。本系统可以实施在控制器中,比如釆用事件驱动和协同例 程环境的存储控制器。具体地说,在一个实施例中,本系统包括了处 理器模块和存储器模块。所述处理器模块执行软件过程,包括事件驱动环境和协同例程环 境上下文。所述存储器模块存储所述软件过程。所述软件过程包括上 下文结构模块、桥接模块、交换上下文模块和执行模块。所述上下文结构模块创建事件驱动上下文结构和协同例程上下 文结构。所述桥接模块在桥接结构中存储代理函数的若干参数和代理 函数指针。另外,所述桥接模块还在所述事件驱动上下文结构的桥接 指针寄存器中存储所述桥接结构的桥接指针。所述交换上下文模块交换到事件驱动上下文。如果桥接指针寄存 器不为空,所述执行模块使用桥接指针从桥接结构中检索代理函数指 针,执行所述代理函数并在桥接结构中存储所述代理函数的结果。所 述交换上下文模块进一步交换到协同例程上下文。所述系统为协同例 程环境中的协同例程上下文执行而执行事件驱动环境中的代理函数。为了从协同例程环境执行事件驱动环境中的函数,还提供了本发 明的方法。在公开实施例中的方法实质上包括若干步骤,以实现以上 关于所介绍装置和系统的操作而呈现的若干功能。在一个实施例中, 本方法包括在桥接结构中存储代理函数指针、在桥接指针寄存器中存 储所述桥接结构的桥接指针、交换到事件驱动上下文、检索所述代理 指针以及执行所述代理函数。桥接模块在协同例程环境中协同例程上下文执行所用的桥接结 构中存储代理函数的若干参数和代理函数指针。代理函数被配置为在 事件驱动环境中执行。所述桥接模块还在事件驱动上下文结构的桥接指针寄存器中存储所述桥接结构的桥接指针。所述事件驱动上下文结 构存储被配置为在事件驱动环境中执行的事件驱动上下文的事件驱动 上下文状态。交换上下文模块交换到事件驱动上下文。如果桥接指针寄存器不 为空,执行模块使用桥接指针从桥接结构中检索代理函数指针,执行 所述代理函数并在桥接结构中存储所述代理函数的结果。所述交换上下文模块进一步交换到协同例程上下文。本方法从协同例程环境执行 事件驱动环境中的代理函数。贯穿本说明书中对特征、优点或类似语言的引用并不暗示以本发 明可以实现的全部特征和优点都应当包括在本发明的任何单 一 实施例 中。相反,引用所述特征和优点的语言应当理解为表明连同某实施例 介绍的具体特征、优点或特点包括在本发明的至少一个实施例中。因 此,贯穿本说明书中对特征和优点以及类似语言的讨论可以但是不一 定指同一实施例。不仅如此,所介绍的本发明的特征、优点或特点在一个或多个实 施例中可以以任何适宜的方式进行组合。相关领域的技术人员将认识 到,没有某具体实施例的一种或多种具体特征或优点,也可以实践本 发明。在其他事例中,在某些实施例中可以实现的附加特点和优点可 能不在本发明的全部实施例中出现。本发明的实施例从协同例程环境执行事件驱动环境中的函数。本 发明允许协同例程上下文采用为事件驱动环境设计的若干函数。本发 明的这些特征和优点从以下说明和附带的权利要求书中将变得更加完 全显而易见,或者可以从后文阐述的本发明的实践中学到。


为了便于理解本发明的优点,通过参考附图中展示的若干特定实 施例,对以上简要介绍的本发明将呈现更加具体的说明。理解了这些 附图仅仅描绘了本发明的典型实施例,所以不应当视为对其范围的限 制,将通过使用这些附图,更加确切、详细地介绍和讲解本发明,其中图l是示意框图,展示了根据本发明在混合的事件驱动和协同例程环境中上下文执行的一个实施例;图2是示意框图,展示了本发明数据结构的一个实施例; 图3是示意框图,展示了本发明桥接装置的一个实施例; 图4是示意框图,展示了本发明存储控制器的一个实施例; 图5A、 5B和5C是示意流程图,展示了本发明函数执行方法的一个实施例。
具体实施方式
本说明书中介绍的许多功能单元已经被标注为模块,以便更加确 切地强调其实施独立性。例如,模块可以实施为硬件电路,包括定制 的VLSI电路或门阵列、成品半导体比如逻辑芯片、晶体管或者其他 分立元件。模块也可以实施在可编程硬件器件中,比如现场可编程门 阵列、可编程阵列逻辑、可编程逻辑器件等。模块也可以实施在由多种类型处理器执行的软件中。例如,可执 行代码的已识别模块可以包括计算机指令的一个或多个物理或逻辑 块,这些指令可以例如被组织为对象、过程或函数。不过,已识别模 块的可执行码在物理上可以不必位于一起,而是可以由存储在不同位 置中完全不同的指令所组成,当将它们逻辑地接合在一起时,组成所 述模块并实现所述模块所陈述的目的。实际上,可执行代码的模块可以是单一指令,也可以是许多指令, 甚至可以分布在几个不同的代码段上、分布在不同的程序当中并且横 跨几个存储器器件。同样,在本文中,操作数据可以在若干模块内标 识和展示,并且可以以任何适宜的形式实施以及组织在任何适宜类型 的数据结构内。该操作数据可以被收集为单数据集,也可以分布在不 同位置上,包括不同的存储设备上,并且至少可以至少部分地仅仅作 为系统或网络上的电子信号存在。贯穿本说明书引用的"一个实施例"、"某实施例"或类似的语言表明,连同该实施例介绍的具体特点、结构或特征包括在本发明的 至少一个实施例中。因此,贯穿本说明书的短语"在一个实施例中"、 "在某实施例中,,和类似语言的出现,可以但是不一定都指同一实施 例。不仅如此,所介绍的本发明的特征、结构或特点在一个或多个实 施例中可以以任何适宜的方式进行组合。在以下说明中,提供了众多 的具体细节,比如编程实例、软件模块、用户选项、网络事务处理、 数据库查询、数据库结构、硬件模块、硬件电路、硬件芯片等,以便 提供对本发明实施例的彻底理解。不过,相关领域的技术人员将认识 到,没有一种和多种所述具体细节,或者利用其他方法、组件、材料 等等也可以实践本发明。在其他事例中,为了避免模糊本发明的若干 方面,没有显示或详细地介绍众所周知的结构、材料和操作。图l是示意框图,展示了根据本发明在混合的事件驱动和协同例程环境IOO中上下文执行的一个实施例。环境IOO被描述为包括事件 驱动环境115和协同例程环境125的逻辑空间。在本文中,逻辑空间 包括处理器寄存器值、可访问的软件过程服务和数据值等,它们可以 由执行的软件过程和/或上下文所采用。例如,堆栈和存储分配过程就 是服务的范例,它们可用于环境100中的软件过程和/或上下文。事件驱动坏境115可以配置为执行一个或多个事件驱动上下文 105。每个事件驱动上下文105都可以包括多条软件指令,并且被配置 为加载被存储的和/或被初始化的上下文状态,执行所述软件指令直到 被暂停以及存储上下文状态。事件驱动上下文105启动和/或控制到随 后上下文的交换。在一个实施例中,事件驱动环境115配置为在指定 时间间隔内执行一个或多个事件驱动上下文105的一部分。协同例程环境125配置为执行一个或多个协同例程上下文110。 协同例程环境125可以包括协同例程堆栈所用的有限存储空间,并且 限制协同例程上下文UO对资源的访问。每个协同例程上下文110都 可以包括多条软件指令。此外,每个协同例程上下文110都可以加载 被存储的和/或被初始化的上下文状态,执行所述软件指令直到被暂停以及存储上下文状态。因此上下文的切换由所述协同例程上下文110启动和/或控制。所描述的实施例显示了由数据处理器件比如后文将介绍的存储控制器随着时间流逝而执行事件驱动上下文105和协同例程上下文 110的范例。执行开始于第一事件驱动上下文105a。第一事件驱动上 下文105a从第一事件驱动上下文105a交换到第二事件驱动上下文 105b。此外,第二事件驱动上下文105b从第二事件驱动上下文105b 和事件驱动环境115交换到协同例程上下文110和协同例程环境125。上下文执行的线程继续从协同例程上下文110到第三事件驱动上 下文105c到协同例程上下文110并且继续到第四事件驱动上下文 105d。上下文105、 IIO相继交换到指定的上下文,而不是像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的描述涉及 图l的若干单元,相同的数字指相同的单元。数据结构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的描述涉及图l和图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。例如,当协同例程上下文IIO被挂起时,交换上下文模块310文状态,从事件驱动上下文结构220a中检索事件驱动上下文105的上 下文状态并且执行事件驱动上下文105。同样,交换上下文模块310 也可以通过在事件驱动上下文结构220a中存储事件驱动上下文105 的上下文状态、从协同例程上下文结构220b中检索协同例程上下文 110的上下文状态并且执行协同例程上下文IIO,从而从事件驱动上下 文105交换到协同例程上下文110。如果桥接指针寄存器215存储的不是空值,执行模块315就使用 桥接指针250从桥接结构230中检索代理函数指针245。在一个实施 例中,空值是二进制零(0 )。执行模块315进一步执行代理函数205, 并且在桥接结构230中存储代理函数205的结果。装置300从协同例 程环境125执行事件驱动环境115中的若干事件驱动环境函数,比如 代理函数205,从而允许协同例程上下文110采用事件驱动环境的函 数。图4是示意框图,展示了本发明存储控制器400的一个实施例。控制器400的描述涉及图l至图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可以执行一个或多个瞬间复制(flash copy)例程。在一个实施例中,执行模块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可以继续执行 协同例程上下文IIO、事件驱动上下文105等。如果执行模块315判定545桥接指针寄存器215包含空值和/或 交换上下文模块310交换585到事件驱动上下文105,执行模块315 就在事件驱动环境115中执行565事件驱动上下文105,方法500终 止。本发明的实施例从协同例程上下文110所用的协同例程驱动环境 125执行事件驱动环境115中的代理函数205。本发明允许协同例程上 下文110釆用为事件驱动环境115设计的函数。本发明可以以其他具体形式实施而不脱离其实质和本质特征。所 介绍的实施例在所有方面都仅仅被视为展示性的而不是限制性的。所 以,本发明的范围由附带的权利要求书而不是以上说明指明。落入权 利要求书等效内容的意义和范围的全部改变都包含在其范围之内。
权利要求
1.一种从第二环境执行第一环境中的函数的装置,所述装置包括桥接模块,被配置为在所述第二环境中执行的第二上下文所用的桥接结构中存储代理函数的参数和代理函数指针,所述代理函数被配置为在所述第一环境中执行,并且在第一上下文结构的桥接指针寄存器中存储所述桥接结构的桥接指针,所述第一上下文结构存储被配置为在所述第一环境中执行的第一上下文的第一上下文状态;交换上下文模块,被配置为交换到所述第一上下文;执行模块,被配置为如果所述桥接指针寄存器不为空,则使用所述桥接指针从所述桥接结构中检索所述代理函数指针,执行所述代理函数并在所述桥接结构中存储所述代理函数的结果;以及所述交换上下文模块进一步被配置为交换到所述第二上下文。
2. 根据权利要求1的装置,进一步包括上下文结构模块,被配 置为创建所述第一上下文结构和第二上下文结构。
3. 根据权利要求2的装置,其中,所述交换上下文模块进一步 被配置为在所述第二上下文结构中保存所述第二上下文的第二上下文 状态。
4. 根据权利要求3的装置,其中,所述交换上下文模块进一步 被配置为使用所述第二上下文结构交换到所述第二上下文。
5. 根据权利要求1的装置,其中,所述执行模块进一步被配置 为通过检查堆栈而确定操作环境。
6. 根据权利要求1的装置,其中,所述执行模块进一步被配置 为在所述桥接结构中存储所迷代理函数的结果。
7. 根据权利要求1的装置,其中,所述第一和第二上下文以及 所述代理函数被配置为完成后返回(ROC)函数。
8. —种从协同例程环境执行事件驱动环境中的函数的系统,所 述系统包括处理器模块,被配置为执行软件过程;存储器模块,被配置为存储所述软件过程,所述软件过程包括 上下文结构模块,被配置为创建事件驱动上下文结构和协 同例程上下文结构;桥接模块,被配置为在桥接结构中为所述协同例程环境中 执行的协同例程上下文存储代理函数的参数和代理函数指针,所述代 理函数被配置为在所述事件驱动环境中执行,并且在事件驱动上下文 结构的桥接指针寄存器中存储所述桥接结构的桥接指针,所述事件驱 动上下文结构存储被配置为在所述事件驱动环境中执行的事件驱动上 下文的事件驱动上下文状态;交换上下文模块,被配置为交换到所述事件驱动上下文; 执行模块,被配置为如果所述桥接指针寄存器不为空,则 使用所述桥接指针从所述桥接结构中检索所述代理函数指针,执行所 述代理函数并在所述桥接结构中存储所述代理函数的结果;以及所述交换上下文模块进一步被配置为交换到所述协同例程上下文。
9. 根据权利要求8的系统,其中,所述交换上下文模块进一步 被配置为在所述协同例程上下文结构中保存所述协同例程上下文的协 同例程上下文状态,以及使用所述协同例程上下文结构交换到所述协 同例程上下文。
10. 根据权利要求8的系统,其中,所述执行模块进一步被配置 为通过检查堆栈而确定操作环境。
11. 根据权利要求8的系统,其中,所述执行模块进一步被配置 为在所述桥接结构中存储所述代理函数的结果。
12. 根据权利要求8的系统,其中,所述第一和协同例程上下文 以及所述代理函数被配置为完成后返回(ROC)函数。
13. —种部署计算机基础结构的方法,包括将计算机可读的代码 集成在计算系统中,其中,所述代码连同所述计算系统能够执行以下 功能创建事件驱动上下文结构和协同例程上下文结构; 在桥接结构中存储代理函数的参数和代理函数指针,同时在协同例程环境中执行协同例程上下文,所述代理函数被配置为在事件驱动中环境执行;在事件驱动上下文结构的桥接指针寄存器中存储所述桥接结构 的桥接指针,所述事件驱动上下文结构存储被配置为在所述事件驱动 环境中执行的事件驱动上下文的事件驱动上下文状态;交换到所述事件驱动上下文;如果所述桥接指针寄存器不为空,则使用所述桥接指针从所述桥 接结构中检索所述代理函数指针; 执行所述代理函数;在所述桥接结构中存储所述代理函数的结果;以及 交换到所述协同例程上下文。
全文摘要
所公开的装置、系统和方法用于执行事件驱动环境中的函数。桥接模块在桥接结构中为协同例程环境中执行的协同例程上下文存储代理函数的参数和代理函数指针。代理函数被配置为在事件驱动环境中执行。所述桥接模块还在事件驱动上下文结构的桥接指针寄存器中存储所述桥接结构的桥接指针。交换上下文模块交换到事件驱动上下文。如果桥接指针寄存器不为空,执行模块使用桥接指针从桥接结构中检索代理函数指针,执行所述代理函数并在桥接结构中存储所述代理函数的结果。
文档编号G06F9/44GK101231588SQ20081000269
公开日2008年7月30日 申请日期2008年1月14日 优先权日2007年1月23日
发明者埃迪·林, 肯尼思·F.·戴三世, 道格拉斯·W.·德威 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1