作業系統開發實戰手冊

作者序

從學生時代,我就夢想,有一天,我也可以寫一套屬於自己的作業系統。 大四下學期的某一天,我跑去台中電子街買洞洞板、8086、8279、8254、8255、SRAM、ROM 晶片。 在控制實驗室裡,一個工作桌上,烙鐵、銲錫、快乾膠、銀絲線,我焊接著自己的第一塊 8086 單板電腦。 這塊電路板陪著我走過大學的最後一個學期,而我的夢想就是親手打造一個可以在那上面跑的作業系統。

研究所畢業,當兵回來後,我在新竹寫了五年的8051。 之後,回到高雄工作時,我寫 8051、ARM 和 PIC 的程式。期間,我寫了一支 8051 的多工程式,也寫了一支 S3C2440 的多工程式。 在 8051 上面,我只是寫一支可以跑多工的程式而已。在 S3C2440 上面,我則想發展一個完整的多工作業系統。 我在 S3C2440 的開發板上開發多工核心。 花了幾個月的時間,把要用到的 TCP/IP 網路協定、串列埠、圖形化使用者介面完成後,想再驅動硬碟、鍵盤、滑鼠以及一些硬體介面,這塊開發板就變得不夠用了。 於是我就把苗頭轉向 80X86,我想在個人電腦上開發我的作業系統,因為我所需要的硬體在個人電腦上都一應俱全。 於是我就著手進行 80X86 作業系統的開發,這就是這套作業系統的由來。

開發這套作業系統的過程,我也遭遇了一些困難,因為我沒有學過 80X86 的組合語言,也不了解個人電腦的硬體要如何控制。 為了越過這樣的困境,我參考了 LINUX、FREEDOS、MINIX 的原始程式碼,也從市面上買一些書回來看,想從中獲得幫助,並試著走出一條可行的路。 從啟動磁區開始,走過真實模式和保護模式,然後運行這個多工作業系統。 走過來後,我感想是,在個人電腦上開發多工作業系統並不難,至少比在 S3C2440 上開發多工作業系統簡單,而多工的原理則比 8051 簡單太多了。 只是入門的門檻高了一點,而這需要一個好的引導者。這本書的目的就是提供所有想要從無到有地開發多工作業系統的人一條捷徑,幫助各位順利攻頂。

市面上有名氣的多工作業系統,例如UNIX、LINUX 、MINIX,雖然寫得很好,卻也因為太大而不適合於初學者。 這套多工作業系統很小,難度還好,應該很適合想寫多工作業系統,卻無門可入的初學者。 在書中,會指導大家從無到有的建構一個多工作業系統,也會教大家怎麼寫 MAKEFILE 和批次檔,以及一些相關的知識。 雖然很希望能夠做到"傻瓜多工作業系統實作",從本書提供所有的相關知識,讓一般會寫程式的人就可以按部就班的上手,領會書中的所有知識,並撰寫自己的多工作業系統。 只是越講到多工作業系統核心的地方,就越覺得讀者本身也需要一些 C 語言的程度和對硬體的相關知識的領悟力。

本書的特點是提供多種執行作業系統的方式,讓讀者可以用模擬的方式,也可以在實際的電腦上執行作業系統,也可以透過 XMODEM 的方式上傳並執行作業系統。 對於程式碼部分,採取逐行講解的方式進行,希望能夠地毯式的掃過每一個環節,讓讀者可以在書本中找到想要知道的答案。 也希望讀者善用本書所提供的知識和工具,開發自己的多工作業系統,這樣就不枉費筆者的苦心了。

這本書適用的對象最好能有一些 C 語言的程度,至於組合語言部份就隨著章節進行,邊讀邊學就可以。 因為書的內容很多,從啟動磁區到視窗應用程式,層層架構,層層堆疊,要完全吸收需要讀者的耐心和毅力。 有道是不經一番寒徹骨,哪得梅花撲鼻香,能夠走過這樣的過程,相信讀者的程式功力和視野都會更上層樓。 希望大家能夠從本書得到最大的幫助。

筆者提供一個網頁,讀者若有問題,可以透過網頁和筆者交流,網址是 http://www.formosaos.url.tw/。

陳育書 於高雄


關於本書內容

本書是一本程式設計的書,內容是視窗多工作業系統的實現。 對於硬體的說明僅限於作業系統有使用到的部分。

這套多工作業系統的程式碼是由筆者親自撰寫,雖然有參考其他作業系統的程式碼。 筆者都有重寫,應該不會發生抄襲或複製別人的程式碼的情事。 程式碼的編碼是筆者個人的喜好,並沒有嚴格遵循特定規則。 函式名稱的開頭通常和檔名一樣,各名詞之間是以大小寫的節奏分隔,而動詞會出現在函式名稱的最後面。

舉例來說,函式 OsTaskReadyTaskPut 是要把任務放到優先權佇列中,OsTask 表示函式是在 OS_TASK.C,ReadyTaskPut 是要把 READY TASK 放到優先權佇列。 筆者故意不寫成 PutReadyTask,而比較喜歡用 ReadyTaskPut 這樣的次序。 這樣的編碼習慣會在本作業系統程式碼的任意角落出現。

