实现多重返回位置的方法和装置制造方法及图纸

技术编号:2887698 阅读:170 留言:0更新日期:2012-04-11 18:40
公开了一种基本上能有效存储与一函数调用相关的备用返回地址,以便可容易地访问该备用返回地址的方法及装置。依据本发明专利技术的一个方面,用于使能有效地存储与由一子程序调用的函数相关的返回地址的方法。函数一旦被调用,就开始运行。最终,该函数返回到子程序。相应于所期望返回点的子程序内的指令是一条伪指令,该伪指令以低附加开销运行,且不影响程序运行。当所调用的程序返回到备用返回点时,它通过阅读嵌入在所述伪指令内的数据而得到该地址。(*该技术在2018年保护过期,可自由使用*)

【技术实现步骤摘要】
本专利技术一般涉及一种方法及装置,用来实现一个函数调用的多个返回点。尤其是,本专利技术涉及有效地获取多重返回点的地址的方法及装置。计算机系统通常是通过计算机系统的网络例如局域网、内部网(intranets)及国际互联网联在一起的,使得它们可以共享诸如软件或程序及代码之类的资源。另外,包括多个子程序的许多程序被编制为一种程序,在这种程序中调用了许多并不包括在该程序之内的“外部”函数。通常,这些函数可被许多子程序所共享,因而允许计算机的系统资源得到更有效的使用。当子程序调用函数时,被调用的函数必须最终返回到该子程序。另外,对子程序的返回必须要传到该子程序内的正确位置。参见图1,以下将说明在计算机程序及由该程序调用的函数之间的流程。计算机代码104包括一个子程序g()108。子程序g()108包括多个被执行的指令。如图所示,所述指令包括对函数f()116的反复调用112。当函数f()116被调用并“正常”执行,例如未发生意外时,则函数f()116正常地完成其运行,并被返回到子程序g()108a计算机子程序。函数f()116返回子程序g()108a内的位置依赖于调用的位置,或子程序g()108a计算机子程序内调用函数f()116的位置。特别是,如果是作为调用112a的结果而执行函数f()116,则函数f()116返回到返回地址120,该地址正如本领域技术人员可以理解的那样,是在子程序g()108a计算机子程序内紧接在调用112a之后的位置。与此类似,如果函数f()116是在由调用112b调用时而执行的,则函数f()116返回到返回地址120。一旦函数f()116返回到子程序g()108a计算机子程序,则子程序g()108a一般都继续运行。许多函数可以具有多于一个的返回位置或点。举个例子,一个函数除具有一个正常的或预期的返回点,还具有一个备用返回点。备用返回点通常被认为是“异常”的返回点,例如与发生异常情况相关的返回点。备用返回点一般被存储在,或被编制在一个整体程序之内,以便能根据需要容易地确定所述返回点。举一个例子,在由不是处理异常情况的函数处理所发生的异常情况时,程序需要备用返回点。用于将多个函数与多个备用返回点联系在一起的一种机制是返回点或返回地址表。图2a是一个显示了与调用栈相关的返回点表的示意图。一个调用栈204包括一个调用程序帧(caller frame)208,该调用程序帧208调用另一帧,即被调用程序帧(callee frame)212。被调用程序帧212与函数f()214相关。因此,当调用程序208调用被调用程序帧212时,函数f()214开始运行。在执行到函数f()214的末尾时,函数f()214返回到,并由此被调用程序帧212也返回到调用程序208。当到调用程序208的这种返回不是正常的返回时,则正常的返回地址可被当作进入返回点表220的索引216,以确定正确的备用返回点。例如,如果正常返回地址为“1234”,则可在返回点表220中查询以找到“1234”。一旦找到“1234”,则可得到与“1234”相关的备用返回点地址。如图所示,对于正常返回地址“1234”,其相应的备用返回点地址为“1256”。一旦得到所述的备用返回点地址,则将其用来确保被调用程序帧212能恰当地返回调用程序208。虽然使用一般作为查询表或散列表的返回点表,对于确定用于被调用程序的一个合适的返回点是很有效的,但完成表的查询通常是很慢的。一种用于实现多重返回点的更快速的处理包括省去对表的查询而确定多个返回点。正如本领域技术人员所能理解的那样,在函数运行期间,对该函数基本上“知道”这个函数是应使用一个常规的返回,或是这个函数应使用一个备用返回。因此,可以存储与备用返回地址有关的数据。图2b是表示了用来存储备用返回地址数据的子程序的示意图。子程序g()236包括对函数f()的一个调用238。不管对函数f()的调用238是否会导致需要返回备用地址,调用238通常都会返回到返回地址240。返回地址240识别所存储的备用返回地址数据242。所存储的备用返回地址数据242位于子程序g()236a计算机子程序内靠近调用238的地方,以使备用返回地址数据242能很容易地被访问。一般来说,备用返回地址数据242存储在该指令流自身之内。由于所存储的备用返回地址数据242有可能不代表一条合法指令,或可能具有不希望有的负面效应例如覆盖了寄存器内的或存储器单元内的一个值,所以子程序g()的执行有可能不在地址240处继续,而是必须在下一条指令244处继续。当调用238正常返回时,调用238应返回到下一条指令244处。如图所示,在子程序g()236之内,下一条指令244离所存储的备用返回地址数据242偏移了一个距离D。因此,当调用238正常返回时,调用238必须返回到由返回地址240的位置加上一个偏移量D所确定的位置,该位置即为下一条指令244的位置。一般来说,由于距离D具有一个4字节的值,所以下一条指令244离返回地址240偏移了4个字节。在需要一个备用返回地址时,访问程序内所存储的备用返回地址要比完成一个表的查询更具时效性,而在不需要备用返回地址时,访问所存储的备用返回地址的能力常常对该程序的性能予以负面的影响。当一个函数调用正常返回时,在返回地址的位置上加上一个偏移量以确定出所要执行的后续指令的位置,这种做法常常是比较慢的,而且会招致与计算所述后续指令位置相关的性能的恶化。换句话说,与正常返回有关的速度可能由于所存储的备用返回地址的实现而受到损害。另外,用于产生一个对一个正常返回或最有可能发生的返回“最佳推测”估计的分支推算,有可能由于使用跳转而受到损害,正如本领域技术人员所理解的那样。换句话说,如下所述,“跳转”是用来绕过所存储的备用地址的。跳转或转移通常是包含在程序或子程序中,以绕过在某些场合有可能是不需要的代码片段。例如,如图2c所示,当函数调用正常返回时,有可能在子程序中执行跳转,以使能绕过所存储的返回地址。在子程序g()266中,对函数f()执行一个调用268。当调用268正常返回时,返回到由返回地址270所确定的子程序g()266内的一个位置。与返回地址270相应的这个位置是要跳转到位置L的一条指令272,该位置L位于距离指令272有一个固定偏移F处。因此,当调用268正常返回到返回地址270时,就执行一个到下一条指令274的跳转。这种跳转饶开了,或这种转移绕过了所存储的备用返回地址数据276。虽然跳转的实现有可能减小了性能的恶化例如硬件性能的恶化,这种恶化与将返回地址加上一个偏移量以得到后续指令的位置相关,但是,这种跳转有可能很慢。必须将一个附加代码包括在程序内,以允许其跳转,因此增大了程序的整体大小。如上所述,对于函数调用实现多重返回点的传统方法常常很慢且效率不高,因而,这些多重返回点的实现可有害地影响与函数调用相关的程序的性能。因此,需要的是一种用于实现多重返回点的有效的方法及装置,以便既可有效地发生正常返回,也可有效地发生备用返回。这里公开了一种方法及装置,使实质上能存储与函数调用相关的一个备用返回地址,以便可容易地访问该备用返回地址。依据本专利技术的一个方面,实现有效地存储与子程序调用的一个函数相关的返回地址的一种方法本文档来自技高网...

