软件虚拟化 vs 硬件虚拟化

本篇文章从这张图片开始
在这里插入图片描述

大家应该都听过毛不易的《消愁吧》,里面有句歌词是:一杯敬朝阳,一杯敬月光…我觉得人真的要敬畏未知,不然容易闹出笑话来,比如这位网友…此时我又想起了韩寒的一句话:人还是要多读书,才能不丢人

CPU虚拟化,是一种硬件虚拟化技术,是由CPU提供的!你们经常用的docker、k8s,是一种软件虚拟化技术,是由Linux内核提供的。本篇文章,跟大家展开说说硬件虚拟化vs软件虚拟化

不论是软件虚拟化技术,还是硬件虚拟化技术,它们诞生的最直接原因都是给创建虚拟机提供基础设施。早期,是没有硬件虚拟化技术的,只有软件虚拟化技术。你们用过VMware吗,早期,它也是基于软件虚拟化技术实现的,今天的VMware,纯纯的基于硬件虚拟化技术实现
在这里插入图片描述

Linux平台下的qemu,你可以选择让它基于软件虚拟化技术运行,或者硬件虚拟化技术运行,开关就是个参数:-enable-kvm

如果qemu不加参数-enable-kvm,它是如何运行的呢?它自己需要模拟解析CPU指令,比如CPU的mov指令
在这里插入图片描述

这里只是举个例子,qemu内部实际使用的是性能更高的解决方案:TCG,这个技术有点类似Java虚拟机JVM的模板解释器或即时编译JIT,上面的伪代码类似JVM的字节码解释器

TCG的工作流程是这样的
在这里插入图片描述

是不是看到这,你还是不知道TCG的性能为什么比上面伪代码的效率高?举个例子(拿这句话去问AI就能得到答案)

CPU虚拟化技术,是一种硬件虚拟化技术,又名vt。qemu加参数-enable-kvm就是基于硬件虚拟化技术运行,kvm又是什么呢?kvm与vt是什么关系呢?docker与它们又有什么区别呢?

废话不多说,直接上图
在这里插入图片描述

kvm,是Linux内核的一个驱动模块,是在Linux系统中写虚拟机的基础设施,它是基于vt实现的。你可以这样理解:虚拟机是精装修房,kvm是简装修房,vt是毛坯房

举个代码例子,你可能更容易理解,比如你基于vt写虚拟机,代码类似于
在这里插入图片描述

如果基于kvm写呢,两句话搞定
在这里插入图片描述

不是说基于kvm写虚拟机不需要做vt写虚拟机做的那些,而是那些事,是写虚拟机都要做的,kvm做了,所以你基于kvm写虚拟机,更省事!

CPU虚拟化是什么,vt是什么,kvm是什么,kvm与vt的关系,这四个问题已经讲清楚了!接下来说docker

严格意义上来说,docker不算一种软件虚拟化技术,它更像操作系统虚拟化技术。如何判断是不是虚拟化技术呢?就看它是不是在模拟硬件!很显然,docker不是!但是docker给人的感觉,又是虚拟机
docker虽然给人的感觉是虚拟机,但是它运行的不是一个完整的操作系统,它运行的更像是一个个应用
在这里插入图片描述

你可能想说:docker也可以运行Ubuntu镜像呀!是的,没错,但是这个Ubuntu镜像是没有Linux内核的,只是Ubuntu的用户态!其实在docker的眼里,Ubuntu的用户态也只是一个应用而已!

docker是如何实现的呢?基于Linux内核提供的namespace+cgroups+overlayfs实现的。细节不展开了,如果你想深入学习,我之前做过课程《手写docker》
在这里插入图片描述

而真正的虚拟机,运行的都是完整的操作系统,包含操作系统内核、操作系统用户态、应用…甚至可以在虚拟机中打游戏!
在这里插入图片描述

至此,软件虚拟化的全部,与硬件虚拟化的全部,就分享完了!如果你收获满满,我感受到你的欣赏,你的谢意,能不能帮我点下在看、转发,万分感谢!
在这里插入图片描述

如果你对上面的内容感兴趣,想看我之前的文章及我的奋斗历程。白手起家程序员的职场心得,欢迎看我【个人简介】详细了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值