什么是虚拟机 Virtual Machine ?
Host 是一个跟 VM 紧密相关的概念。VM 毕竟是软件,所以必须要有真正的机器来运行它。上面运行了 VM 的真实机器,就叫做 Host ,宿主机。
总而言之,VM 个运行在真实机器上的软件,提供操作系统(在系统VM的情况下)或应用程序(在进程 VM的情况下)的运行环境。
VM 有什么用?
什么是 VM 聊完了,下面来聊 VM 能干些什么事。
第一个使用场景。当我的硬件 CPU 是 A 架构的,但是我要运行的程序只能在 B 架构的 CPU 上运行, VM 就会派上用场。
第二个使用场景。当我只能买得起一台计算机,但是需要同时运行多个操作系统。比如,我在我的硬件机器上安装了Linux 桌面版,现在我想要运行 Linux 服务器来托管我的 Web 应用,还需要一个 Windows 来测试 Web 应用。这样,我就可以选择一个可以安装到 Linux 上的 VM 软件,比如 Virtual Box,把它安装到我的电脑上,然后启动两个 VM 实例就可以运行我需要的另外两个操作系统了。
第三个使用场景。让我的程序可以在各种平台上运行。为了不用给每个平台都写一个版本的代码并且专门编译一下, 我需要在每个操作系统之上添加一层来磨平平台差异,这时候 VM 就可以作为这一层来使用。比如,我只要编写一次 Java 程序,然后就可以在安装了 JVM 的任何平台上运行程序了。
VM 在实际工作中被广泛使用,以上其实还不是所有情形。
区块链和 VM
VM 在区块链领域也很常用。
如果你也搞区块链,所以大概率是已经知道以太坊虚拟机(EVM)了。EVM 可以让我们在以太坊上运行智能合约。大家可以在 EVM 上运行用一种名为 Solidity 的语言编写的程序。这让我们想起了刚才提到的 JVM ,JVM 和 EVM 都是进程 VM。
Nervos CKB 区块链也有自己的 VM,名为 CKB-VM 。CKB-VM 运行智能合约的方式跟 EVM 不一样。CKB-VM不为特定高级语言编写的程序提供支持,而是一个模仿 RISC-V CPU 硬件的 System VM。[RISC-V](https://zhuanlan.zhihu.com/p/53565685)是一个开源 CPU 架构。这种方式的好处是,可以用我们想要的任何高级编程语言写智能合约,然后将它编译为 RISC-V CPU 的二进制格式,就可以运行了。挺 Cool 的。
现在对区块链上的虚拟机原理是不是清晰了一些了呢。
总结
关于 VM ,主体内容就是这些了。总结一下,VM 分为两种,系统 VM 和进程 VM 。EVM 可以归类为进程 VM ,CKB-VM 则属于系统 VM 。

