“如果不能在一個月內寫出作業系統,那你就是個笨蛋!”
“如果不能在一個月內寫出作業系統,那你就是個笨蛋!” ——說這話的人似乎就是個瘋子,不過這確實是我當年的心理感受。
01
伯克利大學播下的種子
上世紀70年代,我坐在伯克利的一間教室中,上巴特勒·蘭普森教授的作業系統課。
當時的我不可能知道, 巴特勒·蘭普森會獲得1992年圖靈獎,他的頭上會籠罩上一堆耀眼的光環:
著名的XEROX PARC研發中心的建立者
第一個個人計算機Alto的研發者
鐳射印表機,WYSIWYG(所見即所得),乙太網(Ethernet),區域網(Local Area Network)等重要發明的參與者。
我非常清楚地記得,蘭普森在課上講述了CTSS——世界上第一個分時作業系統——然後以他獨特的方式問道:
“有沒有人不能在一個月內寫出CTSS?!”
沒人舉手。
我也不敢舉手,因為我覺得如果你不能在一個月內寫出作業系統,那你就是個笨蛋。
蘭普森在我心裡埋下了一顆種子。
02
去荷蘭當教授
博士畢業以後,我面臨一個選擇:去工業界還是留在學術界?這時我想起了一件事:
有一年暑假,我去IBM實習(當然,是為了賺點錢),有一天我穿了一件顏色“不合適”的襯衫上班,我的同事告訴我這麼穿是不對的,還提出了“改進建議”, 從那時開始,我就覺得不適合在企業界做事了。
我的妻子是荷蘭人,於是我就和她一起移居到了荷蘭,在阿姆斯特丹的Vrije大學教書。其中有一門課就是作業系統。
70年代Unix剛剛流行起來,AT&T最初把Unix和原始碼都提供給大學和科研機構,所以使用Unix進行教學是非常自然的選擇。
當時John Lions寫了一本非常知名的書《萊昂氏UNIX原始碼分析》。
這本書真是一行一行地解釋Unix原始碼,受到大家的熱烈歡迎!
可AT&T有些“精打細算”的人不喜歡這樣,他們覺得:讓全世界的學生來“圍觀”偉大的Unix原始碼是個非常可怕的主意,於是 Unix V7附帶了一個License : 不能把V7 用於教學!
我認為這可能是IT公司犯的最傻的錯誤!
我想起了蘭普森說的一個月寫個作業系統的話,我為什麼自己不寫一個呢?
03
作業系統的泥潭
我很喜歡阿姆斯特丹,這是一座宜人、寧靜的城市,我很喜歡這裡的天氣,一年中大部分時間都是灰濛濛的,下著毛毛細雨,很適合在室內和溫暖的電腦呆在一起。
我開始寫一個和Unix V7相容的作業系統,具體花了多長時間我有點記不清了,但是即將完成的時候,我和你們一樣,遇到了一個難以復現的巨大Bug:它執行15分鐘以後就會崩潰!
這真是讓人大傷腦筋!無奈之下,我就寫了一個具備跟蹤除錯功能的PC模擬器,讓作業系統在這個模擬器中執行,每次崩潰,我就會檢視最近的10萬行指令,看看到底發生了什麼。
PC模擬器花費了我相當多的時間,如果我有商業頭腦的話,應該把它做成產品,因為這就是未來的VMWare啊!
終於有一天,我的作業系統可以完美地在模擬器上執行了,永不崩潰。
趕緊移到真正的硬體上執行,讓我崩潰的是,它又開始間歇性地罷工了!
誰說一個月就能寫個作業系統?!
就在我要放棄的時候,我的一個學生羅伯特告訴我:當Intel CPU變熱的時候,會產生15號中斷 。
而我並沒有捕獲這個中斷,因為CPU手冊上並沒有提到它。
感謝羅伯特,他把我從泥潭中拉來出來,我只需要加上一小段程式碼,作業系統就可以穩定執行了。
我決定把作業系統叫做Mini UNIX ,簡稱Minix。
04
寫書
Minix可以穩定工作以後,我就決定像Lions那樣,寫一本書,這樣就Minix就可以用來教學了。
這本書的每一章都有三個部分:
1. 講述作業系統每個元件的通用設計原則
2. 這些原則是如何應用到Minix中的,以及關鍵的資料結構
3. 對原始碼的詳細描述
書名就叫做:
如果你想獲得原始碼的話,可以從出版社Prentice Hall 單獨購買,售價 69 美元, 包括10張軟盤。
69美元價格不便宜,但是也只是略高於製造成本,考慮到1987年Unix的大學教育許可證是300美元,商業許可證是28000美元,Minix第一次將一個類Unix的作業系統的成本降低到了學生可以接受到的水平。
在釋出後的幾個月內,Minix成為了一個狂熱的產品,擁有自己的USENET新聞組comp.os.minix,其中有40000名訂閱者。
許多人開始纏著我改進它, 我每天都要收到200封電子郵件,內容大都是:“我需要一個偽終端,這週五就要!”,我的回答通常是:
“No”!
因為我想讓Minix保持簡單,這樣學生們可以理解,我不希望Minix變成一個像Unix那樣複雜的用於生產環境的系統。
並且當時Unix的一個分支BSD非常穩定、成熟,有龐大的社群和追隨者,所以我也沒想讓Minix進入這一市場,可是後來AT&T認為BSD侵犯了版權,對它發起了一場訴訟, 花了幾年的功夫,這嚴重阻礙了BSD的發展。
在這幾年中,有個叫Linus的芬蘭小夥子購買了Minix原始碼,在上面玩得不亦樂乎,最後折騰出了一個全新的作業系統Linux, 伴隨著網際網路的大潮,全世界程式設計師都參與開發, Linux迅速發展起來,填補了免費Unix的空缺。
Linux的故事參見《Linus : 我財務自由後,我卻失眠了!
05
意外之喜
Minix的獨特之處就是“微核心”:作業系統只有很小部分功能執行在核心態,大部分功能檔案系統、記憶體管理等都執行在使用者態。
這樣,當某一部分出錯的時候,可以輕鬆恢復。甚至在不停機的情況下,就可以完成作業系統元件的升級。
這種特性對於高可靠的系統特別重要,如航空電子系統、噴氣式戰鬥機、醫院的呼吸機——系統失敗就意味著有人死亡,其中大多數都是微核心。
前些年,有Intel的工程師聯絡我,問了我一些技術問題,還想讓我對Minix 3進行一些針對性修改,後來我們就沒有聯絡了。
沒想到, 後來爆出一個大新聞, 從2008年開始,Intel 居然把Minix用到了它的CPU的ME(Management Engine)管理引擎當中。
這個ME相當於一個小型、低功耗電腦系統,執行在Ring -3 (Windows, Linux等執行在Ring 0), 我的Minix就駐紮在這裡。
執行在Ring -3 的Minix 有一個網路堆疊、檔案系統、很多驅動程式、甚至還有一個Web伺服器!
聽起來是不是很可怕?怪不得Google努力地從自家伺服器中移除Minix。
不管如何,MINIX現在可能是世界上使用最廣泛的x86電腦作業系統了。
06
蝴蝶的翅膀
根據混沌理論,亞馬遜的一隻蝴蝶煽動翅膀,就可能引起美國海岸的一場颶風。
如果當年羅伯特沒有偶然地告訴我15號中斷,就不可能有Minix。如果沒有Minix,Linux也就不復存在。這樣基於Linux的Android 也可能不存在, 現在蘋果和三星的市值可能大為不同, IT界可能會走上另外一條道路。
————————————————
版權宣告:本文為CSDN博主「碼農翻身」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/coderising/article/details/120963730
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30239065/viewspace-2839590/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自制作業系統(一) 第一個作業系統作業系統
- 各個作業系統的 作業系統日誌作業系統
- 如果你要做一個蘋果餡餅 那你必須創造出宇宙蘋果
- 作業系統-1.1_2作業系統四個特徵作業系統特徵
- 自制 os 極簡教程1:寫一個作業系統有多難作業系統
- 在一個硬碟上安裝五個作業系統(轉)硬碟作業系統
- 中國能不能寫出作業系統?作業系統
- truncate一個linux作業系統檔案Linux作業系統
- 手機寫作業系統之 製作第1個啟動盤作業系統
- 作業系統(一):作業系統概述作業系統
- 如何寫一個能在gulp build pipe中任意更改src內容的函式UI函式
- 一個作業系統下安裝多個版本DB的Listener配置作業系統
- 製作一個報警系統
- 【作業系統】作業系統綜述(一)作業系統
- 解密《一個作業系統的實現》這本書解密作業系統
- Oracle推出全球首個自治作業系統Oracle作業系統
- 9 個免費的雲作業系統作業系統
- 幾個作業系統的基本概念作業系統
- 如果社群出一個 Beego 教程就好了Go
- YodaOS: 一個屬於 Node.js 社群的作業系統Node.js作業系統
- 跟大神一起製作一個屬於自己的Linux作業系統!Linux作業系統
- 一個紐西蘭人用了五年業餘時間開發了一個作業系統:Winix作業系統
- 作業系統寫題總結作業系統
- [譯] 如何在 5 分鐘之內寫出一個不錯的 loading 介面
- 一個作業系統的設計與實現——第23章 快速系統呼叫作業系統
- 一個故事看懂計算機作業系統的進化史計算機作業系統
- 配置《Orange's一個作業系統的實現》環境心得作業系統
- [作業系統]訪問一個邏輯地址發生了什麼作業系統
- Python檢驗一個檔案是否存在,如果不在就自己填寫內容。Python
- 3分鐘短文:Laravel寫個命令列,你就是下一個Geek!Laravel命令列
- 【一】作業系統原理作業系統
- 谷歌宣佈一個用Rust編寫的新作業系統:KataOS谷歌Rust作業系統
- 寫作業系統之實現程式作業系統
- 那些用JavaScript寫的作業系統JavaScript作業系統
- 自己動手寫作業系統(第一天)作業系統
- 令人感嘆的10個非主流作業系統作業系統
- 雙硬碟grub引導9個作業系統(轉)硬碟作業系統
- 從原始碼構建一個極簡的Linux作業系統原始碼Linux作業系統