在上篇,我们已经知道计算机系统的虚拟化可以在硬件,指令集,操作系统,库以及高级语言等5个不同层次上实现。目前流行的许多虚拟化技术,如XEN的半虚拟化,VMware的全虚拟化,以及Interl VT-x和AMD Pacifica的硬件虚拟化以及最近的预虚拟化等,通常都在硬件或操作系统层次实现,旨在解决如何将多种不同的软件环境(如OS)集成在特定硬件平台下这个问题。关于这方面的内容,我将在<系统虚拟化篇>描述。而在指令集层次进行虚拟化,能够使同一个系统程序或应用程序运行在不同的结构的硬件平台上,扩大了虚拟化的应用范围。因此指令集虚拟化技术是其他虚拟化技术的必要补充,也是虚拟化计算机系统的重要组成之一。
0. 实质
指令集虚拟化,实际就是将某个硬件平台的二进制代码转换为另一个平台上的二进制代码,从而实现不同指令集间的兼容,这个技术也被形象的称为"二进制翻译".
1.概览
二进制翻译是一个复杂的过程,涉及许多技术的结合,包括编译技术,计算机系统结构技术,自适应软件技术等。二进制翻译可以在运行时动态完成,也可以在编译时静态完成,可以仅从翻译用户级代码也可以翻译整个系统代码。动态二进制翻译是在程序运行期间把代码片断从原始指令集翻译为目标指令集,静态二进制翻译则是脱机状态下进行翻译工作,然后再运行时执行翻译过的代码。
一个完正的指令集包括很多部分,如寄存器组织,存储器结构,指令以及自陷和中断方式等。二进制翻译必须完整地再现这些接口和功能。从根本上讲,二进制翻译是一个软件过程,它的实现通常有3种不同方式:
解释执行,静态翻译,动态翻译
2.解释执行
解释执行