昨天华为在松山湖的华为开发者大会上正式宣布了鸿蒙操作系统,该系统其中一个亮点是
——
微内核。华为声称,微内核的启用,使其速度大大提升,并且在安全性上产生变革性突破,微内核打破了宏内核下root即可获取用户所有权限的做法,在安全性上大大提升。

进程间通信

澳门新葡亰8455下载app 1

我们提到过,当一个进程需要操作系统的帮助,它可以通过系统调用让内核来替它完成一些工作。迄今为止,我们已经熟悉了系统调用的工作机制,并且已经实现了不止一个系统调用。接下来你会发现,用户进程将会有更多事情依赖于内核。比如我们想实现一个文件系统,最起码读写硬盘的工作要求助于内核。这里我们可以逐渐地增加系统调用,但也可以采用另一种方案,就是将这些工作剥离出来,交给一些系统进程来完成,让内核只负责它必须负责的工作,比如进程调度。这种将内核工作简单化的思想,便是微内核的基本思想。而所有工作通过系统调用扔给内核态的做法,被称为宏内核。

什么是微内核呢?

微内核结构由一个非常简单的硬件抽象层和一组比较关键的原语或系统调用组成;这些原语,仅仅包括了建立一个系统必需的几个部分;如线程管理,地址空间和进程间通信等。

微核的目标是将系统服务的实现和系统的基本操作规则分离开来。例如,进程的输入/输出锁定服务可以由运行在微核之外的一个服务组件来提供。这些非常模块化的用户态服务器用于完成操作系统中比较高级的操作,这样的设计使内核中最内核的部分的设计更简单。一个服务组件的失效并不会导致整个系统的崩溃,内核需要做的,仅仅是重新启动这个组件,而不必影响其它的部分

微内核将许多OS服务放入分离的进程,如文件系统,设备驱动程序,而进程通过消息传递调用OS服务.微内核结构必然是多线程的,第一代微内核,在内核提供了较多的服务,因此被称为’胖微内核’,它的典型代表是MACH,它既是GNU
HURD也是APPLE SERVER OS
的内核,可以说,蒸蒸日上.第二代微内核只提供最基本的OS服务,典型的OS是QNX,QNX在理论界很有名,被认为是一种先进的OS.

在基于宏内核的操作系统中,完成具体任务时,用户进程通过系统调用让内核来做事,直来直去,我们之前已经很熟悉了。在基于微内核的操作系统中,这个过程稍微复杂一些。在完成具体任务时,内核的角色很像是个中介。就比如我们将要实现的文件系统吧,设想用户进程P读取一个文件,首先通过内核告诉进程FS,然后FS再通过内核告诉驱动程序(也是一个独立的进程),驱动程序读取硬盘,返回结果。这样一来,一项工作的完成变得有些曲折,需要多个进程协同工作。于是,进程间通信也就变得至关重要了。

采用微内核设计的操作系统

微内核并非一个新的概念,它已经存在很长的历史,下列的操作系统都是基于微内核结构设计的:

  • AⅨ
  • BeOS
  • L4微内核系列
  • Mach,用于GNU Hurd和Mac OS X
  • Minix
  • MorphOS
  • QNX
  • RadiOS
  • VSTa
  • RT-Thread

知乎上有人对微内核下了一个结论:

Micro-kernel 已经失败。在商业级操作系统中(包括可以用于 mission
critical 的 open source 操作系统),除了 L4
还在苦苦留有少量份额,没有任何 micro-kernel 的市场。

第一代 micro-kernel 是以一个错误的方式解决了一个错误的问题。而第二代
micro-kernel 不过是以正确的方式解决了错误的问题。

原文可看 

到如今,我们的操作系统慢慢长大,接下来我们要用它来管理磁盘和磁盘上的文件并管理内存等,这些都要向应用程序提供接口,到了必须决定用微内核还是宏内核的时候了。怎么办呢?当然不能抛个硬币了事。我们不妨先找两个具体的例子来看看它们分别是怎么回事,看完了,明白了,再做决定也不迟。

Linux 究竟是单内核的还是微内核的

Linux
是一个单内核结构,同时又吸收了微内核的优点:模块化设计,支持动态装载内核模块。Linux
还避免了微内核设计上的缺陷,让一切都运行在内核态,直接调用函数,无需消息传递。

