“這是一個瞬息萬變的時代。分布式計算的腳步漸行漸遠,網格計算的熱潮逐步退卻,雲計算和雲存儲正慢慢揭開麵紗……在所有的變化中,不變的是這些計算的支柱:操作係統!能否深刻理解它也許會決定雲時代的‘浮沉’。”
由上海交通大學鄒恒明著的《計算機的心智:操作係統之哲學原理》(以下簡稱《操作係統之哲學原理》)別開生麵,以生活哲學的視角對操作係統原理進行闡述,通過邏輯推理來演繹操作係統核心技術的奧秘,其討論範圍包括操作係統的所有基礎內容:背景與曆史、進程與線程、通信與同步、調度與死鎖、分頁與分段、磁盤與文件、輸入與輸出等。此外,作者還以新穎的組織方式講解了鎖的實現、同步機製的發展邏輯、從分段到段頁式的演變、多核環境下的同步與調度、操作係統設計的原則等內容。
1操作係統是計算機的心智
《操作係統之哲學原理》,作者在“第一章操作係統導論”的一開始就指出:“一個人覺得操作係統沒用,那是因為他不知道怎麼用,或者他沒有用操作係統的意願。說明白一點,你如果認為操作係統沒用,那是因為你的編程開發處在一個低級的水平上。如果你掌握了操作係統,你的編程水平將顯著提高。”
作者指出:要想學好操作係統,具有恰當的思維模式是十分必要的。這個思維模式就是本書所強調的“哲學”。
計算機程序的運行至少需要如下4個因素:
程序設計語言;
編譯係統;
操作係統;
指令集結構(計算機硬件係統)。
其中,操作係統在程序的執行過程中具有關鍵的作用。由於計算機的功能和複雜性不斷發生變化(趨向更加複雜),操作係統所掌控的事情越來越多,越來越複雜。同時,操作係統本身能夠使用的資源也不斷增多。操作係統是一個軟件係統,它使計算機變得好用(將人類從繁瑣、複雜的對機器掌控的任務中解脫),使計算機運作變得有序(操作係統掌控計算機上所有事情)。因此,操作係統的功能一般包括:
替用戶及其應用管理計算機上的軟、硬件資源;
保證計算機資源的公平競爭和使用;
防止對計算機資源的非法侵占和使用;
保證操作係統自身正常運轉。
作者進一步指出:將操作係統功能進行提升,就可以得出操作係統所扮演的兩個根本角色——管理者和魔術師。
本書集中精力對操作係統的核心內容進行分析,用大量的生活實例,生動地解釋了操作係統中的主要難點和模糊點,包括鎖的實現、同步機製的發展軸線、純粹分段到段頁式的演變、多核環境下的進程同步與調度和操作係統設計等內容,而放棄了操作係統核心以外的內容,如安全、多媒體係統、虛擬機技術、光盤技術等的論述。全書重點突出、邏輯清晰、內容連貫,便於學生順利掌握操作係統的核心內容,是了解計算機操作係統原理不可多得的教學參考書。
本書對操作係統原理的討論充滿趣味性:每一章都力求細致地闡明一個主題,將通俗的哲學原理和邏輯推理貫穿於每一個主題,構成全書的有機整體,並適當地引入計算機組成和編譯器知識,揭示操作係統在程序運行中發揮的作用,把讀者對操作係統的理解帶到一個嶄新的境界。
2操作係統的哲學原理
在詳細論述了操作係統的基本概念和各種機製之後,作者認為:首先,操作係統作為計算機的管理者,需要對計算機的各個組成部分進行管理,這就導致了CPU管理、內存管理、磁盤管理、輸入輸出管理等操作係統功能的出現和相互關聯;其次,操作係統作為魔術師,需要對計算機的各種硬件進行抽象和裝扮,以使其顯得更大、更快、更好和更容易使用。這些抽象就形成了進程、線程、虛擬內存、文件係統、各種I/O模式等操作係統構造的出現,而這些構造之間也因操作係統魔術師的角色而互相聯結起來。作者認為,除了管理和魔幻這兩條共同的紐帶外,操作係統各個部分還有一個聯結紐帶,即其設計上所遵循的哲學原理。作者認為:最為重要的核心是不同的生活哲學將導致不同的操作係統設計與構造。
在本書的第七篇(第22章),作者概括性地介紹了操作係統設計的10條哲學原理,它們是:
第1條哲學原理:層次架構。操作係統的功能分為多個模塊,並按層次分解。下麵一層向上麵一層提供功能,而上麵一層隻能對直接下屬進行控製。采用層次結構不僅使得操作係統的構造過程容易,也因為符合人類的習慣而更加易於理解,從而使操作係統結構清晰,節省開發操作係統的成本。
第2條哲學原理:沒有對錯。作者認為:操作係統本身並無對錯之分,隻有好壞之分。就像我們不能說Windows是對的,Unix是錯的。我們隻能說,Windows更容易使用,而Unix不太好使用而已。因此,在設計操作係統時,隻要達到功能、效率、公平、正確的平衡即可。例如,操作係統進程調度策略有很多,而每種調度策略有其適用的場景。我們不能說“時間片輪轉是對的,而優先級調度是錯誤的”。
第3條哲學原理:懶人哲學。以Unix操作係統裏麵fork係統調用的實現為例,作者介紹了在操作係統設計中懶人哲學的應用:fork係統調用中有時需要進行父子進程地址空間的複製,但在設計中“不到萬不得已不複製”。這在計算機術語中稱為懶惰或延遲的複製。懶人哲學的合理性在於提前將事情做掉也許是一種浪費。
第4條哲學原理:讓困於人。以文件係統為例,作者指出:對於操作係統來說,它需要保證自己的正確性,而文件夾對於操作係統文件係統的正常運轉至關重要,因此,文件夾必須保持不能出現問題,操作係統會使用各種原語操作保證文件係統的一致性。而用戶文件的一致與否並不影響操作係統本身的運行。雖然用戶文件的毀壞有可能激怒用戶,但這不是操作係統有義務管的事情。這種哲學就是“讓困於人”。
第5條哲學原理:留有餘地。例如,文件係統目錄夾的記錄裏麵通常都有一部分所謂的保留空間,如DOS目錄夾記錄裏麵就有10個字節的保留空間,而事實上,這10個保留字在Windows 98的文件係統裏麵就得到了利用。如果沒有這些保留字,將不得不設計全新的係統而導致無法兼容。
第6條哲學原理:子虛烏有。操作係統的目的是服務上層的應用程序和用戶,用戶要什麼就提供什麼。而提供的這種東西雖然在用戶看來實實在在,但實際上都是子虛烏有。例如,在操作係統裏麵,用戶看到的內存非常大(其實是與磁盤一樣大),速度無限快(其實是與緩存一樣快)。但實際上,我們的物理內存可能隻不過4G,速度也隻有緩存的十分之一。
第7條哲學原理:時空轉換。以頁表的實現為例。由於頁表的尺寸通常太大,占用內存過多,便將頁表分級,隻保留一部分頁表在內存,而其他部分放置於磁盤上。這樣,頁表所占空間大為減少,但付出的代價就是時間成本。
第8條哲學原理:策機分離。立法就是策略,執法就是實現機製。立法和執法的分離就是所謂的“策機分離”哲學。作者認為,操作係統裏麵的策機分離主要是為了實現的靈活性。比如“調度算法參數化”,算法在內核裏,參數可以由用戶指定。又例如,在程序設計領域,對界麵的設計和對界麵的實現是分開的;在計算機安全領域,對安全標準的設計
和安全設計的實現是分開的。
第9條哲學原理:簡單為美。作者指出,在數學領域有個不成文的共識:“如果一個問題有多個數字表示,那麼最簡單的表示通常是正確的。”在操作係統設計中,文件存儲的方式有網狀組織、樹狀組織、記錄流、數據塊流和字節流等各種選擇,而現代操作係統選擇的都是最簡單的字節流。
第10條哲學原理:適可而止。作者認為,第10條哲學原理是用來修正前麵9條原理的。即在前麵9條原理的貫徹過程中,要保持一個度,適可而止。例如,“簡單為美”但不能過於簡單。正如愛因斯坦所言:“一切都應該盡可能簡單,但沒有更簡單”。
3網絡書評
《操作係統之哲學原理》一書出版時間不長,但網絡上好評如潮。
有人說:“讀了本書,感覺比起一般講解操作係統的書來說,更加清晰透徹,生動有趣。書中的一些原理講解讓人茅塞頓開,認真看完本書後,操作係統也就掌握得差不多了!”