Monday September 05, 2005 國內有一家知名的老牌出版社,過去出版了很多經典的老書,包括Windows作業系統核心、CPU保護模式等,幾乎每本都膾炙人口,可是近幾年卻沒有類似的出版品問世。筆者對該出版社的轉變感到非常疑惑,所以逮到機會就詢問該出版社的朋友,他們給我的答案是,過去的IT從業人員,看到任何講述特殊技術的書籍,或是看不懂的書名,不管如何,一定會買一本回家,找機會學習。而現在的IT從業人員,見到看不懂的書名就避之唯恐不及,買書都是以可以最快找到他們所要的結果為主,而這些朋友在學生時代,通常只購買能夠最快找到課堂作業答案的書籍。
其實這種情況的演變,並非現代IT從業人員的錯。在過去,開發人員可以直接在DOS下叫用中斷,直接和機器溝通,在Windows下,最有效率的方法就是直接呼叫Win32 API。而隨著時代的進步,軟體越來越複雜,整個資訊科技的分枝越來越細,再也沒有任何一個人有能力搞懂所有的技術,就像現代西方醫學的分類,內科醫生對泌尿系統的了解比不上泌尿科醫生,泌尿科醫生對腎臟的了解,也比不上專攻腎臟的腎臟科醫生。懂得作業系統運作的人不見得了解Java虛擬機器如何運作,而知道如何實做Java虛擬機器的人,也不見得可以寫出好的Java應用程式。所有的開發人員和真正運作的機器之間,隔了一層又一層的抽象層。這些抽象層之所以產生,就是為了讓開發人員『不要管底層怎麼做』,可以快快樂樂地開發應用程式。於是,Java和.net變成顯學,在這個以Web應用程式為主的時代裡,ASP.net和JavaServer Faces變成顯學中的顯學,卻鮮少人會問『那麼CLR Hosting怎麼實現?』、或是『如何實作一個J2EE Web Container?』因為這些問題沒有急迫性,就算不懂,對薪水根本沒影響,如果花時間去窮究,反而專案惠趕不上時程進度。
即使如此,作業系統還是每天出現在我們生活中,我們買來的硬體要能夠幫我們做點事,非得先灌好作業系統才行,不管是Windows、Linux、FreeBSD、或是Solaris x86版。撇開組合語言不談,要在每種平台上開發出最有效率的應用程式、或是發揮該平台所賦予的所有功能、甚至想要產生一個抽象層讓其他人快快樂樂地開發應用程式,那麼C或C++無疑是最佳選擇,這是一個與機器隔閡最少的位置。當您選擇了這條路,雖然少了現代高階程式語言所附的豐富函式庫(Java Class Library、.NET Framework),很多功能都要自己親自動手,但是也進入了一個前所未有的發揮空間。既然這是一個離機器最近的位置,開發人員跟機器之間只隔了一個作業系統,這個時候,了解作業系統的運作就變得非常重要。
市場佔有率最高的作業系統
如果您所從事的平台是目前佔有率最高的Windows平台,Microsoft Windows Internals, Fourth Edition: Microsoft Windows Server 2003, Windows XP, and Windows 2000這本書就是必備書籍。這本書經過四個版本的演進:
Windows NT for Open VMS Professionals
Inside Windows NT, Second Edition
Inside Microsoft Windows 2000, Third Edition
Microsoft Windows Internals, Fourth Edition
每一次改版,作者都將Windows作業系統最新的改變與資訊做了詳盡的說明。作者之一的 David A. Solomon,早期在Digital Equipment Corporation,將近10年的時間從事VAX/VMS的開發工作,後來全心轉移至Windows NT開發人員的教育訓練工作(曾經有人說,WNT就是從VMS三個英文字母各自向後偏移一個字母而來),業界一直認為Windows NT和VMS關係匪淺,因為Windows NT的開發人員很多來自Digital Equipment Corporation,尤其是VMS的首席設計師,也是Windows NT設計小組的成員。從這本書的版本演進,大體上可以看出一個輪廓。
來勢洶洶的小企鵝
除了Windows作業系統之外,市場上公認最具有淺力的大概就是Linux作業系統,要能夠理解Linux Kernel,首推Understanding the Linux Kernel, 2nd Edition這本書,不過這本書於2002年出版,講解的是2.4版的Kernel,而目前最新的Kernel版本為2.6,因此稍嫌老舊了些,即使如此,並不影響這本書的可讀性,作為一本介紹Linux Kernel的入門書,這本書有其獨特性。閱讀此書的時候,建議可以搭配O’Reilly的另外一本書Linux Device Drivers, 3rd Edition為輔助,這本書第三版於2005年2月出版,講的是2.6版Kernel上的驅動程式開發,大家都知道驅動程式的開發和作業系統內部運作有密不可分的關係,因此這本Linux Device Drivers, 3rd Edition,有很多地方足以和Understanding the Linux Kernel, 2nd Edition相輔相成,彌補一些新舊版Kernel上的差異,或者作為彼此書中主題的輔助和延伸。
專家們喜愛的小惡魔
另外一個廣為人使用的Unix作業系統,就是以一個小惡魔為圖騰的FreeBSD了。FreeBSD以嚴謹著稱,雖然並非各種新軟體都能夠立刻找到FreeBSD的版本,但是FreeBSD的穩定性,讓很多專家們愛不釋手,尤其是目前火熱的MacOS X作業系統,其核心Darwin,有很大的部分也是來自於FreeBSD的Kernel。所以不管是想研究FreeBSD或是MacOS X作業系統的朋友,這本The Design and Implementation of the FreeBSD Operating System肯定可以帶來最多幫助,專門介紹Linux Kernel的書有許多,但是介紹FreeBSD Kennel的書僅此一本。
開放的太陽