微内核(microkernel)相关
from :?http://www.yandong.org/archives/191介绍
WIKI上的解释是:在计算机科学中,微内核是一个近乎最小的软件集合,但具有能够提供实现操作系统所需的机制。?
In?computer science, a?microkernel?is the near-minimum amount of software that can provide the mechanisms needed to implement an?operating system?(OS). ? —wiki
微内核把硬件驱动,协议栈,以及文件系统等都放入用户空间,以保持较小的代码规模。微内核的代码一般在10000行一下,像Minix不足6000行代码,而高于20000行一般都归于monokernel。?
本质上说,微内核可以被看作是对传统操作系统共性的进一步抽象,从某种意义上说可以被称作是“操作系统的操作系统”。
?
时代背景
? ? ?开始的内核都很小,主要是因为电脑很小。随着电脑功能的增强和硬件的发展等因素,内核越来越大。BSD unix开启了大内核的时代。内核规模的增长使内核更容易出现bug,而且不方便管理。而微内核的出现正是为了解决这些问题。微内核发展与上世纪80年代。与之相对的是,宏内核(mono kernel)。虽然微内核在当时是一个非常惹得话题,应用领域之中,mono kernel占据这主导地位。
发展
第一代:?Mach是最早的微内核系统,由卡内基梅隆大学发展的。它从1985年运行到1994年,到Mach 3.0版结束。Mach的研究到至今似乎是结束,虽然有许多商业化操作系统,如NEXTSTEP 与?OPENSTEP,特别是?Mac OS X都是使用Mach或其衍生系统。Mach的虚拟内存(VM)系统也被BSD的开发者用于CSRG,并出现在BSD衍生的系统中,如FreeBSD。
? ? ?最为悲惨的遭遇是,Mac OSX与FreeBSD并未保留Mach首倡的微核心结构,除了Mac OSX继续提供微核心于内部处理通讯以及应用程式直接控制。更有些滑稽的是,在microkernel流行的时候,windows曾经把UI部分拿出kernel,可当microkernel之风过去了的时候,微软又把部分底层的UI放回了kernel。微软总是最后一个吃螃蟹的人,当它都尝试microkernel,足以说明microkernel是多么火热。可microkernel为什么又被冷落了呢?性能。
ps:卡内基梅隆大学位于痞子堡,是美国计算机科学重镇,排名前五。ps:Mac OS X?(使用XNU?核心)基于Mach3.0ps:NEXTSTEP基于Mach2.0
第二代:L4可以看作是Mach的改进。由德国的 GMD 设计。GMD 是德国国家信息技术研究院,相当于中科院计算所加上软件所。
? ? 在九十年代后期,微内核迎来了其生命中的第二春。一些研究人员认真分析了微内核系统性能差的原因,指出其性能差并非根本内在的因素造成,而是设计实现的失误。为什么这么说呢?因为早起的微内核系统大多是由 Mono?Kernel 一步步逐渐改进而来。其很多设计并未发生重大改变。他们虽然被称为微内核,但其代码量还是很大。例如,Mach 3 内核支持 140个系统调用,代码量为 300K 字节。为证明其论点,他们设计并实现了几个性能远超第一代的微内核操作系统,我们把它们称为第二代微内核系统]。其中的一个代表作品就是 L4。
第三代:seL4是一组基于微内核构架的操作系统内核,澳大利亚研究组织NICTA创造了一个新的L4版本,称为Secure Embedded L4(简写seL4),宣布在世界上率先开发出第一个形式化机器证明的(formal machine-checked proof)通用操作系统。
微内核的发展方向
微内核性能分析
? 理想情况下,内核中仅留下 Address Space?Support(地址空间支持),IPC (InterProcess Communication,进程间通讯),和Scheduling(调度),其他功能模块做为用户进程运行。其中IPC是极其重要的组成部分,因为模块间要是想通信的话,就的靠IPC了。IPC的性能直接决定微内核的性能。可不如人意的是,虽然IPC已经广泛应用,但其性能并不理想,从而成为微内核的性能瓶颈。
? ?IPC的性能有多么差呢?我们来看看比较数据。微内核系统中 IPC 性能不断提高,但到 90 年代初似乎达到了顶峰。Mach?3 的 IPC 最好性能大约是 115 μs (在 486-DX 50 机器上),通常需要200?μs。对其它微内核系统也大致如此。当时许多研究人员认为,有 100 μs 左右的时间是 IPC 的固有消耗,这一时间已无法缩短。但是与之相比,在同样硬件平台上,一个 UNIX 系统调用只需要20 μs, 好过微内核系统 10 倍。
? ?到了L4的时代,微内核的性能得到了很好的改善。L4 内核支持三种抽象概念:地址空间,线程,和 IPC。他只提供 7 个系统调用,只有 12K 字节代码。在 486-DX50 机器上,一个地址空间切换 IPC, 8 字节参数传递,只需要 5 μs。如果参数量为 512字节,只需要 18 μs。也就是说,L4的IPC比第一代微内核的IPC快20倍以上,甚至比传统操作系统的IPC还要快。
? ? 既然IPC的性能已经得到改善?那么微内核还面临什么问题呢?L4所做的改变只能使微内核在单服务器上的性能稍稍优于传统的系统。但是在多服务器上,和mono systems仍然木有可比性。为什么如此?说来话长,参见IPC机制吧。
GNU/Hurd
说起这,就要说说蛋疼而旷日持久的GNU工程。GNU 工程?创始于一九八四年,旨在开发一个完整 GNU 系统。GNU 自己的内核 Hurd?仍在开发中,离实用还有一定的距离。因此,现在的 GNU 通常使用 Linux 内核。这样的组合即为?GNU/Linux 操作系统。已经有上百万人在使用 GNU/Linux,但他们中的很多人把它误称为“Linux”。GNU Hurd的开发走过一段极其苦逼的历史,开始它基于由卡基美隆大学的 Mach 3.0的,后来卡内基中止了Mach计划,于是自由软件基金会便转向犹他大学的Mach4,后来犹他也终止Mach计划,不甘心的自由软件基金会的人于是决定自己发展Mach,叫GNU/Mach。2002年推出GNU/Mach1.0,过了几年推出2.0,可不知什么原因2.0被放弃,重新回到1.X版本。再后来,Mach在业界的研究都被终止了,L4兴起,自由软件那帮可怜的娃不得不放弃之前近二十年的努力,将Hurd移植向L4。
所以说GNU Hurd?是一系列基于?GNU Mach?或者?L4?微内核的守护进程,这一套守护进程最终形成了 GNU 操作系统。之前GNU 计划从1990年开始开发 GNU Hurd,并且将它作为一个遵循?GPL?的自由软件发布。Hurd 的目标是从功能、安全性和稳定性上全面超越?Unix?内核,而同时又能保持对其的兼容性,为此 Hurd 遵守 POSIX 标准。
? “HURD”是一个间接递归缩写,来自“HIRD of?Unix?Replacing Daemons”,其中“HIRD”表示“HURD of Interfaces Representing Depth”。
? ?Hurd基于GNU Mach作微内核进行开发。这是由Richard Stallman做出的技术决定。更为滑稽的一段故事是,Stallman并不看好像linux等的monokernel,才作出使用microkernel的决定。而linux的创始人Linus Torvalds更是鄙视microkernel,认为microkernel注定是一个技术失败。而对于芸芸众生的我们,习惯了GNU/linux组合,用着linux的内核,使用着GNU的软件。
linux是否是微内核?
众多的linux是monokernel,如上面所提到的Linus Torvalds本人并不看好微内核。首先认为microkernel是一个技术失败,木有显示意义;再者,他认为没有必要为了microkernel而带来的一点蝇头小利而重写linux内核,不值得。