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

进程间通信

十二年是一个轮回,这里就不得不提提Linux。Linux诞生已经十二年了,你对Linux内核了解么?这里从一个Linux用户的角度来描述一下Linux十二年成长经历中的点滴。希望对你了解Linux内核有所帮助。

澳门新葡萄京官网注册 1

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

正因为如此,我的资料都来自于互联网。尽管年代已久远,但是广阔的互联网空间仍然随处可见Linux诞生以来的点点滴滴。将它们收集起来,Linux十二年的发展逐渐在眼前展现。

什么是微内核呢?

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

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

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

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

Linux诞生记

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

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

  • 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诞生于1991年8月29日,一切从下面这封邮件的发出开始。

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”人物目录。

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

澳门新葡萄京官网注册 2 澳门新葡萄京官网注册 3

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

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

(文/开源中国)    

微内核还是宏内核

Newsgroups: comp.os.minix

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

Subject: What would you like to see most in minix?

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

Summary: small poll for my new operating system

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

Message-ID: <1991Aug25.205708.9541 @klaava.Helsinki.FI>

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

Date: 25 Aug 91 20:57:08 GMT

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

Organization: University of Helsinki

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

Hello everybody out there using minix –

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

I’m doing a (free) operating system (just a hobby, won’t be big
andprofessional like gnu) for 386(486) AT clones. This has been
brewingsince april, and is starting to get ready. I’d like any feedback
onthings people like/dislike in minix, as my OS resembles it
somewhat(same physical layout of the file-system (due to practical
reasons)among other things).

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

I’ve currently ported bash(1.08) andgcc(1.40), and things seem to
work.This implies that I’ll get somethingpractical within a few months,
and I’d like to know what features mostpeople would want. Any
suggestions are welcome, but I won’t promiseI’ll implement them 🙂

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

Linus
([email protected])

Linus的回复是这样开始的:

PS. Yes – it’s free of any minix code, and it has a multi-threadedfs.It
is NOT protable (uses 386 task switching etc), and it probablynever will
support anything other than AT-harddisks, as that’s all Ihave :-(.

好吧,既然是这么一个主题,我恐怕不能不做回答了。向已经听了太多关于Linux的Minix使用者们道歉。我很乐意上钩(Andy说了这些话,好像在引诱Linus开始一场争论——笔者注),该是吵一架的时候了!

上面这封邮件的译文如下:

啊哈,看来Linus真的被激怒了,我仿佛看到了他挽起袖子的样子:)。是啊,看到自己辛辛苦苦的劳动成果被人冠以“过时了”的形容,谁还能平心静气呢?

各位使用Minix的朋友们,大家好。

针对微内核和宏内核之争,他是这样回应的:

我正在为386486)的兼容机做一个自由的操作系统。它仅仅是一个业务爱好,不会很大,也不像GNU那么专业。从4月开始我就着手于这项工作,现在差不多就要完成了。我欢迎任何喜欢或不喜欢Minix的朋友能给我反馈,因为在某种程度上我的这个操作系统和它很像。比如,它们都使用了相同的文件系统物理组成这是由实际情况所决定的)。

是的,Linux是宏内核,我同意微内核更好些。如果不是你使用了具有争论性的主题,我可能会同意你大部分的观点。从理论上(以及美学上)讲Linux是输了。如果去年春天GNU内核已经做好,我可能不会这么麻烦地开始我的工作:问题是它没有做好而且到现在都没有。在已经实现这一方面Linux赢大了。

目前我已经将Bash
1.08和GCC1.40移植到这个操作系统上,它们都能够正常地工作。这意味着在这几个月的努力下,我终于完成了一些实际的东西。我很想知道对于这个操作系统,大多数人到底需要哪些功能和特性。我欢迎各种建议,虽然我并不敢保证能够实现它们。

>>
Minix是微内核系统……Linux则是宏内核的。

Linus
([email protected])

如果这是评价内核好坏的唯一标准,那么你是对的。你没有提到的是Minix的微内核实现得并不好,而且(内核内)多任务存在问题。如果我做一个多线程文件系统存在问题的操作系统,我可能不会这么快就声讨别人:事实上我会尽最大努力让别人忘掉我的失败。

又及:这个操作系统从Minix代码而来,有一个多线程的文件系统。它不具备很好的灵活性使用了386的任务切换机制),而且因为我所拥有的资源有限,它也许永远都不能支持除了AT硬盘之外的东西。

这一段我觉得非常重要,因为看得出来,Linus内心还是承认微内核的优势的,而且他提到了“美学”(aesthetical)这个词,因为的确,微内核的思想更加优雅,这在我们下文中的分析中也可以看到。不过尽管如此,他还是批评了Minix本身,认为它的微内核实现的并不令人满意。

文中提到的Minix是一个微型的Unix操作系统,完全免费且源代码公开。作者是荷兰的AndyTanenbaum教授。他编写这个操作系统的目的是为了教学和演示,因此他一直拒绝在Minix中加入不必要的特性而使其变得复杂。但是很多爱好者们热衷于改进Minix,Linus
Torvalds就是其中的一个。

在后来谈到可移植性的时候,Linus的话也颇具初生牛犊不怕虎的劲头:

现在再看这封信,谁能想到它对今后十多年中IT业造成的冲击呢?

可移植性是为不能编写新程序的人设计的

如果注意到1991年时Linus的许多邮件,我们会发现那个时候的他并不是现在这样的一个顶级开发高手。那时候的Linus只是一个OS新手,他自己也在回忆录中承认,当时向很多人请教了很多基本的问题。

——我,现在(使用傲慢的语气)

谁又能说十二年后不会再出现这样一个传奇呢?

真的很精彩不是么?我甚至感觉有点像在看武侠片,一老一少,出招拆招,虽是打架,但颇有章法。不难看出,刚刚这句“我,现在(使用傲慢的语气)”甚至带有一丝挑衅意味,看这句话我甚至在想像着Linus敲出这行字的时候该是带着怎样傲慢的神色——不过谁在年轻的时候不是这样气盛的呢?呵呵。

十年磨一剑

看过热闹之后,让我们来实地勘查一下,两种内核看上去是什么样子的。我们就以系统调用作为突破口,看看它们的代码。

1991年11月,Linux0.10版本推出。早期的Linux只有很少的一些程序,直到0.11版本,Linux仍然缺少init/login、rename
systemcall、named
pipes、symboliclinks这些基本的特性。0.12版本之后,版本号直接跳到了0.95,Linux开始逐渐接近一个真正成熟的系统。

Linux开发的版本号惯例是,中间的数字为偶数代表稳定版,中间的数字为奇数代表开发版。因此到目前为止,Linux经历了以下几个稳定版本,他们的版本号和维护者分别如下:1.0.x;1.2.x;2.0.x由David
Weinehall负责维护;2.2.x由AlanCox负责维护;2.4.x由Marcelo
Tosatti负责维护。

直到2003年12月18日推出Linux 2.6.0,由Linus Torvalds亲自负责维护。

微内核与巨内核之争

Linux以一种难以置信的速度流行起来。在它高速发展的历程中,不能不提到著名的Linux是否过时之争。双方当事人恰恰就是Linus和Minix的作者Andy
Tanenbaum教授。在这次争论中,双方对操作系统的很多方面都进行了深入的讨论,至今看来仍然很有意义。

最先发难的是Andy Tanenbaum教授。1992年1月29日,他在题为“Linux is
obsolete”的E-mail中说到了对未来一段时间内操作系统发展的观点。

1)是微内核还是巨内核

传统的操作系统使用的都是巨内核结构。这意味着操作系统是一个整体可执行文件,进程管理、内存管理和文件系统全部运行在内核模块中。而目前较新的一种设计方式是微内核,操作系统的大多数部分作为独立的进程运行,存在于内核以外,内核通过消息传递、中断处理、低级进程管理,以至于I/O来完成各种工作。

他认为微内核明显优于巨内核,而Linux使用的恰恰就是巨内核。Andy
Tanenbaum教授认为这是历史的倒退,相当于在20世纪90年代仍然使用70年代的技术。

2)灵活性(Portability)

Andy
Tanenbaum教授还认为,不应该对于一种特定的体系机构编写操作系统,因为体系结构的进化是非常快的,这样将导致移植非常困难。目前的Linux过于依赖80386架构,而这样显然是不对的。

之后Linus在回复的邮件中承认,微内核的确好一些,至少在理论上是这样。但是Linus认为在当时拥有一个可用的操作系统更加重要。他说,如果前一年的春天GNU的内核Hurd推出的话,那Linux就没有存在的必要了。Linus认为,不能仅仅用是否是微内核作为评论操作系统优秀与否的标准。

Linus说的是很重要的一点。微内核模式在开发和调试上都带来了一定的难度,这也许是Hurd迟迟不能推出的一个重要原因。在很久以后的Revolution
OS记录片中,GNU的主教RichardStallman承认,Hurd各部分之间的配合和调试是个大问题。也许Linus的确有远见。他认为应该迅速推出能用的系统,而不是在做了最优化设计之后再推出系统,这个观点值得我们深思。

对于灵活性,Linus认为只是某些不愿意写新程序的人的借口。他认为事实上由于POSIX标准的缘故,Linux比Minix更具灵活性,因为往Linux上移植程序会更加方便。灵活性是一个好主意,但是过犹不及,OS应该最大限度地利用架构的特点,这样会让开发变得更加容易。

后来双方又进行了很多争论,涉及到不少技术细节,也有不少别的人参与进来,他们说的话对于想学习OS的人很有启发意义。

今天的Linux内核已经不能简单地说是一个微内核系统或巨内核系统了,它同时具有这两种系统的不同特点。不过我们可以看到,正是像上面这样的讨论,构成了今天这一庞大的OS理论基础,这也正是Linux自由、开放的精神所在。

  1. 命令简介:文件和目录管理的基本Linux命令
  2. 操作笔记:Linux桌面GNOME的操作技巧
  3. 全面讲解Linux文件安装卸载
  4. 2010Linux操作系统即将绽放
  5. 实操日志:Linux安装JDK