[发明专利]一种非对齐访存的处理方法有效
申请号: | 200810115202.5 | 申请日: | 2008-06-18 |
公开(公告)号: | CN101299192A | 公开(公告)日: | 2008-11-05 |
发明(设计)人: | 李建军;武成岗;陈龙 | 申请(专利权)人: | 中国科学院计算技术研究所 |
主分类号: | G06F9/45 | 分类号: | G06F9/45 |
代理公司: | 北京泛华伟业知识产权代理有限公司 | 代理人: | 王勇 |
地址: | 100190北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 对齐 处理 方法 | ||
1.一种非对齐访存的处理方法,包括:
步骤10)、在解释器中对访存指令进行插桩,得到非对齐访存指令的信息;
步骤20)、当翻译单元的执行次数大于预设的翻译门限时,根据所述非对齐访存指令的信息指导翻译器将翻译单元翻译成本地码;
步骤30)、在所述本地码执行过程中,如果发生非对齐访存,则利用异常处理机制,在异常处理函数中根据操作系统保存的异常上下文信息生成相应的非对齐访存指令序列,并将所述指令序列插入到本地可执行代码中;
其中,所述非对齐访存是指访存地址不是所访问数据单元字节数的整数倍。
2.权利要求1的方法,其中,步骤10)中,所述目标体系结构包括ALPHA、MIPS和Itanium体系结构。
3.权利要求1的方法,其中,步骤10)进一步包括:解释执行访存指令时,确定所述访存指令发生非对齐内存访问,记录所述访存指令的相关信息;在当前执行的翻译单元解释执行完成后,保存所述访存指令的相关信息。
4.权利要求3的方法,其中,通过判断访存地址是否对齐来确定所述指令是否发生非对齐内存访问。
5.权利要求3的方法,其中,所述访存指令的相关信息包括所述访存指令的地址、访存地址的对齐方式、发生对齐访存的次数和非对齐访存的次数。
6.权利要求5的方法,其中,步骤20)进一步包括:
步骤210)、根据所述非对齐访存指令的信息确定当前指令发生非对齐访存,将当前指令中的访存操作翻译为非对齐访存指令序列;
步骤220)、对翻译单元内的指令逐条进行翻译,根据解释器插桩得到的关于访存指令的访存地址是否对齐的信息,将访存指令翻译为相应的指令或指令序列。
7.权利要求6的方法,其中,步骤210)进一步包括:根据当前访存指令的地址是否包括在所述访存指令的相关信息的所述访存指令的地址中,判断当前指令是否发生非对齐访存。
8.权利要求1的方法,其中,步骤30)进一步包括:
步骤310)、在二进制翻译器的初始化阶段注册异常处理函数,如果在程序执行过程中出现非对齐访存异常,操作系统保存异常现场上下文;
步骤320)、从所述操作系统保存的异常现场上下文中得到发生非对齐异常的访存指令的地址,分析所述访存指令得到访存地址及源寄存器或目标寄存器信息,根据从异常上下文中得到的指令地址判断所述异常是否由x86访存指令引起;
步骤330)、如果所述异常不是由x86访存指令引起,根据访存指令的类型进行相应保存或者更新处理;
步骤340)、如果所述异常由x86访存指令引起,根据分析得到的指令信息生成相应的非对齐访存指令序列;
步骤350)、将生成的非对齐访存指令序列插入到代码中,并将发生非对齐访存异常的指令替换为跳转到上述指令序列的无条件跳转指令。
9.权利要求8的方法,其中,步骤330)进一步包括:
如果当前发生非对齐访存异常的访存指令是Load指令,将访存目标地址中的内容利用字节对齐的访存操作取出,然后利用逻辑操作得到结果,将结果更新到异常现场上下文信息中;
如果当前发生非对齐访存异常的访存指令是Store指令,从操作系统保存的异常现场上下文信息中取出store指令的源寄存器的内容,按对齐访存的方式将其存到目标内存单元中。
10.权利要求8的方法,其中,步骤340)进一步包括:
申请一段本地码空间;
根据分析发生非对齐访存的指令得到的信息,生成相应的非对齐访存指令序列;
将所述生成的非对齐访存指令序列保存到所述申请的本地码空间中;
将发生非对齐访存的指令修改为跳转到非对齐访存指令序列的跳转指令。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院计算技术研究所,未经中国科学院计算技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810115202.5/1.html,转载请声明来源钻瓜专利网。