zoukankan      html  css  js  c++  java
  • 模拟器与虚拟机

    • 模拟器是什么

         emulator,中文一般译为模拟器。但实际上这个翻译是错误的,准确的翻译是仿真器。仿真器与模拟器的区别在于:前者是用软件实现硬件的行为,而后者仅仅是使某一软件的运行和输出在不同平台上没有太大区别。举个例子,如果在某个街机上有一个游戏软件需要在PC平台运行,仿真需要做的是在PC平台上实现一个软件能正确的完成街机硬件的功能,从而使游戏软件可以不进行任何修改的在这个PC平台上实现的软件上运行;而模拟需要做的是修改该游戏的源代码,从而使得游戏可以在PC上编译运行,只要该戏的画面和输出与街机上没有太大区别就可以,也就是所谓的移植。

    • 仿真器与虚拟机的区别

         简单的说,仿真器和虚拟机(Virtual Machine)几乎没有区别,至少实现方式是类同的。两者都是将被仿真平台(比如某一街机)上的机器码转译成目标平台(比如PC)上的机器码。当然一般情况下不需要做到精确仿真,甚至更夸张的晶体管级别的仿真,只需要做到指令级别的CPU仿真以及保证时序正确就可以,当然也包括图像和声音处理。一些高级的主机并不需要精确的时序,但需要正确的实现该高级主机的BIOS调用,OS API,GPU指令(如果有的话),甚至驱动等等。

    • 仿真器或虚拟机的实现方法

         实现方法主要就是将被仿真平台的CPU指令转译成目标平台的CPU指令。最简单的就是Interpreter(解释器),主要方法就是边转译边执行指令。速度更快的实现方式为Dynamic Compilation(动态编译),主要方法是先转译再执行指令。动态编译也有许多类似的名称,如Dynamic Recompilation(动态重编译,简写为Dynarec),Dynamic Binary Translation(动态二进制转译),Just-In-Time Compilation(即时编译)等等。
        另一种追求速度的实现方式是高级仿真(high-level emulation,简写为HLE)。其实现方式是利用平台的相似性,如被仿真平台和PC都使用OpenGL作为图形API,或者被仿真平台的图形API实现和OpenGL API很类似,那么就可以简单的利用OpenGL API来替换被仿真平台的图形API。这种方式会较大的提高运行速度,但也降低了精确度。

  • 相关阅读:
    程序员的进阶课-架构师之路(2)-数组
    程序员的进阶课-架构师之路(1)-数据结构与算法简介
    ASP.NET开发实战——(三)第一个ASP.NET应用《MyBlog》
    ASP.NET开发实战——(二)为什么使用ASP.NET
    ASP.NET开发实战——(一)开篇-用VS创建一个ASP.NET Web程序
    asp.net core 系列 12 选项 TOptions
    Linux编程 1 (文件系统路径说明, 目录结构说明)
    asp.net core 系列 9 三种运行环境和IIS发布
    asp.net core 系列 6 MVC框架路由(下)
    asp.net core 系列 4 注入服务的生存期
  • 原文地址:https://www.cnblogs.com/SSforME/p/2806147.html
Copyright © 2011-2022 走看看