【技术实现步骤摘要】
本专利技术涉及数据处理系统,且更具体地,涉及一种启用状态保存和调试操作的方法和系统。
技术介绍
典型地,操作系统(OS)将虚拟内存分为内核空间和用户空间。典型地,内核空间为运行内核、内核扩展和设备驱动程序而保留,而用户空间则是为用户模式应用而保留。为了跟踪并控制多个进程的执行,OS利用调用堆栈(也称为执行堆栈)存储关于计算机程序的活动子例程的信息。在活动子例程的执行已经完成之后,调用堆栈通过记住每个活动子例程应该返回控制的点来监控多个进程的执行。可以利用协同例程促使代码移植到在OS的内核空间操作的一组微代码中,从而移植的代码无需重构,以在事件驱动(或者扫描环)环境中异步运行。当需要来自事件驱动环境中代码的异步回叫时,在不同的上下文(或者堆栈)上执行移植代码的几个协同例程包装挂起相应的操作。在回叫时,协同例程包装恢复相应的移植代码的上下文,且移植的代码继续进行,就好像已经立即执行了中断函数调用。为了便于代码移植,OS往往需要重构代码以在新环境中运行(例如,通过提供转换以启用非固有异步环境中的操作)。
技术实现思路
本专利技术公开了一种针对事件驱动环境中协同例程启用状态保存和调试操作的方法、系统和计算机程序产品。堆栈管理实用程序在缓冲区(buffer)中为包括状态域(state field)的上下文结构和堆栈指针分配空间。上下文管理实用程序初始化第一协同例程的第一上下文-->结构,并响应于第二协同例程的执行请求保存所述第一上下文结构的状态。所述上下文管理实用程序将与所述第二协同例程相关的第二上下文结构设置为当前上下文。当完成所述当前上下文的执行时,所述上下文管理 ...
【技术保护点】
一种方法,包括 初始化第一协同例程的第一上下文结构; 当进程调用第二协同例程的执行时: 保存所述第一上下文结构的状态;以及 将与所述第二协同例程相关的第二上下文结构设置为当前上下文;以及 当所述当前上下文的执行完成时,将所述第一协同例程的所述第一上下文结构恢复为下一个当前上下文。
【技术特征摘要】
US 2007-3-7 11/682,9561.一种方法,包括初始化第一协同例程的第一上下文结构;当进程调用第二协同例程的执行时:保存所述第一上下文结构的状态;以及将与所述第二协同例程相关的第二上下文结构设置为当前上下文;以及当所述当前上下文的执行完成时,将所述第一协同例程的所述第一上下文结构恢复为下一个当前上下文。2.如权利要求1所述的方法,进一步包括:在缓冲区中分配上下文结构和堆栈指针,其中所述上下文结构包括状态域;以及执行状态保存操作,以响应于所述状态域不被设置为有效值恢复所述缓冲区。3.如权利要求2所述的方法,其中:初始化所述第一协同例程的第一上下文结构进一步包括:从可用堆栈块的列表移除所述缓冲区中的堆栈块;将所述堆栈块添加至已分配堆栈块的列表;将所述第一上下文结构的所述状态域设置为“已分配的”值;以及将所述堆栈块提供给与所述第一上下文结构对应的调用程序;且将所述第一上下文结构恢复为下一个当前上下文进一步包括:从已分配堆栈块的列表移除所述缓冲区中的堆栈块;将所述堆栈块添加至可用堆栈块的列表;以及将所述第二上下文结构的所述状态域设置为“未分配的”值。4.如权利要求2所述的方法,其中保存所述第一上下文结构的所述状态进一步包括:将与第一上下文结构对应的当前值从寄存器保存到永久存储位置;以及将所述第一上下文结构的所述状态域设置为“set_by_getcontext”值。5.如权利要求1所述的方法,其中将与所述第二协同例程相关的所述第二上下文结构设置为当前上下文进一步包括:响应于所述状态域不具有“set_by_getcontext”值并且所述状态域不具有“set_by_swapcontext”值,执行状态保存操作以将所述缓冲区恢复为最近有效状态,其中完成了首次故障数据捕获(FFDC);响应于所述状态域包含所述“set_by_getcontext”值,将所述第二上下文结构的所述状态域设置为表示所述第二上下文结构为下一个当前上下文的“on_cpu”值;响应于所述状态域包含所述“set_by_swapcontext”值,将所述第二上下文结构的所述状态域设置为表示所述第二上下文结构为下一个当前上下文的所述“on_cpu”值;响应于所述第二上下文结构为下一个当前上下文,将与所述第二上下文结构对应的堆栈块移动至所述缓冲区内已分配堆栈块的列表的前端;以及通过来自所述第二上下文结构的值更新寄存器。6.如权利要求2所述的方法,其中执行所述状态保存操作以恢复所述缓冲区进一步包括:当所述缓冲区内已分配的堆栈块的数量大于最近使用的堆栈块的预定数量与最早使用的堆栈块的预定数量之和时:设置指向所述缓冲区中已分配堆栈块列表的开始的指针;初始化计数变量;当所述计数变量小于所述最近使用的堆栈块数量时:在永久存储位置中保存由所述指针识别的所述已分配堆栈块之一;递增所述指针和所述计数变量;以及当所述计数变量不小于所述最近使用的堆栈块的数量时:设置所述指针指向所述缓冲区中所述已分配堆栈块的列表的结尾;清除所述计数变量;以及当所述计数变量小于所述最早使用的堆栈块的数量时:在永久存储位置中保存由所述指针识别的所述已分配堆栈块之一;递增所述指针和所述计数变量。7.如权利要求2所述的方法,其中执行所述状态保存操作以恢复所述缓冲区进一步包括:当所述缓冲区内已分配的堆栈块的数量不大于最近使用的堆栈块的预定数量与最早使用的堆栈块的预定数量之和时:设置指针指向所述缓冲区中已分配堆栈块的列表的开始;当所述指针为不与所述已分配堆栈块列表的结尾对应时:在永久存储位置中保存与所述指针对应的所述已分配堆栈块之一;以及递增所述指针。8.一种计算机系统,包括:处理器;耦接于所述处理器的内存;所述内存中的缓冲区;在处理器上执行的实用程序且所述实用程序包含用于执行下述操作的代码:初始化第一协同例程的第一上下文结构;当进程...
【专利技术属性】
技术研发人员:道格拉斯W德威,桑格拉姆S高曼,威廉G西尔曼,沙查菲恩比立特,
申请(专利权)人:国际商业机器公司,
类型:发明
国别省市:US[美国]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。