虚拟化技术基础知识

关于虚拟化技术的相关知识,例如KVM,QEMU,网络上的现有介绍、相关blog、课程视频也有很多,零零整整,对于初学者来说,需要我们广泛涉略,形成自己的总结笔记。本篇博文记录我作为一个零基础小白对现有虚拟化资料学习后的学习笔记,“但当涉猎,见往事耳”,愿与大家一起进步。因本人初学,如有错误,欢迎大家批评指正!

摘要:本文介绍了虚拟化技术的基本概念和基本要求。随后引出由于早期的x86架构不支持虚拟化,各家软件厂商只能通过软件模拟的形式来实现虚拟化,其代表是早期的VMware WorkStation、QEMU和Xen。

不过纯粹依靠软件的方式毕竟有性能的瓶颈,Intel和AMD及时推出了CPU硬件层面的虚拟化支持,软件厂商迅速跟进适配,极大的改善了虚拟化的性能体验。这一时期的代表有新版本的VMware WorkStation、Hyper-V、KVM等。

目录

1、什么是虚拟化,虚拟化的思想?

2、虚拟机

3、虚拟化技术分类

4、系统虚拟化发展历史

5、进一步理解系统虚拟化

6、(系统)虚拟化实现方式

 6.1 纯软件仿真

6.2 虚拟化层翻译(重点)

6.2.1 全虚拟化

 趣味故事

6.2.2 半虚拟化

趣闻故事

6.2.3 硬件辅助的虚拟化(效率高)

趣味故事

硬件辅助虚拟化的发展(以KVM为代表)

6.3 容器技术(LXC和Docker)

既然要学习虚拟化,就不得不提“云计算”,虚拟化技术是云计算欣欣向荣的一个重要的功臣,可以说,没有虚拟化技术,就没有云计算。

云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒钟)完成对数以万计的数据的处理,从而达到强大的网络服务。

现阶段所说的云服务已经不单单是一种分布式计算,而是分布式计算、效用计算、负载均衡、并行计算、网络存储、热备份冗杂和虚拟化等计算机技术混合演进并跃升的结果。

接下来开始重点介绍虚拟化技术

1、什么是虚拟化,虚拟化的思想?

维基百科中的解释是这样的:虚拟化(技术)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。

虚拟化的主要思想是:通过分层将底层的复杂、难用的资源虚拟抽象成简单、易用的资源,提供给上层使用。计算机发展的过程本质也是一个不断虚拟的过程,将底层复杂的接口转换成上层容易使用的接口。

2、虚拟机

理论上来说,只要能提供一个执行环境,完成用户指定任务的对象都可以叫做机器。

虚拟机介绍
进程-最简单的虚拟机(图2-1)

进程可以看做是一组资源的集合,有自己独立的进程地址空间以及独立的CPU和寄存器,执行程序员编写的指令,完成一定的任务。一个进程在执行指令,访问内存时并不会影响其他进程。操作系统把CPU按照时间分配复用,把内存按照空间分配复用,通过管理底层资源,使得进程都能够使用整个计算机的物理资源,每个进程都认为自己拥有整个机器。

操作系统可以创建很多个进程,每一个进程都可以看做是一个独立的虚拟机。

模拟器(图2-2)

模拟器可以使为一种硬件指令集(Instruction Set Architecture,ISA)编译的程序运行在另一种硬件指令集上。应用程序在源ISA(如ARM)上被编译出来,在模拟器的帮助下,运行在不同的目标ISA(比如x86)上。

模拟器可以通过解释来实现,即对程序的源ISA指令一条一条进行分析,然后执行相应的ISA指令上的操作。模拟器也可以通过二进制翻译实现,即首先将程序中所有的源ISA指令翻译成目标ISA上具有同样功能的指令,然后在目标ISA指令机器上执行。

典型的模拟器有:QEMU的用户态模拟、Bochs模拟器等。

高级语言虚拟机(图2-3)

将源ISA和目标ISA完全分离开。在高级语言虚拟机中,通常会设计一种全新的虚拟ISA,并在其中定义新的指令集、数据操作、寄存器的使用等类似于物理ISA中的规范。不同于普通程序和模拟器运行的程序,高级语言虚拟机的程序中没有任何具体物理ISA指令字节,而是自己定义的虚拟指令字节,通常称为字节码。

任何需要运行这种虚拟ISA指令的物理ISA平台都需要实现一个虚拟机,该虚拟机能够执行虚拟机ISA指令到物理ISA指令的转化。

