5 implementation emulation virtual-machine vm-implementation
我注意到一些模拟器和虚拟机使用动态重新编译.他们是怎么做到的?在C中我知道如何使用类型转换在ram中调用函数(虽然我从未尝试过)但是如何读取操作码并为其生成代码?该人是否需要预先制作组装块并将它们一起复制/批处理?是用C编写的汇编?如果是这样,您如何找到代码的长度?你如何解释系统中断?
-编辑-
系统中断以及如何(重新)编译数据是我最感兴趣的.经过更多的研究,我听说有一个人(没有源可用)使用js,读取机器代码,输出js源并使用eval来"编译" js来源.有趣.
听起来我必须了解目标平台机器代码才能动态重新编译
是的,一点没错。这就是为什么必须为每个体系结构重写 Java 虚拟机的部分内容(即 JIT)。
当您编写虚拟机时,您会想到特定的主机体系结构和特定的来宾体系结构。便携式虚拟机更适合称为模拟器,因为您将模拟来宾架构的每条指令(来宾寄存器将表示为主机变量,而不是主机寄存器)。
当来宾和主机架构相同时(例如 VMWare),您可以进行大量(相当简洁的)优化来加速虚拟化 - 今天我们所处的位置是,这种类型的虚拟机仅比虚拟机慢一点直接在处理器上运行。当然,它极其依赖于体系结构 - 从头开始重写大部分 VMWare 可能比尝试移植它更好。
| 归档时间: |
|
| 查看次数: |
2181 次 |
| 最近记录: |