软件虚拟化 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》
而真正的虚拟机,运行的都是完整的操作系统,包含操作系统内核、操作系统用户态、应用...甚至可以在虚拟机中打游戏!

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

如果你想更多了解我,欢迎去我公众号【硬核子牙】看我之前的文章及我的奋斗历程。白手起家程序员的职场心得,应该会对你有很大启发

若有收获,就点个赞吧

相关推荐
GeW5 小时前
超详细!RHCE10版通用备考策略,内含评分细则解读
linux
用户041328465135 小时前
Linux 服务开机自启动怎么配置?systemctl enable 原理详解
linux
草莓熊Lotso14 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
张文君14 小时前
ubuntu26.04坏道坏块分区隔离急速版260831-V0.12
linux·python
贝锐1 天前
从国产化信创设备到商用安卓终端,向日葵如何帮助企业实现统一运维管理?
linux·运维·远程控制
Julien20041 天前
调查和解决 SELinux 问题
linux·运维·服务器·网络·学习方法
小张同学a.1 天前
Docker 容器实战 1—— docker 基础与镜像构建
linux·运维·docker·容器
Best-Wishes1 天前
BurpSuite Pro教育版在linux系统中配置
linux·运维·服务器·网络安全·burpsuite
wuminyu1 天前
深入剖析 Panama Off-heap 的性能损耗与开销
java·linux·c语言·jvm·c++
虎王物联1 天前
RK3568嵌入式Linux跑Docker:内核配置排查到AIoT容器化的完整路径
linux·运维·docker·rk3568·aiot·嵌入式linux