典型的高级语言虚拟机有:JVM虚拟机、Python虚拟机

补充:在高级语言虚拟机中,虚拟ISA是公开的规范,每个人都可以获得,并且可以写出反编译工具,通过字节码还原程序源码。因此使用java语言的程序通常需要进行代码混淆。假设我们自己定义一个虚拟的ISA,不公开其规范,并且不时修改这些规范,然后将自带的虚拟机和字节码一起分发,这样使用基于物理ISA的反编译工具就无法还原出程序的汇编代码。

 图2-1 进程虚拟机

  图2-2 模拟器原理

 图2-3 高级语言虚拟机

   进程、模拟器、高级语言虚拟机提供的都是指令的执行环境,而系统虚拟机提供的是一个完整的系统环境。在这个环境中,能够运行多个用户的多个进程。通过系统虚拟化技术,能够在单个宿主机硬件平台上运行多个虚拟机,每个虚拟机都有着完整的虚拟机硬件,如虚拟的CPU、内存、虚拟的外设等,并且虚拟机之间能够实现完整的隔离。

3、虚拟化技术分类

  1. 系统虚拟化
  2. 存储虚拟化
  3. 网络虚拟化
  4. GPU虚拟化
  5. 软件虚拟化
  6. 硬件支持虚拟化

本博客主要记录系统虚拟化相关内容。后面所述“虚拟化”无特殊说明均指“系统虚拟化”。

4、系统虚拟化发展历史

系统虚拟化:

1、这种虚拟化通常表现为在单一系统上运行多个操作系统

2、这些虚拟操作系统同时运行,每个操作系统又是相互独立

  图3-1 系统虚拟机原理

5、进一步理解系统虚拟化

一句话概括(系统)虚拟化:一套硬件设备上,同时运行多个操作系统

(系统)虚拟化目的:将物理资源逻辑化,摆脱物理资源的束缚,提高物理资源利用率

Hypervisor是一个软件层或子系统:

        也称为VMM(Virtual Machine Monitor,虚拟机监视器)

        用于管理全局物理资源,VMM之于虚拟机如同操作系统之于进程,VMM利用时分复用或者空分复用的办法将硬件资源在各个虚拟机之间进行分配

补充:为什么需要VMM监控上面的VM?

虚拟化实现的目标看起来很简单,就是原来在一套硬件上运行一个操作系统,现在在一套硬件上运行多个操作系统而已,但是实现起来是非常复杂的,具有一定的技术挑战。例如:最初x86的CPU并没有考虑虚拟化(虚拟化是在x86架构之后才提出来的,这是一切方法被提出的根本原因!)。

因此,想要实现虚拟化:实现VMM即可

VMM也称为host OS 宿主机,OS1,OS2,OS3也称为guest OS客户机

虚拟机厂商需要实现的是host OS,guest OS是我们自己根据需要安装的

 Hypervisor分为两类:I型虚拟化和II型虚拟化

Type I: 直接凌驾于硬件之上,构建出多个隔离的操作系统环境:VMware ESXi

Type II: 依赖于宿主操作系统,在其上构建出多个隔离的操作系统环境:VMware WorkStation

6、(系统)虚拟化实现方式

1、纯软件仿真

2、虚拟化层翻译

3、容器技术

 6.1 纯软件仿真

通过模拟完整的硬件环境来虚拟化客户机

模拟x86,ARM,PowerPC等多种CPU

缺点:效率较低

代表产品或方案:QEMU,Bochs,PearPC

6.2 虚拟化层翻译(重点)

一个典型的做法是——陷阱 & 模拟技术:简单来说就是正常情况下直接把虚拟机中的代码指令放到物理的CPU上去执行,一旦执行到一些敏感指令,就触发异常,控制流程交给VMM,由VMM来进行对应的处理,以此来营造出一个虚拟的计算机环境。

如图是x86处理器的Ring0-Ring3四个“环”,操作系统内核代码运行在最高权限的Ring0状态,应用程序工作于最外围权限最低的Ring3状态,剩下的Ring1和Ring2主流的操作系统都基本上没有使用。

这里所说的权限,有两个层面的约束:

  • 能访问的内存空间
  • 能执行的特权指令

关注第二点:特权指令

