软件虚拟化 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》

而真正的虚拟机,运行的都是完整的操作系统,包含操作系统内核、操作系统用户态、应用...甚至可以在虚拟机中打游戏!

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

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

相关推荐
一起逃去看海吧19 小时前
dify-03
java·linux·开发语言
fengyehongWorld19 小时前
Linux 根据端口进行的相关查询
linux
lihao lihao19 小时前
linux匿名管道
linux·运维·服务器
うちは止水19 小时前
weston出图调试
linux·wayland·weston
STDD19 小时前
Farming Simulator 25(模拟农场 25) Linux 专服搭建完全指南
linux·运维·javascript
好好风格20 小时前
宝塔面板 HTTPS 端口证书不生效排查记录
linux·运维·nginx
cfm_291420 小时前
Redis高并发缓存架构设计与性能优化实战
redis·缓存·性能优化
画江湖Test20 小时前
Redis 块的原理
数据库·redis·缓存·性能优化
用户23678298016821 小时前
Linux pgrep 命令详解:按名称查找进程 PID 的高效方法
linux