1. 程式人生 > >讀 自己動手寫作業系統

讀 自己動手寫作業系統

               

  用一個月左右的時間讀了《自己動手寫作業系統》,這是一本讓人讀著很過癮,卻也特別累的一本書。

  對作業系統的興趣由來已久,只是一直未能找到入門之徑。作業系統教材是個令人生畏的東西,它可以告訴人有什麼,卻不能告訴人為什麼,從那裡瞭解的作業系統有如盲人摸到的象,得到各個部分,卻不能擁有整體,加之缺乏實踐的支援,理論顯得蒼白空洞。如Linux般的開源作業系統,雖然可以讓人坐擁全部原始碼,但一來規模龐大,讓人不知從何入手,二來原始碼背後更多的是業務——作業系統和硬體知識,不瞭解業務的人很難憑一己之力破解原始碼的奧祕。客觀如此,更重要的還是主觀的不努力。

  《自己動手寫作業系統》則為如我一般挑剔的人打開了一扇門,從一點一滴的小處著手,一步步構建出一個簡陋的作業系統雛形——Tinix,雖然它還不具備任何實際的價值,甚至算不上一隻五臟俱全的麻雀,但對於想走近作業系統的人來說,這已經足夠了,如果能夠隨著它一路走來,至少可以具備更進一步的基礎,再去遨遊廣闊天地,便不會迷失於龐雜的理論與原始碼之中。

  這本書的名字給人的提示是,它是一本以實踐為基礎的書,因此,閱讀之初我便給自己定下了步步緊跟的策略。照著書敲程式碼也難免出錯,再者書中有一些遺漏,只有對比光碟中提供的原始碼才能發現其中的細微之處,所以,常常是一段程式碼要花相當長的時間進行除錯。實踐證明,這種方法需要花費相當的精力,這也是我為什麼會認為讀這本書很累的原因。但是這種做法對於理解書中內容大有裨益。看明白,做一遍,除錯,這是幾個截然不同的境界。很多細節的東西,只有經過除錯才能發現。即便是自己編寫的程式碼,如果沒有經過除錯,恐怕也難說真正的理解。

  作者在後記中寫到,這本書最大的價值在於,它讓作業系統的實現這個問題變得具備“可操作性”。正是因為這樣,我才可以追隨它一步步走來。在這點上,我讀到第三章《保護模式》就已經體會頗深了。我曾經讀過很多關於保護模式的內容,不過,由於缺乏實驗,我只是瞭解一些概念,卻不曾深刻體會。在第三章中,通過一個個簡單的小例子,切換至保護模式,設定GDT和LDT,使用分頁,中斷處理等等書本上的概念活靈活現的展現在我的面前,那些艱澀的概念一下子便得再簡單不過了。

  市面上關於原始碼剖析的書很多,但是,即便像侯捷先生這樣教育大家編寫的《深入淺出MFC》、《STL原始碼剖析》大多數情況下也只是講了怎麼做,而無法說出為什麼,原因很簡單,這些書是站在旁觀者的角度看問題,而很多問題只有開發者才是真正理解的。所以,這些原始碼剖析的書有其價值,但深度上還存在相當的欠缺。這本書的作者恰恰是站在了開發者的角度來討論問題,所以,我們有機會看到了一個思考的過程,而不僅僅是一個結果。這一點從第六章《程序》中時鐘中斷處理程式的一步步進化便得以管中窺豹。

  不得不提一下的是作者的寫作功力,讀過了許多生澀的技術書籍,這本讀起來很舒服的書倒顯得有些另類。它屬於我心目中期盼的那種“形神兼備”的好書,正是作者相當不錯的表達,才是這本書讓人享受技術的同時又可以體味閱讀的樂趣。當然,其中還是有些技術細節讓人昏昏欲睡。

  讀書,首先要找到適合自己的書,這樣我們才能從中有所收穫,畢竟,技術書籍中很少能夠找到滿足所有層次需要的書。《自己動手寫作業系統》的定位是一本入門書,顯然,它不適合已經過了這個階段的人,如果因此埋怨這本書檔次太低,那就怪不得旁人,因為自己走錯了路。

  如果你和我一樣,對作業系統有興趣卻不得門徑,不妨《自己動手寫作業系統》。