CPU指令集中有一些特殊的指令,用于进行硬件I/O通信、内存管理、中断管理等等功能,这一些指令只能在Ring0状态下执行,被称为特权指令。这些操作显然是不能让应用程序随便执行的。处于Ring3工作状态的应用程序如果尝试执行这些指令,CPU将自动检测到并抛出异常。

虚拟化是将计算资源进行逻辑或物理层面的切割划分,构建出一个个独立的执行环境。按照陷阱 & 模拟手段,可以让虚拟机中包含操作系统在内的程序统一运行在低权限的Ring3状态下,一旦虚拟机中的操作系统进行内存管理、I/O通信、中断等操作时,执行特权指令,从而触发异常,物理机将异常派遣给VMM,由VMM进行对应的模拟执行。

这本来是一个实现虚拟化很理想的模式,不过x86架构的CPU在这里遇到了一个跨不过去的坎。到底是什么问题呢?

回顾一下前面描绘的理想模式,要这种模式能够实现的前提是执行敏感指令的时候能够触发异常,让VMM有机会介入,去模拟一个虚拟的环境出来。

但现实是,x86架构的CPU指令集中有那么一部分指令不是特权指令,Ring3状态下也能够执行,但这些指令对于虚拟机来说却是敏感的不能让它们直接执行。一旦执行,没法触发异常,VMM也就无法介入,这结果将导致虚拟机中的代码指令出现无法预知的错误,更严重的是影响到真实物理计算机的运行,虚拟化所谓的安全隔离、等价性也就无从谈起。

怎么解决这个问题,让x86架构CPU也能支持虚拟化呢?

6.2.1 全虚拟化

 基于二进制翻译的全虚拟化:

Hypervisor运行在Ring0,Guest OS运行在Ring1

机制:异常、捕获,翻译

eg:VMware Workstation,QEMU,Virtual PC

VMware和QEMU走出了两条不同的路。

VMware创造性的提出了一个二进制翻译技术。VMM在虚拟机操作系统和宿主计算机之间扮演一个桥梁的角色,将虚拟机中的要执行的指令“翻译”成恰当的指令在宿主物理计算机上执行,以此来模拟执行虚拟机中的程序。可以简单理解成Java虚拟机执行Java字节码的过程,不同的是Java虚拟机执行的是字节码,而VMM模拟执行的是CPU指令。

另外也并非所有的指令都是模拟执行的,VMware在这里做了不少的优化,对一些“安全”的指令,就让它直接执行。所以VMware的二进制翻译技术也融合了部分的直接执行。

对于虚拟机中的操作系统,VMM需要完整模拟底层的硬件设备,包括处理器、内存、时钟、I/O设备、中断等等,换句话说,VMM用纯软件的形式“模拟”出一台计算机供虚拟机中的操作系统使用。

这种完全模拟一台计算机的技术也称为全虚拟化,这样做的好处显而易见,虚拟机中的操作系统感知不到自己是在虚拟机中,代码无需任何改动,直接可以安装。而缺点也是可以想象:完全用软件模拟,转换翻译执行,性能堪忧!

而QEMU则是完全软件层面的“模拟”,乍一看和VMware好像差不多,不过实际本质是完全不同的。VMware是将原始CPU指令序列翻译成经过处理后的CPU指令序列来执行。而QEMU则是完全模拟执行整个CPU指令集,更像是“解释执行”,两者的性能不可同日而语。

 趣味故事

QEMU是主机上的一个VMM,通过动态二进制翻译来模拟 CPU,内存,硬盘,网卡等外设。VM认为自己是直接和硬件打交道的,但是实际上VM是和QEMU这个仿真模拟器模拟出来的设备打交道。当VM需要使用硬件的时候,QEMU将VM调用硬件的操作,通过二进制翻译成HOST OS的指令,之后交给在真正的硬件处理。(由于所有虚拟机调用硬件的指令都需要将经过QEMU的翻译,所以效率较低,但是也是可以实现虚拟化的)

如果用户态程序做事情,就将扳手掰到第3等级,一旦要申请使用更多的资源,就需要申请将扳手掰到第0等级,内核才能在高权限访问这些资源,申请完资源,返回到用户态,扳手再掰回去。

这个程序一直非常顺利的运行着,直到虚拟机的出现。

如果大家用过Vmware桌面版,你可以用这个虚拟化软件创建虚拟机,在虚拟机里面安装一个Linux或者windows,外面的操作系统也可以是Linux或者Windows。

当你使用虚拟机软件的时候,和你的excel一样,是一个普通的应用。

