以下内容有些概念比较有争议,甚至维基百科都有自相矛盾的地方。大概整理了一下我觉得最合理的内容,仅供参考。
首先考考大家,virtual是什么意思?可能有人会这么回答:既然Virtual Machine是虚拟机,那么virtual肯定是虚拟的意思啦。不过如果大家真的去查字典了,结果可能出人意料。这个词语为什么又能翻译成「实际」又能翻译成「虚拟」,网上的讨论已经有很多了。楼主自己对这个词的解释:
一个「virtual 某物」是一个或一些东西,他与「某物」十分相似(有太多相通之处),以至于我们可以直接把他当做「某物」去看待或利用。虽然大家知道严格来说「virtual 某物」确实不是「某物」,但是使用这个词是希望读者去关注「virtual 某物」和「某物」之间的相似之处。(也就是说virtual的侧重点应该在「拟」而不是「虚」。)
大家可以自己试试一些例句,看看用这个解释能不能读通。
言归正传。所谓Virtual Machine就是提供一个类似真正计算机的操作环境,但是却是不同于真正计算机的构造。不同的VM的构造、使用方法和用途都有差异。创建VM来运行原本需要在真机上使用的资源,这种技术被称为Virtualization(通常翻译为「虚拟化」)。Virtualization的种类有很多,通常名称和他所提供的层次相关,比如Hardware Virtualization是提供一个硬件平台(用于运行操作系统);OS Virtualization是提供操作系统(用于运行程序);Desktop Virtualization是提供到桌面环境等。有些VM从设计之初就是没有对应的真机的,这种情况通常就不叫Virtualization了。
下面是一些常见品种的VM(请注意他们所提供的层次的区别):
Hypervisor:又称Virtual Machine Monitor/VMM。他所创建和管理的就是我们通常说的,狭义的VM,即在一个操作系统中模拟或者重用硬件来运行另一个操作系统。Hypervisor使用本机的机器码操作硬件。(Hypervisor的名称源自Supervisor,是内核的一个常用别名,Hypervisor即意为Supervisor上的Supervisor)
Emulator:模拟器。和Hypervisor的区别是Hypervisor运行的VM和宿主机会是相同CPU架构,而Emulator能用来运行其他硬件平台的系统或程序。GNU/Linux上比较有名的Emulator是QEMU。比如安卓模拟器、掌机模拟器、街机模拟器也都属于Emulator。有人说Emulator应该翻译成仿真器,来区别做科学和现实世界模拟以及模拟类游戏的Simulator,其实我觉得这两个词本身使用范围重叠不大,没必要吹毛求疵。
Container:容器。建立在操作系统原本的用户空间之外的分离的用户空间(即进程可以感知到的领域),用于减少不同资源的互相冲突。这通常是由操作系统的内核提供的功能。不同用户空间的资源可以是相互隔离的,也可以共用。一个完全隔绝的容器称为沙箱(Sandbox),用途是在其中测试一些危险的或者功能难以预料的程序来观察他的行为,同时避免他对真实系统产生危害。
Managed Runtime Environment (MRE):一些编程语言为了实现跨平台运行,并不让程序直接使用操作系统提供的组件,而是专门设计一个统一的运行环境,让程序在其中运行。他把统一的程序代码翻译成各个平台的专用代码,这样编写跨平台程序时只需要适配唯一的MRE,而不需要在意各个平台的差异了。比较有名的实例是java的JVM(Java Virtual Machine)。
之后是课后习题环节
以下所述程序或技术是VM吗?是哪种类型的VM呢?
1、WoW64(Windows 32-bit on Windows 64-bit。在64位Windows中运行32位程序所需组件。Windows自带。)
2、LLVM(编译器,以及各种用于支持程序创造和运行的基础设施的集合。全称:Low-Level Virtual Machine)
3、wine(在GNU/Linux等操作系统上运行Windows应用的工具。递归缩写:Wine Is Not an Emulator)
4、python(流行的编程语言。他的解释器或编译器有多种实现:CPython(官方)、PyPy、Psyco等。)
5、chroot(切换根目录。GNU/Linux上常用的一个工具,可用于调用另一个已安装系统中的资源。)
6、flash(过时的网页插件,使用名为ActionScript的编程语言。)
当然毕竟VM的这些概念本身就有争议,因此无关对错,也没有什么标准答案,有想法的坛友可以随意发挥。
学习了
👍🏻👍🏻👍🏻
感谢分享
课后习题的参考答案:https://bbs.deepin.org/post/256413
Popular Ranking
Popular Events
以下内容有些概念比较有争议,甚至维基百科都有自相矛盾的地方。大概整理了一下我觉得最合理的内容,仅供参考。
首先考考大家,virtual是什么意思?可能有人会这么回答:既然Virtual Machine是虚拟机,那么virtual肯定是虚拟的意思啦。不过如果大家真的去查字典了,结果可能出人意料。这个词语为什么又能翻译成「实际」又能翻译成「虚拟」,网上的讨论已经有很多了。楼主自己对这个词的解释:
一个「virtual 某物」是一个或一些东西,他与「某物」十分相似(有太多相通之处),以至于我们可以直接把他当做「某物」去看待或利用。虽然大家知道严格来说「virtual 某物」确实不是「某物」,但是使用这个词是希望读者去关注「virtual 某物」和「某物」之间的相似之处。(也就是说virtual的侧重点应该在「拟」而不是「虚」。)
大家可以自己试试一些例句,看看用这个解释能不能读通。
言归正传。所谓Virtual Machine就是提供一个类似真正计算机的操作环境,但是却是不同于真正计算机的构造。不同的VM的构造、使用方法和用途都有差异。创建VM来运行原本需要在真机上使用的资源,这种技术被称为Virtualization(通常翻译为「虚拟化」)。Virtualization的种类有很多,通常名称和他所提供的层次相关,比如Hardware Virtualization是提供一个硬件平台(用于运行操作系统);OS Virtualization是提供操作系统(用于运行程序);Desktop Virtualization是提供到桌面环境等。有些VM从设计之初就是没有对应的真机的,这种情况通常就不叫Virtualization了。
下面是一些常见品种的VM(请注意他们所提供的层次的区别):
Hypervisor:又称Virtual Machine Monitor/VMM。他所创建和管理的就是我们通常说的,狭义的VM,即在一个操作系统中模拟或者重用硬件来运行另一个操作系统。Hypervisor使用本机的机器码操作硬件。(Hypervisor的名称源自Supervisor,是内核的一个常用别名,Hypervisor即意为Supervisor上的Supervisor)
Emulator:模拟器。和Hypervisor的区别是Hypervisor运行的VM和宿主机会是相同CPU架构,而Emulator能用来运行其他硬件平台的系统或程序。GNU/Linux上比较有名的Emulator是QEMU。比如安卓模拟器、掌机模拟器、街机模拟器也都属于Emulator。有人说Emulator应该翻译成仿真器,来区别做科学和现实世界模拟以及模拟类游戏的Simulator,其实我觉得这两个词本身使用范围重叠不大,没必要吹毛求疵。
Container:容器。建立在操作系统原本的用户空间之外的分离的用户空间(即进程可以感知到的领域),用于减少不同资源的互相冲突。这通常是由操作系统的内核提供的功能。不同用户空间的资源可以是相互隔离的,也可以共用。一个完全隔绝的容器称为沙箱(Sandbox),用途是在其中测试一些危险的或者功能难以预料的程序来观察他的行为,同时避免他对真实系统产生危害。
Managed Runtime Environment (MRE):一些编程语言为了实现跨平台运行,并不让程序直接使用操作系统提供的组件,而是专门设计一个统一的运行环境,让程序在其中运行。他把统一的程序代码翻译成各个平台的专用代码,这样编写跨平台程序时只需要适配唯一的MRE,而不需要在意各个平台的差异了。比较有名的实例是java的JVM(Java Virtual Machine)。
之后是课后习题环节
以下所述程序或技术是VM吗?是哪种类型的VM呢?
1、WoW64(Windows 32-bit on Windows 64-bit。在64位Windows中运行32位程序所需组件。Windows自带。)
2、LLVM(编译器,以及各种用于支持程序创造和运行的基础设施的集合。全称:Low-Level Virtual Machine)
3、wine(在GNU/Linux等操作系统上运行Windows应用的工具。递归缩写:Wine Is Not an Emulator)
4、python(流行的编程语言。他的解释器或编译器有多种实现:CPython(官方)、PyPy、Psyco等。)
5、chroot(切换根目录。GNU/Linux上常用的一个工具,可用于调用另一个已安装系统中的资源。)
6、flash(过时的网页插件,使用名为ActionScript的编程语言。)
当然毕竟VM的这些概念本身就有争议,因此无关对错,也没有什么标准答案,有想法的坛友可以随意发挥。