多用户机制,namespace机制

似乎按照运行平台分为:裸金属架构,寄居架构 又有一种分类是:容器虚拟化,全虚拟化,这里所谓的全和容器是指是否会虚拟化出完整的计算机资源还是仅仅面向应用 目前理解,以上只是两种不同的分类方案而已,并没有冲突的地方

kvm,云主机

一直让人迷惑的是,vmm和操作系统之间的关系。裸金属架构和寄居架构强调的是vmm是直接部署在硬件之上还是部署在操作系统之上,这样说的第一感觉就是vmm要么在操作系统之下,要么在操作系统之上,换言之,要么vmm被操作系统调用,要么操作系统被vmm调用。 分开来讨论,首先是寄居架构,vmm确实是作为一个程序运行在操作系统之上,就像普通的程序一样,这里并不难理解(参考VMware workstation)。此情况下,确实可以说操作系统被vmm调用(当然调用一词并不准确) 令人费解的是裸金属架构,vmm和操作系统到底是什么关系,kvm就属于裸金属架构下的一种vmm,按理说它是直接部署在硬件之上的,但是在使用时,为什么是借助于操作系统实现的。这里的问题在于我们或许忽略了操作系统也是直接部署在硬件之上的,操作系统和vmm同时部署在硬件之上。实际上此架构下,vmm实际上操作系统的一个子模块,或者说vmm是操作系统内核源码的一部分,二者是嵌套关系并非层级关系,这就是为什么在使用的kvm是通过操作系统进行安装的,安装的其实就是和vmm相关的模块

实际上在对全、半、硬件辅助虚拟化进行分类时,并没有考虑vmm和操作系统的关系,我们考虑的仅仅是谁来负责虚拟机到物理机的指令翻译工作,那么是不是说全、半、硬件辅助虚拟化都既可以采用裸金属架构,又可以采用寄居架构?

计算虚拟化

介绍 把物理主机上物理资源(CPU、内存I0外设), 通过虚拟化层抽象成超量/等量的逻辑资源(虚拟CPU、 虚拟内存虚拟IO设备) ,然后重新组合形成新的虚拟主机

需要注意的是这里把少量的物理资源虚拟化为大量的逻辑资源,但并不会导致物理资源无法响应的情况,这是因为物理资源多采用的是时分复用的技术,即使虚拟化后的逻辑资源要多于物理资源,但是并不会导致物理资源不足的情况

实现方式

  1. 全虚拟化:通过物理主机内核中的虚拟化引擎实现
  2. 半虚拟化:通过修改虚拟机内核引擎实现
  3. 硬件辅助虚拟化:通过硬件辅助实现

关于虚拟化的另一种分类方法:裸金属架构和寄居寄居架构。 实际考虑的是VMM(virtual machine monitor,虚拟机监控程序)是部署在硬件之上还是部署在操作系统之上

待修改图

CPU虚拟化

有需求才会有创造,这里遇到的问题是:虚拟机层面是异构的,无论是采用何种虚拟化架构,都一定会涉及到虚拟机指令到物理机可以理解的指令之间的翻译,而全虚拟化,半虚拟化和硬件辅助虚拟化的区别就在于是谁完成了翻译工作

内存虚拟化

IO设备虚拟化

为什么要分为用户态和内核态:内核态负责对底层硬件资源进行协调,避免用户态程序对资源的使用不均衡。同时是对于安全问题的考虑,计算机的设计者默认是不信任用户态程序的

存储虚拟化

这里的存储主要指的是外存,注意和内存虚拟化进行区分

网络虚拟化

网络设备/功能虚拟化(NFV)

网络架构虚拟化(SDN)

关于容器化和虚拟化

什么是 Linux 容器?

Reference