操作系统学习笔记——Mach, Monolithic kernel, Microkernels, Exokernel

来源:互联网 发布:wpf编程宝典 2012 pdf 编辑:程序博客网 时间:2024/06/12 22:07


什么是Microkernel 

Microkernel 是一种内核设计风格,在90年代初由CMU的系统研究组提出,在1991年的论文里,他们描述了Mach系统如何实现了microkernel. 

所谓的microkernel, 其实就是把传统的kernel trim 到只有一个更小的核,这个核(microkernel)只保留了最基本的硬件操作抽象,把最直接与硬件打交道的功能和OS的独特特征(unique characteristic)分开。

Q:哪些是OS的characteristics呢?

A: File system interface? 例如windows 用的是 FAT32 文件系统,而Linux 用的是ext3, 那么这些文件系统是一样的,这些不同之处就应该与最基本的硬件操控操作分离开来。


作者们的想法是,其实所有OS都会有相同的对硬件的操作,无论哪个OS的implementattion 都绕不过这些操作,像面向对象里的思想一样,把大家共有的东西独立出来,提供相同的接口,例如所有的OS底层实现都是调用相同的READ, 

Microkernel 的优点

这样做有几个优点:

  1. 实现重用这些微内核代码,不同的OS代码也可以兼容在一起,windows os 底层的代码也可以被用于linux (当然这只是理想情况而已)
  2. 减少OS engineering effort. 因为是重用,所以会少写一点别的代码。

Microkernel 的缺点

1. 但是,这个思路提出来的时候还算比较早期,Microkernel 其实没有考虑 操作系统上层的application 是否方便,因为它会暴露内核更多的职责给app developer,当然,这也不一定,也要看具体系统是如何设计的。

2. micro-kernel 本身是不可移植的,会绑死在一个processor 上。 不同的processor要用不同的micro-kernel. 

microkernel 内核管理也是用一种与snowflock 类似的思路,就是用memory page server 这种设计,而且是在user-mode实现的,kernel-mode的内核页面寻找的职责代理给了user-mode application. 

影响microkernel 实用性的是最大因素,就是性能 [2]:太多的IPC导致内核很慢!在第一代的microkernel 内核里,一个IPC 耗时近 1000 us, 这就太慢了,而真正的耗时应该是 10 us 才是可以接受的。而且第一代的microkernel设计导致有很多的IPC的调用,第二代的设计就避免了频繁的IPC,把几十个变成了一个IPC。 文献[2]是一篇写micriokernel极好的文章。

未解决的问题:


1. [2] 提到 l4 的kernel,l4 是如何用 address-space concept 来解决 这个external pager 的问题的。 

我的理解是,memory 只提供 grant, map 和 demap 几个元操作给app, application就通过这几个接口来调用,把如何实用、用什么策略(policy)来用 grant, map或demap交给application。而第一代的mircrokernel 是把policy 写死在kernel里。

Why is Microkernel is using Message Passing instead of shared memory?

A:  Because message passing is a higher-level abstraction than shared memory.  The message can be passed either through network or memory.  Shared memory, in contrast, is more limited because it needs the components share the memory as the medium for data transfer. 

Microkernel 与其他kernel or hypervisor 的区别

Microkernel 与 virtual machine monitor (VMM) / hypervisor 有点像,但有两个不同: 
  1. Microkernel 的目的是为了Miminize kernel, 而hypervisor kernel并不一定是最小的,也可能还有一些冗余。(Research topic:reducing Xen Redundancy?
  2. hypervisor 是专门为VM kernel 定制和优化的,而Microkernel 只是一种设计风格,或者设计思想。
[5] 这篇文章就提出了一种观点:   VMM 其实是 Microkernel理论和实践的最佳结合!为了证实这一观点,首先,作者认为VMM 和 Microkernel 在做法上有很多相似之处,都是通过把一个大system 分解成 若干个 独立的部件,然后为这些部件定义狭窄的接口,以及部件间是如何通信的。在科研界,Microkernel  受到的关注远比 VMM 早得多和多得多。Microkernel 是被设计成一种  communication-oriented 的 kernel, 先把kernel 分解成若干部件,部件间是定义了很严谨的通信接口,而不是像monolithic kernel 里的随意调用function。 作者强调,这种 communication-oriented 架构的设计初衷,是为了让components 能分布在不同的physical host 中。

VMM的设计目标是为了提高硬件利用率,这是通过让一群isolated, secure 的 VM 在一台机器上共享资源,而多个VM能通过VMM来管理。

后来的历史证明,VMM在业界大获成功,而microkernel 还是留在学界的academic prototype 阶段。作者为此总结了VMM比microkernel 做的更好的三个地方: 
1. microkernel 为了把kernel 缩小,把一些功能代理给了用户态(user-level)的部件,导致了功能依赖。一个明显的例子是,externel pager.  为了做到这,microkernel 需要一些不太优雅的机制去避免deadlock, 例如 timeout.  

而Xen 的设计就避免了这一点,VM保留了是抽象个体的独立性,它处理memory page的策略得以保留,VMM是不干预的,严格限制Page sharing. 



Unix traditionally 是采用了 Monolithic kernel 的结构,所有系统功能都集中在一个”大“内核里,内核里共享所有的数据结构。

Exokernel 允许application 直接操控硬件,为了performance 而给app developer 加重负担。结果并不如意,据说IBM为些花了很多人力物力,最终不了了之,在IBM不可再提Exokernel这个词。

总结

其实操作系统内核也在不断地缩小,要么用来定制,要么就牺牲一点其他特性来换其他特性。大概脉络就是这样。generally speaking,  我们要做的就是在原有的kernel上面做微小的改进,使之适应潮流。

关键在于如何缩小,2013年有一篇文章,讲unikernel, 用的方法是从编译时就把application 变成一个Library, 把general purpose 的内核裁剪成single purpose kernel, 就是朝着定制化的路上前进。

参考文献

1. David L. Black et al.  Mircokernel Operating System Architecture and Mach, Drafted in June 1991.
2. Jochen Liedtke,  Towards Real Microkernels, Communications of the ACM, 1996
3. Felix Xiaozhu Lin et al. K2: A Mobile Operating System for Heterogeneous Coherence Domains, ASPLOS'14 
4. Anil Madhavapeddy et al. Unikernels: Library Operating Systems for the Cloud, ASPLOS'13
5. Steven Hand et al.  Are Virtual Machine Monitors Microkernels Done Right?  HotOS'05

0 0