- 首发微信公号:Rand_cs
minos 0 前(废)言(话)
从今天开始开启一个新的系列,讲述虚拟化的那些事儿。时隔上次发文又隔了好几个月了,主要是平时工作比较忙,没太多时间精力维护博客之类的。
前一个系列 SELinux 没写完,但也不算太监,比较重要的基本都介绍了。剩下的就是 Linux 中关于 SELinux 驱动以及 libselinux 中的代码,关键部分的代码我基本捋了一遍,有些多,我也就懒得花时间整理了,我估计这玩意儿也没多少人感兴趣,懂这原理后实际用处也不大,感兴趣的可以去瞅瞅这代码,有问题的可以找我交流。SELinux 这东西应用是最重要的,就是策略,策略才是核心。这个在 Android 可能用的比较多,添加服务,应用,cts 测试等等可能都会遇到过 SELinux 策略的问题。从接触到现在,我也解决过许多 SELinux 兼容性的问题,简单的问题网上解决方式一大堆,比较复杂的 case,碍于公司事项,也不好实际拿出来讲,所以 SELinux 应用方面也就先不讲述了,这个系列就先到此为止,后面有缘再续。
回到虚拟化,虚拟化一直是我感兴趣的方向,工作之余一直有慢慢抽时间去了解学习。从课堂上接触到操作系统的时候,那是还是一个小菜鸟,对于操作系统课程各种抽象的说辞很是不解,为此去仔细研究了 xv6,基本做到了每行代码细细研究,终于对于操作系统有了一个比较直观的认识。至少说,虚拟内存、进程线程、上下文切换、shell 程序等等这些当时对我来说特别抽象的名词有了清晰的认识,并且从硬件到软件明白了它们是如何工作的。我印象最深的就是 shell 程序,当时书上还有老师给来了一句抽象的解释,shell,壳儿嘛,包裹着内核,通过 shell 程序我们执行命令程序,进入内核。当时我就直接懵逼了,,,这,这,这,可以这么解释的嘛。
又扯了太多,深夜写文章就是话多哈哈哈哈,再次回到虚拟化。虚拟化的话题也很大,而这个系列主要集中在 type1 类型的虚拟化。对于虚拟化相关的文章,网页上很多,写得很好的不计其数,我印象很深的,知乎上有个叫兰新宇大佬的博客,写得很好,推荐:https://www.zhihu.com/people/lan-xin-yu;
但总的来说,还是抽象了,没有落到实际的代码,有些东西终究模糊。源码之下,了无秘密,还是得看代码去学习虚拟化的一些知识。平时精力有限,一些耳熟能详的虚拟化方案太复杂,不太适合直接上手阅读学习。在网上搜索了一番,终于找到了一款小巧功能完整的 type1 类型的虚拟化方案。
此项目地址:https://github.com/minosproject/minos/tree/master 。看名字应该是一位叫做 乐敏 的大佬的项目,感谢这位大佬的项目,让我们有机会更加深入的接触到虚拟化的世界。
此项目的代码关键部分基本看完了,可以拿出来和大家分享分享。这次讲述可能不会像之前 xv6 那样详细到每行代码,大部分只是捋一下流程,有代码的那种比较清晰的流程。主要包括以下几个方面:
- 内存虚拟化,也就是 hyp 如何对内存进行管理的
- CPU 虚拟化,也就是 hyp 如何对进程进行管理的
- 中断虚拟化,捋清楚在有虚拟化的情况下,各种中断是如何路由与处理的
- IO 虚拟化,也就是虚拟机之间,虚拟机与 hypervisor 之间,虚机与物理硬件之间等等如何进行数据交互的
核心的大概就上面这些,其他的随缘,后面看时间精力来吧。目前这个系列前半部分——主要讲述上述虚拟化流程,基本已经写完了,这也是为什么搁了那么久才发文的一个原因,想着自己对 minos 有个整体把握,相关文章初稿都写完后,再慢慢发出来。
- 首发微信公号:Rand_cs