当你进入虚拟机的时候,虚拟机里面的excel也是一个普通的应用。

但是当你设身处地的站在虚拟机里面的内核的角度思考一下人生,你就困惑了,我到底个啥?

在硬件上的操作系统来看,我是一个普通的应用,只能运行在用户态。可是我是个内核啊,应该运行在内核态,当虚拟机里面的excel要访问网络的时候,向我请求,我的代码就要努力的去操作网络资源,我努力,但是我做不到,我没有权限!

虚拟化层,也就是Vmware需要帮我解决这个问题。

第一种方式,全虚拟化,其实就是骗我。虚拟化软件(QEMU)模拟假的CPU,内存,网络,硬盘给我,让我自我感觉良好,终于又像个内核了。

但是真正的工作模式是这样的:

        虚拟机内核:我要在CPU上跑一个指令!

        QEMU:没问题,你是内核嘛,可以跑

        QEMU去找物理机内核:报告管家,我管理的虚拟机里面的一个要执行一个CPU指令,帮忙来一小段时间空闲的CPU时间,让我代他跑个指令。

        物理机内核:你等着,另一个跑着呢。好嘞,他终于跑完了,该你了。

        QEMU:我代他跑,终于跑完了,出来结果了

        QEMU转头给虚拟机内核:跑完了,结果是这个,我说你是内核吧,绝对有权限,没问题,下次跑指令找我啊。

        虚拟机内核:看来我真的是内核呢。可是哥,好像这点指令跑的有点慢啊。

        QEMU:这就不错啦,好几个排着队跑呢。

内存的申请模式如下:

        虚拟机内核:我启动需要4G内存,我好分给我上面的应用。

        QEMU:没问题,才4G,你是内核嘛,马上申请好。

        QEMU转头给物理机内核:报告,管家,我启动了一个虚拟机,需要4G内存,给我4个房间呗。

        物理机内核:怎么又一个虚拟机啊,好吧,给你90,91,92,93四个房间。

        QEMU转头给虚拟机内核:内存有了,0,1,2,3这个四个房间都是你的,你看,你是内核嘛,独占资源,从0编号的就是你的。

        虚拟机内核:看来我真的是内核啊,能从头开始用。那好,我就在房间2的第三个柜子里面放个东西吧。

        QEMU:要放东西啊,没问题。心里想:我查查看,这个虚拟机是90号房间开头的,他要在房间2放东西,那就相当于在房间92放东西。

        QEMU转头给物理机内核:报告,管家,我上面的虚拟机要在92号房间的第三个柜子里面放个东西。

网络和硬盘也是类似,都是虚拟化软件( QEMU)模拟一个给虚拟机内核看的,其实啥事儿都需要虚拟化软件转一遍。

这种方式一个坏处,就是慢,往往慢到不能忍受

6.2.2 半虚拟化

半虚拟化(超虚拟化、操作系统辅助虚拟化):

Hypervisor运行在Ring0

Guest OS不能直接运行在Ring0,需要修改Guest OS内核,将运行在Ring0上的指令转为调用Hypervisor

Guest OS上的APP运行在Ring3

eg:Xen

Xen早期是在x86架构上直接完成的虚拟化,需要修改虚拟机内部的操作系统,使得Xen的整个VMM非常复杂,缺陷也比较多

前面说由于敏感指令的关系,全虚拟化的VMM需要捕获到这些指令并完整模拟执行这个过程,实现既满足虚拟机操作系统的需要,又不至于影响到物理计算机。

但说来简单,这个模拟过程实际上相当的复杂,涉及到大量底层技术,并且如此模拟费时费力。

而试想一下,如果把操作系统中所有执行敏感指令的地方都改掉,改成一个接口调用(HyperCall),接口的提供方VMM实现对应处理,省去了捕获和模拟硬件流程等一大段工作,性能将获得大幅度提升。

这就是半虚拟化,这项技术的代表就是Xen,一个诞生于2003年的开源项目。

这项技术一个最大的问题是:需要修改gest OS内核,做相应的适配工作。这对于像Linux这样的开源软件还能接受,充其量多了些工作量罢了。但对于Windows这样闭源的商业操作系统,修改它的代码,无异于痴人说梦。

趣闻故事

