重读经典《操作系统:设计与实现》

距离第一次阅读《操作系统:设计与实现》,已经是 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。希望不久的将来,我能再用用它。

本文永久链接:https://www.dujinfang.com/2024/03/03/MINIX.html

相关推荐
别说我什么都不会5 小时前
鸿蒙轻内核M核源码分析系列十 软件定时器Swtmr
操作系统·harmonyos
别说我什么都不会1 天前
鸿蒙轻内核M核源码分析系列九 互斥锁Mutex
操作系统·harmonyos
别说我什么都不会1 天前
鸿蒙轻内核M核源码分析系列七 动态内存Dynamic Memory
操作系统·harmonyos
别说我什么都不会2 天前
鸿蒙轻内核M核源码分析系列六 任务及任务调度(3)任务调度模块
操作系统·harmonyos
徐徐同学2 天前
【操作系统】操作系统概述
操作系统·计算机系统
守望时空333 天前
Linux内核升级指南
linux·操作系统
塞尔维亚大汉3 天前
OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【用户态内存调测】
操作系统·harmonyos
别说我什么都不会3 天前
鸿蒙轻内核M核源码分析系列五 时间管理
操作系统·harmonyos
老猿讲编程4 天前
探索Zephyr在汽车领域的应用潜力与挑战
汽车·操作系统
jllws14 天前
理解计算机系统_虚拟内存(二)缓存
操作系统·深入理解计算机系统