tags:
- OS
如果你有一台Mac,运行苹果公司的MacOS操作系统,那么当你想使用一些仅支持Windows操作系统的软件时该怎么办呢?人们想到通过虚拟化物理硬件,在同一台主机上运行不同的操作系统(称为虚拟机)来解决这个问题。这种技术就是虚拟化(和操作系统四大特征中的虚拟化略有不同)。
在这些不同的操作系统的视角上,它们并不知道它们运行在虚拟化的物理硬件之上,那么,这些虚拟机如何才能知道这是梦境还是现实世界?
要运行多台不同的虚拟机,我们需要一个底层硬件作为支撑上层虚拟化的根基,也就是主机(Host)。然后,我们有虚拟机管理程序(Virtual Machine Manager, VMM),也叫hypervisor。VMM负责管理并向不同的虚拟机分配主机硬件的资源。具体来说,它会将底层的硬件进行抽象并向不同的虚拟机提供看上去像是主机的一个接口。这些虚拟机(guest)就会与VMM分配的虚拟的主机进行交互。
虚拟化技术实际上和Java虚拟机所做的事情差不多。Java承诺“编写一次,到处运行”(Write Once, Run Anywhere)。通过在编程语言和机器之间加一层虚拟机层来实现WORA。即使机器的架构有所不同,Java也可以通过在不同的机器上运行Java虚拟机,将相同的Java字节码运行在不同的平台上
尽管虚拟化和仿真很像,都创建一种环境使得软件能够运行在不同的硬件或系统上。但它们本质是不同的。我们所提到的虚拟机涉及在同一个物理硬件上创建多个不同的虚拟环境。每个虚拟环境(虚拟机)彼此隔离,每个虚拟环境中都运行着其自己的操作系统和应用。
而仿真是通过在一个系统上模拟另一个系统上的行为来运行另一个系统上的应用。和虚拟化相比,仿真的性能要慢得多,因为虚拟机直接在硬件上运行,而仿真需要复制原系统的行为,因而性能会很慢。
此外,虚拟机为我们带来另一个好事情就是当你使用虚拟机时,你可以挂起整个虚拟机。整个过程和挂起进程很相像,保存当前的状态,在之后再读取状态进行恢复(VM image)。
Hypervisor 有两种主要类型:Type 1(裸金属)和 Type 2(托管):
裸机虚拟机(Type-1, Hypervisor) : 直接安装在物理硬件上而不需要宿主操作系统。这种类型的虚拟机管理程序直接控制硬件资源并管理各个虚拟机。由于没有运行全功能宿主操作系统的额外开销,裸机虚拟机通常能提供更好的性能和更高的资源使用效率。
The hypervisor runs directly on and has full control over the hardware, but device driver implementations are provided by a special domain-0 (Dom0) OS. Other guest OSes are called domain-U (DomU). Guest kernel device requests are redirected to the Dom0 kernel.
Typically, the DomU kernels may need a few modifications to be able to fit in this model. This characteristic is called para-virtualization, meaning that it is OK to apply small modifications to the guest kernels and they do not need to work out-of-the-box as if without virtualization.
Sometimes, there are even special, minimal OS kernels written just to be used as these DomU kernels in type-1b VMs. They are called “unikernels”.
Examples of type-1b hypervisors include Xen 17.
宿主操作系统虚拟机(Type-2, Hosted) 是安装在已有宿主操作系统之上的软件。这类虚拟机依赖于宿主操作系统来管理硬件资源。虽然性能上可能略逊于裸机虚拟机,但安装和使用更为简便,且能在不同操作系统间提供更好的兼容性和灵活性。
Examples include VMware Workstation, Virtual Box, and QEMU (on Linux, possibly with KVM support).
Pure software emulators deliver poor performance as they add in an expensive layer of abstraction. Modern hypervisors, whichever type it belongs to, often take advantage of dedicated hardware support to provide more efficient virtualization if the guest ISA is the same as the host machine (e.g., running x86-64 VMs on an x86-64 platform).
For type-2 use cases, some host OSes like Linux also provides kernel-based virtual machine (KVM) support which allows emulators like QEMU to run more efficiently and “natively”.
虚拟机能够运行的关键就在于virtual CPU,VCPU并不执行二进制的程序,VCPU是guest所看到的CPU状态。我们现在知道虚拟机可以挂起并恢复,在虚拟机挂起的时候,虚拟机会以为程序还在运行,它所看到的CPU状态是运行的。然而,我们知道其实虚拟机看到的只是梦境。VCPU存储着虚拟机的状态,它是一个数据结构。VMM负责管理VCPU的状态。
当guest从挂起态恢复时,状态信息就会从VCPU中加载。
slow down the VM
Manual Install
Package Manager
Virtual Machines
Containerization