書的內容分成 2 部 7 篇。 第一部是多工作業系統,以 FORMOSA_V1 的程式碼為主,專講啟動磁區、多工核心和驅動程式。 第二部是視窗多工作業系統,以 FORMOSA_V2 的程式碼為主,專講桌面管理和視窗應用程式。 FORMOSA_V2 是 FORMOSA_V1 的視窗版本,啟動磁區、模式轉換、多工核心和驅動程式是一樣的。 書中的程式碼可能會和原始程式不一樣,這是為了講解而做的必要改變。

本作業系統使用 VIRTUALBOX 模擬器、NASM 組合語言編譯器、MINGW GCC 的 C 語言編譯器。 它們都是免費軟體,可以從網路下載,沒有版權問題。 但如果讀者將本作業系統程式碼用到商業用途時,必須考慮版權問題。


關於光碟的內容

本書所附光碟有五個目錄,SOFTWARE、DATASHEET、UTILITIES、FORMOSA_V1、FORMOSA_V2。

目錄名稱說明
SOFTWARE 目錄中有電腦模擬器和程式編譯器的軟體。
VirtualBox-3.1.6-59338-Win.exe 是電腦模擬器的安裝執行檔。
C 語言編譯器是在目錄 SOFTWARE\MINGW。
組合語言編譯器是在 SOFTWARE\NASM。
DATASHEET 目錄中有筆者從網路收集來的文件資料,內容是電腦元件的規格書、編譯器的文件、執行檔的文件等。
UTILITIES 目錄中有筆者自己寫的應用程式和兩套網路上收集來的自由軟體。
RWWRTWIN.EXE 是一支自由軟體,用來將軟碟映像檔到軟碟片的軟體程式。
UNETBOOTIN-WINDOWS-494.EXE 是一支自由軟體,用來將軟碟映像檔製作成 USB 開機碟的軟體程式。
BIN2HEX 目錄是 VC6 的程式,用來將 BMP 圖檔轉換成 16 進位的文字檔,用於製作桌布。
EXE2BIN 目錄是 VC6 的程式,用來將執行檔轉換成二進位檔,而二進檔就是作業系統映象。
FLOPPY2CDROM 目錄是軟碟映像檔轉光碟映像檔的應用程式。
FORMOSA_V1一般多工作業系統的程式碼。
FORMOSA_V2視窗多工作業系統的程式碼。

參考書目

1.看程式實例學 IBM PC 組合語言,洪錦魁編著 文魁出版社

2.微算機原理與應用,林銘波編著 全華出版社

3.INTEL 微處理器,曾恆偉等譯 東華書局

4.IBM PC 系統設計與介面技術,方志鵬譯 東華書局

5.MicroC/OS-II,JEAN J. LABROSSE

6.MICROSOFT PORTABLE EXECUTABLE AND COMMON OBJECT FILE FORMAT SPECIFICATION


作者簡介

作者姓名: 陳育書

作者學歷:

國立中興大學電機工程學系學士

國立交通大學電子研究所碩士

作者專長:韌體開發、多工作業系統開發


感謝詞


1.感謝 SUN 和 ORACLE 提供 VIRTUALBOX 這套免費的 PC 模擬軟體。
2.感謝 NASM 提供免費的組譯器。
3.感謝 MINGW 提供免費的 C 編譯器。
4.感謝 ARPAD 和 GERA KOVACS 等人提供 UNETBOOTIN 這套自由軟體。
5.感謝 JOHN NEWBIGIN 提供 RWWRTWIN 這套自由軟體。


目錄

章節說明
第 0 部 準備工作.
開發環境建置篇.
第 1 章微算機系統
第 2 章開發環境安裝
第 3 章編譯與執行
第一部 多工作業系統.
啟動磁區篇.
第 4 章軟碟機啟動
第 5 章硬碟機啟動
第 6 章硬碟機安裝
多工核心篇.
第 7 章模式轉換
第 8 章多工核心預覽
第 9 章系統區
第 10 章多工管理核
第 11 章任務管理器
第 12 章排程器
第 13 章事件管理器
第 14 章資源管理器
第 15 章時間管理器
第 16 章記憶體管理器
第 17 章根任務
第 18 章多工核心函式庫
驅動程式篇.
第 19 章彩色螢幕控制器
第 20 章可程式中斷控制器
第 21 章計時計數器
第 22 章鍵盤控制器
第 23 章滑鼠控制器
第 24 章串列控制器
第 25 章並列埠控制器
第 26 章即時時鐘控制器
第 27 章軟碟機控制器
第 28 章幾個任務範例
第二部 視窗多工作業系統.
桌面管理篇.
第 29 章桌面預覽
第 30 章桌面繪製
第 31 章桌面工作區
第 32 章桌面工作列
第 33 章桌面目錄
第 34 章桌面活動視窗
第 35 章桌面滑鼠
第 36 章桌面視窗與元件
視窗應用程式篇.
第 37 章命令提示字元
第 38 章計算機
第 39 章遊戲拆炸彈
第 40 章遊戲小蜜蜂
中介軟體篇.
第 41 章操控台
第 42 章XMODEM
轉檔篇.
第 43 章目的檔與執行檔
第 44 章轉檔程式