为了取得更高的性能,让虚拟机内核从代码层面就重新定位自己的身份,不能像访问物理机一样访问网络或者硬盘,而是用一种特殊的方式:我知道我不是物理机内核,我知道我是虚拟机,我没那么高的权限,我很可能和很多虚拟机共享物理资源,所以我要学会排队,我写硬盘其实写的是一个物理机上的文件,那我的写文件的缓存方式是不是可以变一下,我发送网络包,根本就不是发给真正的网络设备,而是给虚拟的设备,我可不可以直接在内存里面拷贝给他,等等。

一旦我知道我不是物理机内核,痛定思痛,只好重新认识自己,反而能找出很多方式来优化我的资源访问。

这叫做类虚拟化或者半虚拟化。

6.2.3 硬件辅助的虚拟化(效率高)

核心思想:为CPU本身增加对虚拟化的支持

Intel VTAMD-V创建一个新的Ring-1单独给Hypervisor使用

Guest OS 可以直接使用Ring0无需修改

eg:VMware ESXi,Microsoft Hyper-V,Xen3.0,KVM

硬件辅助虚拟化细节较为复杂,简单来说,新一代CPU在原先的Ring0-Ring3四种工作状态之下,再引入了一个叫工作模式的概念,有VMX root operation 和 VMX non-root operation 两种模式,每种模式都具有完整的Ring0-Ring3四种工作状态,前者是VMM运行的模式,后者是虚拟机中的OS运行的模式。

VMM运行的层次,有些地方将其称为Ring -1,VMM可以通过CPU提供的编程接口,配置对哪些指令的劫持和捕获,从而实现对虚拟机操作系统的掌控。

换句话说,原先的VMM为了能够掌控虚拟机中代码的执行,不得已采用“中间人”来进行翻译执行,现在新的CPU告诉VMM:不用那么麻烦了,你提前告诉我你对哪些指令哪些事件感兴趣,我在执行这些指令和发生这些事件的时候就通知你,你就可以实现掌控了。完全由硬件层面提供支持,性能自然高了不少。

上面只是硬件辅助虚拟化技术的一个简单理解,实际上还包含更多的要素,提供了更多的便利给VMM,包括内存的虚拟、I/O的虚拟等等,让VMM的设计开发工作大大的简化,VMM不再需要付出昂贵的模拟执行成本,整体虚拟化的性能也有了大幅度的提升

Intel和AMD在2005年开始在CPU层面提供对系统虚拟化的支持,叫做硬件虚拟化。Intel在x86指令集的基础上增加了一套VMX扩展指令VT-x,为CPU增加了新的运行模式,完成了x86虚拟化漏洞的修补。通过新的硬件虚拟化指令,可以非常方便的构造VMM,并且x86虚拟机中的代码能够原生的运行在物理CPU上。此外还有,AMD的AMD-v系列技术。

趣味故事

为了让虚拟化软件(VMM)不当传话筒,还是要让虚拟机内核正视自己的身份,你不是物理机,你是虚拟机。

但是怎么解决权限等级的问题呢?于是Intel的VT-x和AMD的AMD-V从硬件层面帮上了忙。另弄一个新的标志位,表示当前是在虚拟机状态下,还是真正的物理机内核下。

对于虚拟机内核来讲,只要将标志位设为虚拟机状态,则可以直接在CPU上执行大部分的指令,不需要虚拟化软件在中间转述,除非遇到特别敏感的指令,才需要将标志位设为物理机内核态运行,这样大大提高了效率。

所以安装虚拟机的时候,务必要将物理CPU的这个标志位打开,是否打开对于Intel可以查看grep "vmx" /proc/cpuinfo,对于AMD可以查看grep "svm" /proc/cpuinfo

这叫做硬件辅助虚拟化。

硬件辅助虚拟化的发展(以KVM为代表)

有了硬件辅助虚拟化的加持,虚拟化技术开始呈现井喷之势。这其中在云计算领域声名鹊起的当属开源的KVM技术了。

KVM全称for Kernel-based Virtual Machine,意为基于内核的虚拟机。

在虚拟化底层技术上,KVM和VMware后续版本一样,都是基于硬件辅助虚拟化的实现。不同的是VMware作为独立的第三方软件可以安装在Linux、Windows、MacOS等多种不同的操作系统之上,而KVM作为一项虚拟化技术已经集成到Linux内核之中,可以认为Linux内核本身就是一个HyperVisor,这也是KVM名字的含义,因此该技术只能在Linux服务器上使用