早在 1992 年,Linus 曾经与 Tanenbaum
进行一场关于操作系统内核选择的著名争论。Tanenbaum 认为,以微内核架构设计的操作系统,在理论上,比宏内核架构更加优越,主张Linux应该以微内核架构来进行重新设计。但是
Linus 以开发实务上的观点展开反击,陈述 Linux
选择宏内核架构进行开发的理由,并比较Minix与Linux的性能差异。你可以通过维基百科了解此次争论的完整细节。

Tanenbaum ——
著名的技术作家、教育家和研究者,IEEE高级会员、ACM高级会员、荷兰皇家艺术和科学院院士、1994年ACM
Karl V.
Karlstrom杰出教育奖、1997年ACM计算机科学教育杰出贡献奖、2002年Texty卓越教材奖、第10届ACM操作系统原理研讨会杰出论文奖、被列入“Who’s
Who in the World”人物目录。

下图是宏内核(左)和微内核(右)两种结构的简单架构图:

澳门新葡亰8455下载app 2 澳门新葡亰8455下载app 3

当然对最终用户而言,我们并不在意采用何种方案。从现实情况来看,微内核似乎还有很长的路要走。

我们非常期待鸿蒙系统早日能给最终用户提供服务。

(文/开源中国)    

微内核还是宏内核

微内核和宏内核的例子都非常好找。我们一直拿在手边的Minix,以及每天在用的Linux,便是两者的典型例子。Minix是微内核的,Linux则是宏内核的。

说起这两个例子,有一段轶事不能不提。那就是当年Tanenbaum和Linus一老一少的口舌之争。话说Linus写了个操作系统叫做Linux,使用的是宏内核,他把这个消息发在了comp.os.minix新闻组上,这时Tanenbaum说话了,把Linux批评了一通,年轻气盛的Linus于是发信回击,这样一来二去,为我们留下一段微内核与宏内核的经典争论。

澳门新葡亰8455下载app,争论的全部内容在这里我们就不全部转述了,读者感兴趣的话可以用搜索引擎很容易地搜到(或者在维基百科上看一下),我们把其中的重点说一下。在谈到微内核和宏内核时,Andy(Andrew S.
Tanenbaum)是这样说的:

老一点的操作系统都是宏内核的,也就是说,整个操作系统是一个运行在核心态的单独的a.out文件,这个二进制文件包含进程管理、内存管理、文件系统以及其他。具体实例包括UNIX、MS-DOS、
VMS、MVS、OS/360、MULTICS等。

另一种便是微内核,在这种系统中操作系统的大部分都运行在单独的进程,而且多数在内核之外。它们之间通过消息传递来通信。内核的任务是处理消息传递、中断处理、底层的进程管理,以及可能的I/O。这种设计的实例有RC4000、Amoeba、Chorus、Mach,以及还没有发布的Windows/NT。

我完全可以(但不必)再讲述一段关于两者之间相对优势的很长的故事,然而在实际设计操作系统的人中间说说就够了,争论实际上已经结束。微内核已经取得了胜利。对于宏内核而言唯一的争论焦点在于效率,不过已经有足够的证据表明微内核可以像宏内核一样快(比如Rick
Rashid已经发表了Mach
3.0和宏内核系统的比较报告)所以那不过是喊喊而已罢了。

Minix是微内核的,文件系统和内存管理是单独的进程,它们运行在内核之外。I/O驱动也是单独的进程(在内核之内,但仅仅是因为Intel
CPU的糟糕设计使得很难不这样做)。Linux是个宏内核的系统。这相当于向七十年代倒退了一大步。就好比将一个已存在的工作得很好的C程序用Basic重写一遍。在我看来,在1991年写一个宏内核的系统真不是个好主意。”

以上前两段基本上可以被认为是宏内核和微内核的基本概念。从概念上我们不难猜到,宏内核看上去试图包办一切,而微内核恰恰相反,它的任务只是“处理消息传递、中断处理、底层的进程管理,以及可能的I/O”,而其他事情都交给内核之外单独的进程来完成。

在这段文字中Andy不但阐述了宏内核和微内核的概念,摆明了对于这个问题鲜明的观点,而且他也毫不掩饰自己对宏内核的不屑。而且这种不屑让他认为Linux简直是技术的倒退。在随后的文字中,对于Linux的可移植性Andy也做了不客气的批评。也难怪Linus对此非常恼火。从Linus的第一个回复开始,这场争论开始变得精彩起来。

网站地图xml地图