虚拟机技术综述-3 应用程序虚拟机

原创 2007年10月07日 17:43:00
 
 
 
应用程序虚拟机
     应用程序虚拟机提供给用户一个虚拟的应用程序二进制接口环境,也称作高级语言虚拟机。它能够使应用程序与平台相对独立。因为可以开发针对不同平台的虚拟机版本,所以任何针对该虚拟机的应用程序都能在实现了该虚拟机的平台上运行,而不是为具体的应用程序开发出针对众多平台的版本。应用程序在虚拟机上的运行可以采用解释或即时编译的方式。
 
通过设计一个完整而通用的运行时框架可以实现较好的跨平台可移植性。在设计一个进程级虚拟机的同时,定义好一个应用程序开发环境便可以达到这个目的。这个虚拟机环境不直接对应于任何一种真实的平台,但它符合应用程序开发的高级语言特性,并有很好的可移植性。这种应用程序虚拟机与进程虚拟机很相似,但它尽可能地减少与硬件和操作系统相关的特性,因为这些特性降低了平台无关性。
应用程序虚拟机是随着Pascal语言环境而流行起来的。在传统的编译系统中,如图7,包含一个前端和代码生成器,它执行词法、语法、语义分析,以得到一种简单的中间代码,这种中间代码不与机器码相似但的机器码更为抽象工厂的,这种中间代码不不包含具体的寄存器分配。代码生成器则把中间代码转换成二进制代码,这种二进制代码就包含了某种特定的指令集和与操作系统相关的机器码。这个二进制文件便能够在支持该种指令集和操作系统的平台上执行。为了能让程序能够在另外一种平台上执行,必须将源程序编译成另外一个平台的二进制代码。
图7 编译器发布的流程
在虚拟机系统下开发,则过程稍有不同,主要是程序的发布的时机不同。如图8,一个经典的编译器前端产生中间形式的抽象机器码。在应用程序虚拟机中,这里产生的是基于栈的指令集代码。这种虚拟指令集本质上就是虚拟机的机器代码。这种可移植的虚拟指令集代码可以发行到不同的平台上执行。对于每一个平台,能够执行这种虚拟指令集的虚拟机都需要被实现。以简单的形式来说,这个虚拟机包含一个解释器,能够取指令、译码、执行对应的状态转换(可能涉及内存和栈操作)。输入输出功能则是通过作为该虚拟机一部分的标准库来实现。对于高性能的虚拟机来说,虚拟机代码可以转换成宿主机机器码,以便在宿主平台上直接运行。
图8 虚拟机发布的流程
应用程序虚拟机可以使软件移植性变得容易。虽然实现虚拟机需要付出一些成本,但是与在每一个平台上开发一个编译器并且将所有应用程序重新编译相比,这仍然是一个相对简单的工程,甚至也比为一个典型的真实指令集开发一个进程虚拟机更简单。
太阳微系统公司的JAVA虚拟机和微软公司.NET框架的通用语言接口是广泛使用的应用程序虚拟机的例子。平台无关性和安全性是JAVA虚拟机和通用语言接口的核心。这两种系统的指令集都是基于字节码的,也就是说,指令被解码为字节序列,每个字节是一个操作码,一个单字节操作数或者是多字节操作数的一部分。这些字节码指令集是基于堆栈的,并且有抽象数据规范和内存模型,而且内存大小在理论上是无限的,因为垃圾收集通常是实现的一部分。因为任何一种硬件平台都可能是执行JAVA或者基于通用语言接口程序的平台,所以程序不会编译成面向特定操作系统的代码,同时,一个标准库会是整个执行环境的一部分。其它的应用程序虚拟机有Forth virtual machineGlulxInfernoLow Level Virtual Machine (LLVM)LuaAdobe Flash PlayerMMIXO-code machinep-code machineParrotPerl virtual machinePortable.NETPython virtual machineScummVMSECD machineSmalltalk virtual machine Sqlite virtual machineSqueak virtual machineTrueType virtual machineValgrindVX32 virtual machineWabaWarren Abstract MachineZ-machine
 
 

android应用程序启动详情之Dalvik虚拟机

本文主要讨论Android启动一个应用时一些后台相关的流程。 Dalvik虚拟机  -》 进程启动 -》 创建UI线程 总体概念: 一个应用,一个虚拟机实例,一个进程,一个UI线程 1. Dalvik...

Java虚拟机性能管理神器 - VisualVM(9) 排查JAVA应用程序线程死锁

VisualVM - JAVA 监控工具(9) 排查JAVA应用程序线程死锁 JAVA应用程序死锁原因 排查JAVA应用程序死锁 分析解决JAVA应用程序死锁...

Java虚拟机性能管理神器 - VisualVM(5) 监控远程主机上的JAVA应用程序

VisualVM - JAVA 监控工具(5)  监控远程主机上的JAVA应用程序     使用VisualVM监控远程主机上JAVA应用程序时,需要开启远程主机上的远程监控访问,或者在远程JAVA应...

高级应用程序(Java虚拟机)

转载于:http://hi.baidu.com/davidsternberg/blog/item/7b05eb527f111a551038c2ad.html   新的JavaTM 虚拟机(VMs)...

Java虚拟机性能管理神器 - VisualVM(8) 查找JAVA应用程序耗时的方法函数

VisualVM - JAVA 监控工具(8) 查找JAVA应用程序耗时的方法函数 那些方法函数需要监控 如何排查 如何处理...

Java虚拟机性能管理神器 - VisualVM(7) 排查JAVA应用程序线程泄漏

VisualVM - JAVA 监控工具(7)  排查JAVA应用程序线程泄漏 线程泄漏原因 线程泄漏排查 线程泄漏处理...

打开虚拟机出现这种情况:获取 VirtualBox COM 对象失败,应用程序将被中断。

步骤如下: 1、WIN+R打开命令行 2、在命令行中输入:regedit,然后按下回车 3、找到这个文件,点击InprocServer32;接下来双击默认最后修改路径为:C:\Window...

如何在 Azure 中均衡 Windows 虚拟机负载以创建具有高可用性的应用程序

负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性。 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性。 你将学习如何执行以下操作: 创建 Azu...

x86架构下虚拟机技术应用 PDF

  • 2007年07月06日 10:22
  • 370KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:虚拟机技术综述-3 应用程序虚拟机
举报原因:
原因补充:

(最多只允许输入30个字)