[发明专利]代码块转换方法和装置有效
申请号: | 201210143321.8 | 申请日: | 2012-05-09 |
公开(公告)号: | CN102693146A | 公开(公告)日: | 2012-09-26 |
发明(设计)人: | 张晓春;靳国杰;高翔 | 申请(专利权)人: | 龙芯中科技术有限公司 |
主分类号: | G06F9/45 | 分类号: | G06F9/45 |
代理公司: | 北京康信知识产权代理有限责任公司 11240 | 代理人: | 吴贵明;江舟 |
地址: | 100190 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 代码 转换 方法 装置 | ||
技术领域
本发明涉及动态二进制翻译领域,具体而言,涉及一种代码块转换方法和装置。
背景技术
动态二进制翻译是指通过对已完成静态编译的可执行程序进行代码的实时转换,以实现软件跨平台执行的方法,它是不同体系结构之间实现软件兼容的有效解决方案。在新体系结构的推广中,大量商业软件难以实现跨平台移植。二进制翻译可以使新平台直接运行已有的软件,从而促进新结构的推广和发展。
一般动态二进制翻译是采用以基本块(或称代码块)为单位进行转换的模式,具体来说,在源程序代码序列中,以跳转指令为标志截取一系列代码段,称为基本块(或称代码块),基本块(或称代码块)作为转换和执行的基本单位。每转换一个基本块之后,执行相应的转换后的代码,继而根据执行的结果,获取下一个基本块的起始位置,继续进行转换和执行。每个转换完成的基本块,都会被储存于缓存区中,以备查询和再次执行。
现有的二进制翻译的过程如图1所示,首先在转换缓存区查询是否存在当前基本块(代码块)转换后的后继代码块,若查询成功后,执行该后继代码块,若查询失败,则将当前基本块(代码块)转换为中间码,然后在遇到跳转指令结束基本块(代码块)后,将中间码转换成本地码。现有的二进制翻译的过程虽然采用缓存区的方法能够削减翻译时间,但转换后的代码的查询和调用的过程只有在转换工作完成后才能进行,而大部分转换工作是在程序执行过程的初期完成的,因此在程序启动过程中,大量代码需要实时转换,致使代码转换的时间所占比重高,造成程序启动较慢。
针对相关技术中的上述问题,目前尚未提出有效的解决方案。
发明内容
本发明提供了一种代码块转换方法和装置,以解决相关技术中的二进制翻译过程中在程序启动时需要实时转换大量代码块,使得代码块转换的时间所占比重高、程序启动较慢的问题。
根据本发明的一个方面,提供了一种代码块转换方法,包括:判断与正在执行的当前代码块相关的后继代码块是否已转换;若后继代码块未被转换,则在执行当前代码块的同时并行地对未转换的后继代码块进行转换。
优选地,在执行当前代码块的同时并行地对未转换的后继代码块进行转换的步骤包括:当前转换线程接收执行线程发送的转换请求,其中,执行线程用于执行当前代码块;当前转换线程判断是否已存在其他转换线程对后继代码块进行转换;若不存在其他转换线程对后继代码块进行转换,则当前转换线程在执行线程执行当前代码块的同时并行地对后继代码块进行转换。
优选地,在当前转换线程判断是否已存在其他转换线程对后继代码块进行转换之后,该方法还包括:若存在其他转换线程对后继代码块进行转换,则将转换队列清空,并将后继代码块的后继代码块的地址存入到转换队列中,其中,转换队列用于存储待转换的代码块的地址。
优选地,当前转换线程在执行线程执行当前代码块的同时并行地对后继代码块进行转换之后,该方法还包括:当前转换线程将转换后的后继代码块存入与当前转换线程对应的缓存区,其中,每一个当前转换线程对应一个缓存区。
优选地,在执行当前代码块的同时并行地对未转换的后继代码块进行转换之后,该方法还包括:根据转换后的后继代码块的首地址生成哈希索引,并将转换后的后继代码块的首地址存入转换查询表中索引为哈希索引的表项中;当执行到后继代码块时,判断用于记录待执行代码块的首地址的执行查询表中是否记录有后继代码块的首地址;若执行查询表中未记录有后继代码块的首地址,则从转换查询表中获取后继代码块的首地址,并将从转换查询表中获取到的后继代码块的首地址记录在执行查询表中;根据执行查询表中记录的后继代码块的首地址来执行后继代码块。
根据本发明的另一方面,提供了一种代码块转换装置,包括:第一判断单元,用于判断与正在执行的当前代码块相关的后继代码块是否已转换;转换单元,用于在第一判断单元判断出后继代码块未被转换的情况下,在执行当前代码块的同时并行地对未转换的后继代码块进行转换。
优选地,转换单元包括:接收模块,用于接收执行线程发送的转换请求,其中,执行线程用于执行当前代码块;判断模块,用于判断是否已存在其他转换线程对后继代码块进行转换;转换模块,用于在判断模块判断出不存在其他转换线程对后继代码块进行转换时,在执行线程执行当前代码块的同时并行地对后继代码块进行转换。
优选地,转换单元还包括:清空模块,用于在判断模块判断出存在其他转换线程对后继代码块进行转换时,将转换队列清空,并将后继代码块的后继代码块的地址存入到转换队列中,其中,转换队列用于存储待转换的代码块的地址。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于龙芯中科技术有限公司,未经龙芯中科技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210143321.8/2.html,转载请声明来源钻瓜专利网。