今天跟大家推荐一本由金門大學的陳鐘誠教授所撰寫的系統程式教科書,書名叫作,嗯...就叫作"系統程式"。:)
因為小弟一直對系統程式非常有興趣,所以只要看到有什麼新鮮的東西,不管書籍或文章,必定都會儘可能地加以拜讀。但是講解系統程式的許多作者,往往才高八斗,很多時候一個段落裏面就提到了數個我們可能之前都沒有過的概念與名詞。很多愛好者都是在各種模糊中努力打滾了許久,才慢慢獲取一些基本概念,但其實我們可以不用這麼辛苦。
這本書的最大優點就是將許多看似神祕複雜的概念簡化再簡化,直到不能再簡化了為止,然後讓你看到:
1. CPU如何設計與實作其虛擬機
2. assembler如何設計與實作
3. Linker與Loader如何設計與實作
4. compiler如何設計與實作
當我閱讀到書中所設計的極簡版CPU0時,心中不免有些疑問,"天啊,買錯書了,這本書太過基礎了...",但很快地,當我繼續跟著作者一步一步的實現出assembler、compiler、virtual machine,並且用自製的compiler去編譯source code為assembly code,然後再用assembler去組譯assembly code為執行檔,最後在CPU0的虛擬機上跑出1+1=2的結果時,真是令人興奮啊!!
於是,我們可以用很短的時間(我大約花了兩周的時間閱讀並實驗書中的實作)就獲得一個具體而微的計算機系統,並了解了重要組件之間的合作關係。總的來說,這本書值得那些想了解神祕的系統程式的愛好者閱讀,也值得要寫教科書的作者學習,看看要如何以簡單的方式解說複雜的系統。
講完了優點,來講缺點...有些部份簡略的有些過頭了,應該再加入一點解釋,比如說compiler的步驟為何要切割成數個?沒碰過compiler的學生大概很難理解為何會需要abstract syntax tree吧?另外程式碼的部份,應該可以教導學生在面對較大結構的程式時,要如何進行切割,適當地引入一點C的慣用法,畢竟系統程式中,以C為大宗,熟悉其慣用法也是蠻重要的,舉例來說,很多地方用了超巨大的switch case,如果試著用table of function pointers或structure with callback funcion去化簡主結構的邏輯,就更能凸顯主結構的核心流程了。
當然啦,由於這本書是設計給一般資訊科系約大二時的課程所用,所以目的在於教育用途,如果想看到"真實的"系統的話,就必須再額外深入學習各個領域,然後...嗯, 學海無涯,Keep walking. :P
因為小弟一直對系統程式非常有興趣,所以只要看到有什麼新鮮的東西,不管書籍或文章,必定都會儘可能地加以拜讀。但是講解系統程式的許多作者,往往才高八斗,很多時候一個段落裏面就提到了數個我們可能之前都沒有過的概念與名詞。很多愛好者都是在各種模糊中努力打滾了許久,才慢慢獲取一些基本概念,但其實我們可以不用這麼辛苦。
這本書的最大優點就是將許多看似神祕複雜的概念簡化再簡化,直到不能再簡化了為止,然後讓你看到:
1. CPU如何設計與實作其虛擬機
2. assembler如何設計與實作
3. Linker與Loader如何設計與實作
4. compiler如何設計與實作
當我閱讀到書中所設計的極簡版CPU0時,心中不免有些疑問,"天啊,買錯書了,這本書太過基礎了...",但很快地,當我繼續跟著作者一步一步的實現出assembler、compiler、virtual machine,並且用自製的compiler去編譯source code為assembly code,然後再用assembler去組譯assembly code為執行檔,最後在CPU0的虛擬機上跑出1+1=2的結果時,真是令人興奮啊!!
於是,我們可以用很短的時間(我大約花了兩周的時間閱讀並實驗書中的實作)就獲得一個具體而微的計算機系統,並了解了重要組件之間的合作關係。總的來說,這本書值得那些想了解神祕的系統程式的愛好者閱讀,也值得要寫教科書的作者學習,看看要如何以簡單的方式解說複雜的系統。
講完了優點,來講缺點...有些部份簡略的有些過頭了,應該再加入一點解釋,比如說compiler的步驟為何要切割成數個?沒碰過compiler的學生大概很難理解為何會需要abstract syntax tree吧?另外程式碼的部份,應該可以教導學生在面對較大結構的程式時,要如何進行切割,適當地引入一點C的慣用法,畢竟系統程式中,以C為大宗,熟悉其慣用法也是蠻重要的,舉例來說,很多地方用了超巨大的switch case,如果試著用table of function pointers或structure with callback funcion去化簡主結構的邏輯,就更能凸顯主結構的核心流程了。
當然啦,由於這本書是設計給一般資訊科系約大二時的課程所用,所以目的在於教育用途,如果想看到"真實的"系統的話,就必須再額外深入學習各個領域,然後...嗯, 學海無涯,Keep walking. :P
留言
張貼留言