【技术保护点】
用于存储与若干返回点中的一个点相关的数据的一种计算机实现方法,该方法使能有效地获得与若干返回点中的该点相关的数据,所述若干返回点包括一个期望的返回点及一个第一备用返回点,该计算机实现方法包括:在子程序运行时,从子程序内部调用一个函数,其 中函数是与该子程序分开的;开始执行该函数;从函数返回到子程序,其中函数返回到子程序内的由期望的返回点所确定的位置;以及执行子程序内的第一指令,其中对第一指令的执行几乎没有使用附加开销,并且对该子程序的执行没有明显的影响。

【技术特征摘要】
US 1997-10-6 944326的范围内所做的修改。权利要求1.用于存储与若干返回点中的一个点相关的数据的一种计算机实现方法,该方法使能有效地获得与若干返回点中的该点相关的数据,所述若干返回点包括一个期望的返回点及一个第一备用返回点,该计算机实现方法包括开始一个子程序的执行;在该子程序运行时,从子程序内部调用一个函数,其中该函数是与该子程序分开的;开始执行该函数;从该函数返回到该子程序,其中该函数返回到该子程序内的由期望的返回点所确定的位置;执行该子程序内的第一指令,其中对该第一指令的执行几乎没有使用计算开销,并且对该子程序的执行没有明显的影响,以及在中止该函数时,跳转至该第一备用返回点。2.如权利要求1所述的一种计算机实现方法,其特征在于所述函数如所期望的那样返回到所述子程序,该方法进一步包括在返回到所期望的返回点之前,完成对所述函数的执行,所述所期望的返回点用于识别该子程序内的第一指令。3.一种如权利要求2所述的计算机实现方法,进一步包括所述子程序的继续运行。4.如前述权利要求之一的一种计算机实现方法,其特征在于开始执行函数的步骤包括加载第一备用返回点,其中第一备用返回点是由位于距离所期望的返回点有一个固定偏移量的位置上的一条指令所确定的。5.如权利要求4所述的一种计算机实现方法,进一步包括中止对所调用的函数的运行;以及跳转到第一备用返回点。6.用于存储与若干返回点中的一个点相关的数据的一种计算机系统,该系统能有效地获得与若干返回点中的该点相关的数据,所述若干返回点包括一个期望的返回点及一个第一备用返回点,该计算机系统包括一个处理器;一个与该处理器相关用于开始一个子程序的执行的执行装置;一个与处理器相关的调用装置,所述调用装置用于在该子程序运行时,从子程序内部调用一个函数,其中该函数是与该子程序分开的;一个与处理器相关的执行装置,该执行装置用于开始执行该函数;一个返回装置,用于从该函数返回到该子程序,其中该函数返回到该子程序内由期望的返回点所确定的位置,其中该返回装置还用于执行该子程序内的第一指令,其中对第一指令的执行几乎没有使用计算开销,并且对该子程序的执行没有明显的影响,...

【专利技术属性】
技术研发人员:U赫尔茨勒R格里瑟梅尔
申请(专利权)人:太阳微系统有限公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1