PC啟動時,首先會在實模式下運作BIOS,啟動後的第一條指令在記憶體0x000FFFF0處,因為BIOS在記憶體中的上限是0x00100000,于是在0x000FFFF0處執行的第一條指令必然要跳到BIOS的指令位置開始執行,保證BIOS在剛啟動的時候得到控制權。BIOS得到控制權後會對系統進行一系列的初始化。
BIOS初始化完成後,會将一個稱作Boot Loader的程式從硬碟讀到記憶體中并把控制權交給該程式,到這裡BIOS的任務就算完成了。
Boot Loader程式會在編譯成可執行代碼後放在硬碟的第一個扇區。硬碟被分割成一個個大小為512位元組的扇區,扇區是硬碟最小的讀寫機關,即每次對硬碟讀寫操作隻能夠對一個或者多個扇區進行并且操作位址必須是512位元組對齊的。如果說作業系統是從硬碟啟動的話,硬碟的第一個扇區就被稱作“啟動扇區”,因為Boot Loader的可執行程式就在這個扇區。當BIOS找到啟動硬碟後,便将512位元組的啟動扇區的内容裝載到實體記憶體的0x7c00到0x7dff的位置,緊接着再執行一個跳轉指令将CS設定為0x0000,IP設定為0x7c00,這樣便将控制權交給了Boot Loader程式。
關于Boot Loader程式:Boot Loader的源程式是由一個叫做boot.S的彙程式設計式和一個main.c的C程式組成。boot.S主要是将處理器從實模式轉換到32位的保護模式(保護模式中我們才能夠通路到實體記憶體高于1MB的空間)。main.c的主要作用是将核心的可執行代碼從硬碟鏡像中讀入到記憶體中,具體的方式是運用x86專門的I/O指令。