距离第一次阅读《操作系统:设计与实现》,已经是 20 多年了。当时,差不多是 2002 年吧,我已经参加工作了。我大学不是学计算机的,因而也没有上过操作系统的课。第一次去上海,在上海图书馆看到这本书(中文版),就买了回来,读了很多遍。现在,书好像找不到了,只记得是两本,一本是理论,一本是源代码。
我庆幸买了这本书。Linus Torvalds 说,这本书改变了他的一生。虽然这本书没有改变我的一生,但对我影响也很大。
"那年夏天我做了两件事。第一件事是什么都没做。第二件事是读完了719页的《操作系统:设计与实现》。那本红色的简装本教科书差不多等于睡在了我的床上。"------ 摘自Linus Torvalds自传《Just For Fun》。
我喜欢 UNIX 和 Linux,对书中讲得 MINIX 也充满了兴趣。我把它安装到我的电脑上,实验了很多功能,也读了很多源代码,算是对操作系统有了一知半解,也对 Linux 有了更深的认识。
然而,MINIX 还是一个用于"教学"的系统,还不适合日常使用,当时的 MINIX 可能是 1.5 版。
"大多数关于操作系统的图书均重理论而轻实践,而本书则在这两者之间进行了较好的折中。" 这是那本书前言里的一句话,我也一直记得。我甚至也将这句话写进了我的书------《FreeSWITCH 权威指南》的前言里。
MINIX 参考自 UNIX。最开始,UNIX 的源码都是开放的,大家都可以学习研究,大学里也可以讲 UNIX 的源代码。然而,到了 UNIX 版本 7 以后,AT&T 公司意识到了它的商业价值,就不再公开源代码了。学校里也不再允许讲 UNIX 的源代码。然而,没有源代码的操作系统课就像失去了灵魂。因而,做操作系统研究和讲操作系统课的 Andrew S. Tanenbaum 教授就自己写了一个操作系统------MINIX,名字取自 Mini-UNIX。
Linus Torvalds 就是在读了 MINIX 的源代码后,决定自己写一个操作系统,这就是 Linux。Linux 的源代码最开始就是开放的,基于 GPLv2 开源协议发布。
MINIX 的源代码也是开放的,但是有一些限制,不能用于商业用途。虽然这个限制后来被取消了,但 MINIX 好像是错过了一个黄金时代。如今,Linux 已经风靡了世界。
不过,Andrew S. Tanenbaum 教授的志向却不在于此。MINIX 的源代码发布后,有无数人的都希望向 MINIX 贡献代码,以便让 MINIX 变得更好。但绝大部分都被拒绝了。因为 Tanenbaum 希望源代码足够简洁,让学生们都能读懂;也要足够轻量级,能运行在"学生们都能买得起"的电脑上。
当然,MINIX 还是取得了很多商业的成功。有很多嵌入式系统中都运行着 MINIX。你可能不敢相信,Intel 的 CPU 中就运行着一个隐藏的 MINIX 系统。
我时不时地也会关注一下 MINIX。现在,MINIX 的版本已经是 3.0 了,有了很大的重构。我总是希望有朝一日我也可以用 MINIX 完成一些日常的工作,不过,现在看来,离这个目标还有很远的路要走。其实我也希望能将 FreeSWITCH 移植到 MINIX 上,但这项工作还没有开始。
MINIX 支持 32 位的 x86 和 ARMv7 架构,尚不支持 64 位。MINIX 现在可能还主要应用于嵌入式领域。
MINIX 是微内核的操作系统,Linux 是宏内核的(单一内核)。为此,Tanenbaum 和 Linus Torvalds 曾经有过一场著名的辩论,这场辩论被称为"Tanenbaum-Torvalds debate"。当时是 1992 年,Tanenbaum 说 Linux 的设计是错误的,在 1991 年还使用宏内核,就像倒退到 70 年代一样。但是这么多年过去了,Linux 的发展有了翻天覆地的变化,其宏内核也一直运行得很好。
也许微内核确实是好,Windows NT 也是微内核的。Mach 也一个微内核,最初是卡耐基梅隆大学的一个研究项目,后来被用于包括 NeXT OS、Mac OS X、GNU Hurd 等系统。但是,微内核的系统性能一直是个问题。在 Mac OS X 中,微内核架构也因为性能原因被改写了:"However, in OS X, Mach is linked with other kernel components into a single kernel address space. This is primarily for performance"。
MINIX 3 比 MINIX 2 大约慢 10%,MINIX 3 也没有跟其他系统对比的数据。在 MINIX 3 的 FAQ 中,写道:"MINIX 只是花了几个人年的工作,而其他系统都花费了成千上万人年的工作量。对 MINIX 而言,我们更注重可靠性,而不是性能。" 参见:https://wiki.minix3.org/doku.php?id=faq 。
What is the performance of MINIX 3 like?
We made measurements of the performance of MINIX 3 (user-mode drivers) versus MINIX 2 (kernel-mode drivers) and MINIX 3 is 5-10% slower. We have not compared it to other systems because there are so many other differences. The biggest difference is that MINIX 3 represents about a handful man-year of work so far and other systems represent thousands of man-years of work and our priority has been reliability, not performance.
虽然 MINIX 关于人年的比较有其道理,但是,从某种意义上说,相当于他们承认了微内核的性能确实有些问题。虽然性能不是唯一指标。
GNU Hurd 一直难产,可能跟微内核的复杂度也有关系。不过,为 Hurd 工作的人可能还不如为 MINIX 工作的人多。2008 年左右我在清华大学见过一次 Richard Stallman,当时就想问问他 Hurd 的进展,但由于当时英文太烂,没敢问。也许问了,但现在不记得了。
好了,扯远了。再回到《操作系统:设计与实现》这本书,为了写我的新书《大道至简,给所有人看的编程书》,我又有选择地读了一遍。这次读的是英文版第三版,图中的封面就来自于它。Tanenbaum 的英文写得很好,读起来真是上瘾。
原书里的内容有很多都不记得了,但是对哲学家就餐问题却印象很深。
第一版中还使用 Amsterdam Compiler Kit C 语言编译器,现在也换成 GCC 和 Clang 了。MINIX 1 兼容 UNIX V7,但现在 MINIX 3 现在也兼容了 POSIX 标准。当然,我也只是看了书。二十多年过去了,我再也没有使用过 MINIX。希望不久的将来,我能再用用它。