KVM本身基于硬件辅助虚拟化(通过内核模块kvm.ko来实现核心虚拟化功能),仅仅实现CPU和内存的虚拟化,有了KVM之后,Guest OS的CPU指令不用再经过QEMU转译便可直接运行,大大提高了运行速度。但一台计算机不仅仅有CPU和内存,还需要各种各样的I/O设备,所以它必须结合QEMU才能构成一个完整的虚拟化技术。这个时候,QEMU就和KVM搭上了线,经过改造后的QEMU,负责外部设备的虚拟,KVM负责底层执行引擎和内存的虚拟,两者彼此互补,成为新一代云计算虚拟化方案的宠儿(称为KVM-QEMU架构)。 

注:在x86架构CPU的硬件辅助虚拟化技术诞生之前,QEMU就已经采用全套软件模拟的办法来实现虚拟化,只不过这种方案下的执行性能非常低下(全虚拟化)。

 QEMU现在的主要用途已经不是作为一个模拟器了,而是作为以 QEMU-KVM为基础的为云计算服务的系统虚拟化软件。不仅仅KVM将 QEMU作为应用层组件,Xen后来支持的硬件虚拟机也使用 QEMU作为其用户态组件来完成虚拟机的设备模拟。

6.3 容器技术(LXC和Docker)

 一种轻量级/操作系统虚拟化方式,由Linux内核支持

起源:chroot系统调用,对当前程序及其子进程改变根目录

优势:更快的交付和部署、更高效的虚拟化、更轻松的迁移和扩展、更简单的管理

无论是基于翻译和模拟的全虚拟化技术、半虚拟化技术,还是有了CPU硬件加持下的全虚拟化技术,其虚拟化的目标都是一台完整的计算机(即:系统虚拟化),拥有底层的物理硬件、操作系统和应用程序执行的完整环境。而虚拟机中的程序或许只是想要一个单独的执行执行环境,不需要虚拟出一个完整的计算机来。

不同于虚拟化技术要完整虚拟化一台计算机,容器技术更像是操作系统层面的虚拟化,它只需要虚拟出一个操作系统环境。

LXC技术就是这种方案的一个典型代表,全称是LinuX Container,通过Linux内核的Cgroups技术和namespace技术的支撑,隔离操作系统文件、网络等资源,在原生操作系统上隔离出一个单独的空间,将应用程序置于其中运行。举个例子,一套原来是三居室的房子,被改造成三个一居室的套间,每个一居室套间里面都配备了卫生间和厨房,对于住在里面的人来说就是一套完整的住房。

Docker技术底层原理与LXC并无本质区别,甚至在早期Docker就是直接基于LXC的高层次封装。Docker在LXC的基础上更进一步,将执行执行环境中的各个组件和依赖打包封装成独立的对象,更便于移植和部署。

容器技术的好处是轻量,所有隔离空间的程序代码指令不需要翻译转换,就可以直接在CPU上执行,大家底层都是同一个操作系统,通过软件层面上的逻辑隔离形成一个个单独的空间。

容器技术的缺点是安全性不如虚拟化技术高,毕竟软件层面的隔离比起硬件层面的隔离要弱得多。隔离环境系统和外面的主机共用的是同一个操作系统内核,一旦利用内核漏洞发起攻击,程序突破容器限制,实现逃逸,危及宿主计算机,安全也就不复存在。

记在最后:这篇博文严格来说只是找到了虚拟化的“门”,并不算是“入了门”,笔者接下来准备将调研重点放在“ QEMU”上,具体包括 QEMU的二进制翻译实现原理,安装,代码阅读等。

君子以坦荡立于世间,必将步步生花,一路繁华,加油!

注:本篇博文内容是作者对网上的众多资料学习后,形成的阅读笔记,现将部分参考资料备注如下:

QEMU/KVM源码解析与应用 -- 李强 -京东阅读-在线阅读

开源虚拟化KVM入门(KVM架构+KVM基本管理)视频课程【共34课时】_虚拟化课程-51CTO学堂

我是虚拟机内核我困惑?!

懂了!VMware、KVM、Docker原来是这么回事儿 - 知乎

QEMU/KVM源码解析与应用(第一章)_都怪这夜色的博客-CSDN博客_qemukvm源码解析与应用pdf

QEMU-KVM介绍_虚拟化系列视频课程(二)------KVM虚拟机实战篇_虚拟化视频-51CTO学堂Qemu,KVM,Virsh傻傻的分不清

  • 29
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值