sosojohn
论坛版主
论坛版主
  • 注册日期2006-01-29
  • 最后登录2021-06-25
  • 粉丝0
  • 关注1
  • 积分1047分
  • 威望535点
  • 贡献值1点
  • 好评度178点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:3990回复:1

虚拟化技术-指令集虚拟化

楼主#
更多 发布于:2009-03-17 13:39
在上篇,我们已经知道计算机系统的虚拟化可以在硬件,指令集,操作系统,库以及高级语言等5个不同层次上实现。目前流行的许多虚拟化技术,如XEN的半虚拟化,VMware的全虚拟化,以及Interl VT-x和AMD Pacifica的硬件虚拟化以及最近的预虚拟化等,通常都在硬件或操作系统层次实现,旨在解决如何将多种不同的软件环境(如OS)集成在特定硬件平台下这个问题。关于这方面的内容,我将在<系统虚拟化篇>描述。而在指令集层次进行虚拟化,能够使同一个系统程序或应用程序运行在不同的结构的硬件平台上,扩大了虚拟化的应用范围。因此指令集虚拟化技术是其他虚拟化技术的必要补充,也是虚拟化计算机系统的重要组成之一。

0. 实质

指令集虚拟化,实际就是将某个硬件平台的二进制代码转换为另一个平台上的二进制代码,从而实现不同指令集间的兼容,这个技术也被形象的称为"二进制翻译".

1.概览

二进制翻译是一个复杂的过程,涉及许多技术的结合,包括编译技术,计算机系统结构技术,自适应软件技术等。二进制翻译可以在运行时动态完成,也可以在编译时静态完成,可以仅从翻译用户级代码也可以翻译整个系统代码。动态二进制翻译是在程序运行期间把代码片断从原始指令集翻译为目标指令集,静态二进制翻译则是脱机状态下进行翻译工作,然后再运行时执行翻译过的代码。

一个完正的指令集包括很多部分,如寄存器组织,存储器结构,指令以及自陷和中断方式等。二进制翻译必须完整地再现这些接口和功能。从根本上讲,二进制翻译是一个软件过程,它的实现通常有3种不同方式:

解释执行,静态翻译,动态翻译

2.解释执行

解释执行,类似高级语言的解释器,读者可以自行查阅相关内容。解释器开发相对容易,也比较容易实现与已有体系结构的高度兼容,但代码执行效率很差。读者可以查看 IBM 1401,7070,7090等代码。

解释执行流程:"取指令--->分析指令--->完成指令所需的操作并修改处理器状态"。这种方式通常也被称为"译码并转发"。这个方式代码可读性很强,但是由于有大量的switch,导致执行效率很低,并且这些分支指令的行为很难预测。为此有人提出“线程解释”的优化方法,该方法特点,将译码并转发结构中的转发代码分布到不同类型的指令的解释函数,从而消除一部分switch(即goto)。这方法确实解决了些问题,但是对dispatch数组的访问成了限制性能提高的一个瓶颈,因为每一段解释代码都必须访问该数组获取下一个指令执行的入口,从而达到goto。当然也有优化的方式,但不在本篇讨论范围。

3.静态翻译

二进制静态翻译是在二进制执行之前对其进行翻译,将源机器的二进制可执行文件完全翻译为目标计算机上的二进制执行文件,然后再目标计算机执行翻译后的二进制,并且一次翻译的结果可以多次执行。该过程很类似高级语言的编译过程。
该方式的缺点,不能解决代码挖掘和自修改代码着两个二进制编译过程中的关键问题。

先写到这吧,打字太累了.

wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2009-03-22 09:59
不错,现在楚狂人在INTEL 就干这事情,建议让他也来写点,嘿嘿......
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部