重讀經典《作業系統:設計與實現》

七歌杜金房發表於2024-03-03

距離第一次閱讀《作業系統:設計與實現》,已經是 20 多年了。當時,差不多是 2002 年吧,我已經參加工作了。我大學不是學計算機的,因而也沒有上過作業系統的課。第一次去上海,在上海圖書館看到這本書(中文版),就買了回來,讀了很多遍。現在,書好像找不到了,只記得是兩本,一本是理論,一本是原始碼。

我慶幸買了這本書。Linus Torvalds 說,這本書改變了他的一生。雖然這本書沒有改變我的一生,但對我影響也很大。

“那年夏天我做了兩件事。第一件事是什麼都沒做。第二件事是讀完了 719 頁的《作業系統:設計與實現》。那本紅色的簡裝本教科書差不多等於睡在了我的床上。”—— 摘自 Linus Torvalds 自傳《Just For Fun》。

我喜歡 UNIX 和 Linux,對書中講得 MINIX 也充滿了興趣。我在我的電腦上安裝了 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

相關文章