撰寫這本書的原因

一個迷惘了 20 年的資訊系學生

20 年來,大部分的「系統程式」教科書都是採用 Beck 的 “System Software: An Introduction to Systems Programming,” 一書,這本書可以說是系統程式課程的聖經。

1989 年,我在交通大學唸書時,老師就是使用這本書作為教材,當時對這門課似懂非懂,雖然我很認真的在課堂上寫出一個 SIC 機器的組譯器,但是仍然認為這門課與產業實務無關,我未來應該用不到它。

進入產業界之後,我才發現原來「系統程式」並不是一種理論,而是整個台灣電子資訊產業的核心。整整經過 20 年,我才恍然發現這門課的用途。環顧台灣的電子資訊產業,亟需要大量的系統程式人才,但是 Beck 的書籍所提供的內容,無法讓學生認識到這個情況,因為只有理論而沒有實務。

進入產業的菜鳥

大約在五年前,我開始教授「系統程式」這門課程,也是採用 Beck 的書籍作為教科書,我深深的體會到一種無力感,因為學生完全不知道如何真正的操作系統程式,這讓我想起自己在博士班四年級進入松下台灣實驗室工作的情況。

雖然我很熟析 Beck 的整本書籍,但是松下的工程師所使用的 gcc、make、CVS、Linux 等工具,都是我所不曾學習過的,這讓我相當震撼。甚至,像是 C 語言當中的 #ifdef 等條件式編譯,記憶體映射輸出入 (Memory Mapped IO) 等技術,也是我從來沒有見過的。

還好,程式一直是我的最愛,與其說我是一個大學教師,不如說我是一個程式設計師更為恰當。我很快的向同事學習了這方面的技術,並且開始在工作上真正使用「系統軟體」來撰寫「系統程式」,成為一名博士級的系統程式設計師,甚至要帶領幾個同事一起工作。

回到學術界教授「系統程式」

這個經驗讓我深刻的感受到 Beck 書籍在實務上的不足之處,當我開始進入大學教授「系統程式」課程時,我其實並不想用 Beck 的教科書,但是無論我多麼努力的尋找,就是無法找到一本更好的系統程式教科書,我開始感到沮喪,於是又採用了 Beck 的書籍作為授課教材。

在教學的過程當中,我必須從「組合語言」、「C 語言」、「編譯器」、「計算機結構」、「嵌入式系統」、「作業系統」、「開放原始碼」等領域,借用一些教材過來,甚至自己努力編寫一些補充教材,才能稍微讓學生體會到「系統程式」的實務,但這樣雜七雜八的材料,很容易讓學生落入「系統程式」的叢林中,因而迷失方向。

撰寫本書

於是我深深感覺到應該要有人撰寫一本這樣的書籍,因此寫了一份書籍摘要放在網路上,沒想到旗標公司的編輯彥發兄看到之後,竟邀請我撰寫一本全新的「系統程式」。

既然我對程式設計的興趣遠大於寫論文,於是我接受了這個任務,經過兩年的努力,這本書終於完成了,在寫作的最後階段,我就以電子檔讓學生試用了這本書,以便取得回饋意見並進行修正,希望能讓出版的書籍能順利的結合理論與實務。

主題的選擇

在龐大的系統程式領域中,我不得不有所取捨,在書籍討論的主題上,我選取了下列主題,進行理論的闡述與實務的演練。並且利用 C 語言實作「組譯器、編譯器與虛擬機器」等三個主要的系統程式,以便用程式印證理論,讓理論與實務結合。

章節 主題 理論 實務 實作
第 1 章 系統軟體 導論 GNU 工具, Dev C++ , Cygwin
第 2 章 電腦的硬體結構 CPU0 簡易處理器 x86 IA32 處理器
第 3 章 組合語言 CPU0 的組合語言 GNU 的 x86 組合語言
第 4 章 組譯器 CPU0 的組譯器 GNU as 組譯器 as0 組譯器
第 5 章 連結與載入 CPU0 的連結載入 GNU 連結工具 , make
第 6 章 巨集處理器 CPU0 的巨集 C 語言的巨集
第 7 章 高階語言 語法、語意、平台 C 語言
第 8 章 編譯器 C0 語言 gcc 編譯器 c0c 編譯器
第 9 章 虛擬機器 CPU0 的虛擬機器 Java 的 JVM , Virtual PC vm0 虛擬機
第 10 章 作業系統 行程、記憶體、檔案輸出入 Linux fork , thread
第 11 章 嵌入式系統 M0 電腦 ARM S3C2410 實驗板 C 與輸出入
第 12 章 系統軟體實作 CPU0 處理器 , C0 語言 as0 , vm0 , c0c

本書的網站

筆者為本書開闢了一個網路專區 http://sp1.wikidot.com/,以便能讓讀者取得相關的補充教材,像是範例程式與投影片等等。在網路發達的今日,系統程式領域並非一本書即可涵蓋的,我們希望透過該網站,能隨時讓讀者取得最新的相關訊息,並且隨時更新書籍中的錯誤,甚至介紹本書中所無法涵蓋的主題。

未來的方向

現在,系統程式的課程變得更重要了,為了強化台灣電子資訊硬體產業的優勢,產業亟需大量的系統程式人才,Google 的 Android 與 Chrome 平台的釋出,讓台灣與中國的電子資訊產業得以有機會整合系統軟體,開創出更大的市場。這是一個不需要龐大的資本,但是需要大學資訊系教師大量參與的領域。系統程式的人才是兩岸產業的未來的一個決勝關鍵點,筆者希望透過本書能讓學生快速學習系統程式的理論,並且能實際體會系統程式的操作方法,以便作為進一步的課程,像是「編譯器」、「嵌入式系統」、「作業系統」等課程的基礎。

筆者會盡可能將所學習到的系統程式技術與資訊,快速的放到書籍網站上,讓這本書不只是一本書,而是一個龐大領域的入門捷徑,也希望系統程式的同好與先進前輩,能夠不吝指教,並且分享相關資訊給我,讓我能快速分享給其他同好。

讓我們一起為台灣電子資訊產業的未來而努力,培養出優秀的「系統程式」人才,讓這些人才成為產業發展的動力核心,打通台灣軟硬體的任督二脈。人才,永遠是產業競爭力的核心。

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License