2009/01/30

Write OS: 使用開源軟體-自己動手寫作業系統

今天終於把[使用開源軟體-自己動手寫作業系統]看完,我一直都對寫作業系統很有興趣,但是一直遲遲找不到一個好的開始,因此很感謝[楊文博]寫得這本免費電子書, 讓所有有心專研這方面的人能有個完整的學習, 雖然現在這本書還沒完成,但讀完後還是授益匪淺。

目前這本書完成了3章,首先第一章的計算機啟動介紹了計算機啟動方式,基本硬體簡介及開發OS時所需使用的開源軟體。

第2章則由OS版的Hello World開始介紹(example 2-1),並進一步將Hello World放至FAT12的File system裡以擺脫512Bytes (Sector size)的限制 (example 2-2)。

第3章則由real mode進入了protected mode,本章第一個例子 (example 3-1) 便說明了GDT (Global Descriptor Table),Segment Selector 的重要觀念, 並且使用了 far jump 跳到 protected mode。接著 example 3-2 則代入了LDT (Local Descriptor Table),LDT的存在主要是為了 multi-task 環境所設計,不同的 task 擁有自己的記憶體區段。在Descriptor裡,為了使OS更加安全,descriptor包含了權限的設計,Intel設計了ring 0(高)到ring 3(低)來加以區隔 user/kernel permission,為了使權限平和的轉移,便設計了call gate來輔助,call gate說穿了只是一種特殊的descriptor,example 3-3 展示了如何使用 call gate 由一 segment 跳至另一 segment。在 example 3-3尚未展示真正的權限轉移,example 3-4做了這方面的修正,由高權限跳至低權限。example 3-5則由低權限跳至高權限,並且一起做了Task State切換(TSS: Task State Segment)。Example 3-6開始使用了paging的技術,Example 3-7則對Page Directory Size根對計憶體大小作一最佳化,Example 3-8則真的了展示Virtual memory的作用。


最後,對於有心要寫OS的人,Intel的這本書[Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3A: System Programming Guide]的前幾章有些章節是必讀的,有心的人可以自己下載回來看看,想要紙本的人,也可以跟他們要。