[发明专利]在线性栈上高效恢复协同例程有效
申请号: | 201110008477.0 | 申请日: | 2011-01-06 |
公开(公告)号: | CN102141937A | 公开(公告)日: | 2011-08-03 |
发明(设计)人: | N·M·加夫特;M·托格森;H·J·M·梅杰;N·古斯塔夫松 | 申请(专利权)人: | 微软公司 |
主分类号: | G06F9/48 | 分类号: | G06F9/48 |
代理公司: | 上海专利商标事务所有限公司 31100 | 代理人: | 黄嵩泉;高见 |
地址: | 美国华*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 线性 高效 恢复 协同 例程 | ||
1.一种系统(100),包括:
处理器(142)和存储器(144),所述存储器包括配置成使所述处理器(142)执行以下动作的模块(106):
在利用固有地不能挂起和恢复协同例程的单个线性机器调用栈的计算机环境中挂起和恢复包括调用方协同例程(110)和被调用协同例程(112)的协同例程,其中
仅响应于检测到所述被调用协同例程的挂起,所述模块:
保存先前未保存的所述单个线性机器调用栈的能恢复部分,所述单个线性机器调用栈的所述能恢复部分包括所述调用方协同例程的栈帧、所述被调用协同例程的栈帧以及恢复器的栈帧;
将所述单个线性机器调用栈的所述能恢复部分从所述单个线性机器调用栈移除;
将恢复器的返回地址放到所述单个线性机器调用栈上;以及响应于检测到所述被调用协同例程的恢复:
仅将所述被调用协同例程的所述栈帧复制到所述单个线性机器调用栈上,而不将所述单个线性机器调用栈的所有所述能恢复部分复制到所述单个线性机器调用栈上。
2.如权利要求1所述的系统,其特征在于,响应于检测到所述被调用协同例程的恢复,通过将控制返回到放在所述单个线性机器调用栈上的所述恢复器的所述返回地址来将控制返回给所述恢复器,所述恢复器将所述被调用协同例程的所述栈帧放到所述单个线性机器调用栈上。
3.如权利要求1所述的系统,其特征在于,响应于抛出异常,在所述单个线性机器调用栈上所述被调用协同例程的所述栈帧被所述调用方协同例程的所述栈帧代替。
4.如权利要求1所述的系统,其特征在于,通过所述调用方协同例程请求附加信息来发起恢复。
5.如权利要求1所述的系统,其特征在于,通过返回所述调用方协同例程所请求的信息来发起恢复。
6.一种方法(200),包括:
在其中实现线性机器调用栈的软件开发计算机上执行的编程环境中,其中所述线性机器调用栈固有地不能挂起和恢复协同例程:
响应于接收到从调用者对被调用协同例程的未挂起协同例程调用,不将与所述被调用协同例程相关联的栈帧从所述线性机器调用栈保存到堆(206);以及
仅响应于检测到从所述调用者调用的被调用协同例程的首次挂起,将与所述被调用协同例程相关联的栈帧从所述线性机器调用栈保存到堆(208)。
7.如权利要求6所述的方法,其特征在于,还包括:
响应于检测到所述被调用协同例程的恢复,从所述堆向所述线性机器栈重构仅叶帧。
8.如权利要求6所述的方法,其特征在于,还包括:
实现高级编程语言的迭代器或实现异步编程。
9.如权利要求6所述的方法,其特征在于,还包括:
响应于所述被调用协同例程返回,用所述调用者的栈帧来代替所述线性机器调用栈上所述被调用协同例程的所述栈帧。
10.如权利要求6所述的方法,其特征在于,还包括:
响应于抛出异常,抓住所述异常,在所述线性机器调用栈上用所述调用者的栈帧来代替所述被调用协同例程的所述栈帧并重新抛出所述异常。
11.一种包括计算机可执行指令的计算机可读存储介质,所述指令在被执行时使至少一个处理器(142):
执行对未挂起协同例程的线性机器调用栈处理;
除所述线性机器调用栈处理以外,通过以下操作对被挂起协同例程执行调用栈处理:
将包括所述被挂起协同例程的返回地址的栈帧、包括所述调用者的返回地址的栈帧以及驱动程序例程的栈帧保存到与所述线性机器调用栈分开的数据结构中;
挂起所述调用者;
从所述线性机器调用栈移除所述调用者的所述栈帧和所述被挂起协同例程的所述栈帧;
将恢复器的返回地址放到所述线性机器调用栈上;以及响应于接收到所述被挂起协同例程的恢复:
将所述调用者的所述栈帧复制到所述线性机器调用栈上。
12.如权利要求11所述的计算机可读存储介质,其特征在于,还包括在被执行时使所述至少一个处理器执行以下动作的计算机可执行指令:
恢复所述被挂起协同例程,其中所恢复的协同例程返回到所述恢复器,并且所述恢复器将所述调用者的栈帧复制到所述线性机器调用栈上。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于微软公司,未经微软公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110008477.0/1.html,转载请声明来源钻瓜专利网。