(圖:引用自Wikipedia)
就實際上來說,寫OS向來被認為是一件十分困難且複雜的事。初學程式設計者,並不適合一開就自製OS。
以下是您必須瞭解的知識:
- 電腦科學基礎: 你需深入且熟悉16進位和二進位符號之間邏輯運算,以及其他必要知識如:
- 資料結構,相關的演算法的建立、 操作、搜尋和排序, 程式概念等等。
- 語言與字彙: 你需能夠略懂讀和寫英文技術文章. 絕大部分從網站找到OS技術文章都以英文寫成。一般而言,中文譯書大約落後英文書二年左右。
- 語言與字彙: 大部分OS的功能範例在osdev.org是均以程式語言C或C++寫成。假使你選用其他語言像是FreeBASIC或Pascal;但 C 語言是程式設計通用語, 故而你應能以所使用之程式語言來轉換。
- 組合語言Assembly: 應對組合語言有所瞭解。它是一種與硬體緊密相關的程式設計低階語言。組譯語言是機器語言便於記憶和理解的符號形式。 至少你必須閱讀關於這語言的教程, 並寫過用戶空間(user-space)的應用程式碼以便你能熟悉它。就算你使用更高階語言,你還必須瞭解它,例如bootloader, input/output 程式均少不了它的存在。當然你可將你所慣用的組言語言部分寫成函式,如此一來,便可使用C語言來呼叫(可參考Linux kernel )
- 程式設計經驗: 你不僅需要知道相關程式語言,且需要瞭解並熟悉版本控制,如何偵錯等等。 簡言之,你必須在你開始寫OS之前,先成功地寫完一些user-space程式。
- 開發環境:
- 使用Linux來開發: 你將注意你需要許多 Unix工具。 Linux kernel 是一個常用學習的不錯參考範例,用以瞭解系統如何運作及其設計。 命令提示的工具(如bash 或 ksh等等) 是最低需求,並安裝Toolchain。
- 使用個人虛擬機器(virtual machine)進行測試:
- 工具集(Toolchain): 你必須瞭解如何使用編譯器(compiler: GCC)、組譯器(assembler: GNU as, NASM, MASM), 連結器(linker: GNU ld)及相關編譯工具(如make)。
- 可執行的檔案格式: 核心空間(Kernel space)程式設計有許多額外的要求,以提供必要功能來給未知的應用程式開發所使用。故需要解析可執行的二進位檔案 (若你的OS需要載入並執行應用程式),請熟悉可執行檔格式 Executable File Types(其內部結構和如何連結產生)。
- 自製OS 平台(Platform): 你必須學習相關CPU的說明手冊來寫你的OS所支援的平台. 手冊將包含必要的資訊來設計你的核心 。如x86 (Intel IA-32程式開發英文手冊)
以上心得,僅為拋磚引玉。