前言
本書針對的讀者,是作業系統基礎知識薄弱,但又想把作業系統弄清楚、喜歡追根究底的技術人,在此向你們致敬,本書用詼諧幽默的語言,把深奧的作業系統儘量說明清楚,讓讀者在輕鬆閱讀中學通深奧的知識。
多數學習作業系統的讀者都會有這樣的感受:
(1) 「 太難了,對於作業系統這個龐然大物我簡直無從下手」;
(2) 「 很後悔選了這門課(大學一些科系中作業系統是選修課),甚至不想學習電腦了」;
(3) 「 上課完全聽不懂,我都不想繼續聽下去了」;
(4) 「 即使實驗做出來了,由於只是完成了局部功能,我依然不明白作業系統是怎樣執行起來的,甚至不知道自己在做什麼」。
以上的感受我都有過,坦白說,這門課並不是很難,但想完全明白這門課真不容易。我是個喜歡追根究底的人,為了弄清楚這背後的真相,我花大量時間學習課程之外的內容,甚至付出慘痛的代價-- 大學中第一次考試不及格,作業系統這門課我是第二次才考過的。這確實很「諷刺」-- 作業系統不及格的人在寫作業系統書籍!但轉念一想,考試過了的同學並不代表能夠寫出作業系統,因為考卷上並不是在考如何寫一個作業系統。和技術能力相比,考試成績並不重要。
想像一下,如果是愛因斯坦那樣的天才為我們講解物理知識,我們會覺得物理更容易了解嗎?一定是不會的,因為在愛因斯坦眼中比較容易的內容也許對我們來說非常深奧,他用B 解釋A 的時候也許會讓我們更迷惑,因為B 我們也不懂,這就是基礎的問題了。幸運的是閱讀本書時讀者只要有C 語言和部分組合語言的基礎即可,相關的其他方面知識我都會詳細介紹,並以更容易的方式去解釋技術難點,讀者不必擔心看不懂本書。
回憶一下學車的經歷:教練讓學員先踩離合器再入檔,然後再踩油門,車子就開動啦。如果學員總是學不會這些,有可能是學員根本不知道什麼是離合器,或不知道離合器的作用是什麼。即使把這些操作背下來,也會對駕車感到心有餘而力不足,可見,只有了解背後的原理,才會知道自己在做什麼,駕車才變得遊刃有餘。
以上情況對我們學習作業系統來說也同樣存在,例如當老師介紹中斷發生時的上下文保護時,我們更多的疑問不是如何儲存CPU 的上下文資料,而是想知道為什麼在不同的特權等級下會使用不同的堆疊,這背後的原理是什麼,並且這是如何做到的。
諸如這種的疑問需要了解硬體原生支援的執行機制,因為很多操作都是硬體自動完成的,例如處理器進入0 特權等級時,會自動在工作狀態段TSS 中獲得0 特權等級的堆疊位址,這不需要人工干涉,完全由處理器維護。我們想知道的是,硬體在背後自動完成了哪些工作,這樣才便於我們了解作業系統的全貌。
作業系統受制於硬體的支援,它的能力取決於硬體的能力,因此,要想全面了解作業系統,不僅需要了解上層軟體的演算法、原理、實現,還要了解很多硬體底層的內容。和硬體相關的知識是在微機介面電路中說明的,而絕大多數讀者在學習這門課時,根本不知道它有何用,只有學習作業系統課程時才用到它,因此,本書內容兼顧相關的硬體知識。
除硬體外,本書還把作業系統中的理論付諸於實作,讓讀者真正學到包含在作業系統中的實實在在的技術,例如在程式中實現了著名的生產者消費者問題,還有處理程序、線性、阻塞、號誌、鎖、檔案系統、目錄、shell、管線等。各個章節的程式都可獨立執行,方便偵錯,本書更讓讀者有成就感的是,我們最後完成的作業系統總共程式量只有幾千行左右,相當大地減少了作業系統原始程式閱讀的工作量。
作業系統還是比較龐大的,因此,大部分介紹作業系統原理的書中,對各個部分都是分拆出來介紹的,這導致我們學習作業系統時猶如瞎子摸象、管中窺豹。本書內容不再局部學習,而是把所有局部還原成一個整體,做出一個真正的作業系統。
為了讓讀者不再懼怕作業系統,同時也為了完成我自己的心願,我辭職專心進行本書的撰寫,在此期間也曾拒絕了多份回報豐厚的工作,現在想想真是瘋狂??苦了我的父母和女朋友,在這裡跟你們說聲抱歉,你們「縱容」我的偏執,真心不容易,辛苦啦,我愛你們!
感謝我在北京大學就讀期間的Linux 核心課程老師(同時也是我的所究所學生導師)荊琦教授和作業系統課程老師陳向群教授,很榮幸能夠成為您們的學生,時至今日我常常回想起課堂上您們言傳身教並為我解答問題的身影,您們淵博的知識和教學上嚴謹的態度深深影響了我,僅以此書向我這兩位恩師致謝。
感謝父母給予我的了解和寬容,以後我一定加倍努力回報您們的養育之恩!
最後,感謝女朋友給予我的陪伴和照顧,在寫此書的過程中我深深體會到:愛並不僅表現在相信對方一定能成功,更多是表現在支援對方去做想做的事,即使失敗了也不會嫌棄。儘管在這漫長枯燥的19 個月當中,如果沒有妳的「嘮嘮叨叨」本書早就寫完了,但剛好是這種「嘮嘮叨叨」下的不離不棄讓我相信這世上還有真愛。
本書讀者交流QQ 群為:148177180。
?
作者
於北京大學圖書館