您的位置:首页 > 编程语言

动态二进制代码翻译[2][VM Versatile platforms for systems and process]

2008-11-25 06:21 609 查看
递增式二进制翻译
高级控制由模拟管理器运行时提供
其它主要元素:解释器,二进制翻译器
关键点——>解释器首先处理原始的源二进制码。

每块源二进制码翻译后保存在块。。。正中。翻译越多,消耗越多内存。有潜在浪费内存,因为有的指令很少用到。为了减少内存消耗,典型地使用code cahe,cade cash,保存最近使用过得翻译过的二进制码。详细过程见第三章,本章内,假设 code cash足够大。

一个映射表用来连接源二进制代码的spc与翻译过的二进制代码TPC,这个表提供一个code cash的索引,一般用hash table来实现。

Spc提取自翻译过的二进制码,tpc指向翻译过的代码块,位于code cash里面。如果em想查找一块翻译过的代码,就需要查询map,在映射表中查询spc对应的tpc如果存在,则对应的代码块已经翻译过,如果不存在,则说明在code cash中无此代码块,需要调用解释器进行进一步的翻译。

==
系统每次翻译一块源代码块,简单翻译方案
动态翻译单元块basic bloack有不同于传统的静态翻译单元块。静态的单元块只有一个代码入口一个代码出口,所有的静态单元块都起于一个分支指令,并终结于下一个分支指令之前。动态单元块的生成取决于实际发生的控制流,开始于条件分支指令,结束于下一个条件分支指令。全部过程如下:

第一,装载源二进制码于内存中;二,em开始调用解释器翻译源二进制码;三,解释器动态生成翻译代码块并且将翻译代码块置于code cash中,同时在映射表中设置对应的spc和tpc;四,当遇到条件分支或者条件跳转指令时,解释器便完成一个动态单元块的翻译;五,em根据源二进制码的控制流进行执行,如果下一个指令已经翻译过,则执行该指令。如未翻译,则生成下一个动态单元块。一个值得注意的情况是,如果跳转指令是跳转到一个已翻译过的中间位置,则需要将此块分解为两个单元块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: