研究下Qemu-KVM虚拟机

做了云桌面后,用到了很多虚拟化的东西,Qemu-KVM虚拟机就是其中之一,为了更好的了解和使用Qemu,最近看了下Qemu的原理实现,都是使用C语言写的,对于我这种只是了解C语言的来说看着的确有点吃力。

Qemu是什么呢?先科普下,知道的可以跳过。Qemu是一块基于KVM的用户态虚拟机,可以把一个物理机切成很多个虚拟机,比如我们在各种云买的服务器,其实都是虚拟机。

虽然是虚拟机,但是我们使用来说,完全感知不到它是个虚拟机,操作系统也不知道,因为Qemu已经完全模拟了,让操作系统以为就是个真实的机器。

Qemu我们个人生活中用的比较少,个人常用的是Vmware或者VirtualBox,用于在自己的电脑上模拟安装新的系统,用于研究或者练习使用。

当我把Qemu的源代码下载下来,发现光C语言代码就有400万多行的时候,差点放弃。

5d4ef581fe070df2c8e1c550410aff02.png

为什么呢?因为C语言非我所长,没有用C语言写过大型项目,只能算是了解,所以看着这么多代码会很吃力。

这里聊一下C语言为什么非我所长。C语言是一门基础语言,也是我们大学计算机专业的必修课,但是它是比较低级的语言,所以理解上和我们人类语言相差有点多,会难以理解,所以我在大学的时候,就不太愿意学这门语言。

为什么呢?枯燥,做个东西好难,天天面对的就是Bash的输出,想做个GUI界面不会,想做个网页也不行,有一种感觉学了没啥用的感觉,还不能给女同学装B,所以就大概学习下,考个及格就过了a3b1bbeb1b9be3ae84e97260cbd7e822.png

8efca5294c7c31a800e197697d610c03.png

我选择的是什么语言呢?起初是VB,可以很快的开发GUI程序,当时我用VB做的MP3歌词工具、小说下载器等非常火爆,同时也收获了一波满足感。

然后因为大学做搞网页大赛,为了能拿个奖,又学了Java,然后大学毕业后,一直用的也是Java陌生,一直到后来使用Go语言。

这个过程中虽然因为JNI或者CGO用过一些C语言也都比较简单,就是为了实现某几个系统调用就可以了,所以对C语言的理解一直不深。这次又看到了Qemu源代码,越来越感觉C语言的重要性。

其实不止Qemu这个虚拟机,像Linux操作系统也是使用C语言写的,所以我们想使用系统能力就不得不借助于C语言,就像计算机所有的指令都会被转化成二进制一样,C语言也是高级语言的基础,是调用系统能力的一道坎,越往底层走,越想了解原理就越要会C语言,也就越来越明白C语言的重要性。

C语言本身非常简单,语法和特性也不多,对于已经掌握了一门编程语言的来说很容易入门,但是要想用好它,深入的理解它就比较难了。

比如它没有对象的概念,我们写惯了面向对象编程的,感觉就是束手束脚。比如Qemu抽象设备的概念,就用了对象的继承,但是又是用C语言写的伪继承,看的那叫一个别扭,云里雾里。

有人可能会疑问,为什么Qemu不能用Java或者C语言来写呢?因为要用到很多系统底层能力,比如KVM、vCPU、vGPU、内存虚拟化、设备模拟等等,这些能力都是通过C语言提供的(H头文件),用C语言是最合适的(C++也行)。可能还有人会说,Java也可以通过JNI调用啊,但效率没法跟上的。其实很多具备GC能力的语言,都不适合写Qemu这类底层程序。

最近我还在研究Nvidia的视频编解码,从显卡直接获取视频的能力也是通过C/C++提供的。

其实很多时候,会慢慢的发现殊途同归,不管是开始学习什么高级语言,最后都绕不开C,尤其是当我们自己想使用系统能力,甚至去创造一个新的Hypervisor以便有更多的控制权时。

所以,如果你有时间,我很强烈的建议你学习下C这门底层语言,然后用这门语言探索下计算机底层的奥秘;如果你正在从事这门语言的开发,那么提前恭喜你。

接入阿里云Jaeger踩了个大坑,竟然是因为Jaeger的Golang SDK和NodeJS的实现不一样

研究开源项目发现的一个人性化的Go语言库

必须要掌握的几个 Go 语言技巧

动手撸个Caddy(十三)| 插件开发之Caddyfile参数

Caddy实战(十二)| 插件开发之HelloWorld

  Caddy实战(十一)| Caddyfile 设计之美

Caddy实战(十)| 一分钟搭建PHP服务器

Caddy实战(九)| 设置头信息实现跨域

Caddy实战(八)| 利用缓冲提升反向代理的性能

Caddy实战(七)| 反向代理中的健康检查

Caddy实战(六)| 反向代理中的负载均衡

Caddy实战(五)| 配置反向代理

42276c396b8d93785a344a2d176697e0.png

扫码关注

分享、点赞、在看就是最大的支持

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值