2011年5月31日 星期二

自製OS作業系統所需基本知識?

上篇,參考 wiki.osdev.org的OS開發之始一文,加入本人的心得寫了在OS開發中所需要的基礎。
(圖:引用自Wikipedia)


就實際上來說,寫OS向來被認為是一件十分困難且複雜的事。初學程式設計者,並不適合一開就自製OS。


以下是您必須瞭解的知識:

  • 電腦科學基礎: 你需深入且熟悉16進位和二進位符號之間邏輯運算,以及其他必要知識如:
    • 資料結構,相關的演算法的建立、 操作、搜尋和排序, 程式概念等等。

  • 語言與字彙: 你需能夠略懂讀和寫英文技術文章. 絕大部分從網站找到OS技術文章都以英文寫成。一般而言,中文譯書大約落後英文書二年左右。

  • 語言與字彙: 大部分OS的功能範例在osdev.org是均以程式語言C或C++寫成。假使你選用其他語言像是FreeBASICPascal;但 C 語言是程式設計通用語, 故而你應能以所使用之程式語言來轉換。

  • 組合語言Assembly: 應對組合語言有所瞭解。它是一種與硬體緊密相關的程式設計低階語言。組譯語言是機器語言便於記憶和理解的符號形式。 至少你必須閱讀關於這語言的教程, 並寫過用戶空間(user-space)的應用程式碼以便你能熟悉它。就算你使用更高階語言,你還必須瞭解它,例如bootloader, input/output 程式均少不了它的存在。當然你可將你所慣用的組言語言部分寫成函式,如此一來,便可使用C語言來呼叫(可參考Linux kernel )

  • 程式設計經驗: 你不僅需要知道相關程式語言,且需要瞭解並熟悉版本控制,如何偵錯等等。 簡言之,你必須在你開始寫OS之前,先成功地寫完一些user-space程式。

  • 開發環境:
    • 使用Linux來開發: 你將注意你需要許多 Unix工具。 Linux kernel 是一個常用學習的不錯參考範例,用以瞭解系統如何運作及其設計。 命令提示的工具(如bash 或 ksh等等) 是最低需求,並安裝Toolchain。

    • 使用Window來開發: Cygwin 提供一個簡易的方法來安裝unix開發環境, mingw 為一個精簡的GNU開發環境。


  • 工具集(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程式開發英文手冊)

以上心得,僅為拋磚引玉。

沒有留言: