本文主要描述裝載x86 CPU的電腦從通電到開機中間經歷了哪些事情,以及各部分的解釋
開機的步驟:
- 通電
- CPU直接從ROM裡面執行BIOS
- BIOS程式掃描所有硬碟的第一個Sector,找尋boot signature 0x55AA
- BIOS將bootlader載入記憶體位置0x7C00,並跳過去執行bootloader
- Bootloader載入kernel
- Kernel載入其他作業系統需要用到的片段
Bootloader
Bootloader是一個小程式,負責將作業系統的kernel載入記憶體並且執行,作業系統的開發者會自己實作bootloader,如Linux的grub,而Windows也有自己的bootloader
Bootloader的另一個重要用途
x86的CPU在開機的時候會進入real mode,由於real mode有很多限制,例如只能存取1MB的記憶體空間,且只能跑16位元的程式等等,而protected mode則能存取4GB的記憶體空間,且可以跑32位元的程式,因此bootloader也負責將CPU切換成protected mode
BIOS
BIOS會將自己從ROM載入到RAM,之後就再RAM裡面執行,初始化一些必要的周邊硬體,例如提供基本的硬碟驅動,以供後續讀取硬碟中的bootloader
- BIOS包含了一些routines以提供bootloader在載入kernel時使用
- BIOS是16位元的程式,也只能執行16位元的程式
- BIOS routines通常是標準化的,才能支援各種bootloader
載入bootloader的流程
BIOS會從所有的儲存裝置的第一個sector中的第511與512個byte找尋有標記為開機記號0x55AA的裝置,若找到了有標記的sector,就會將此sector載入到記憶體0x7C00位址,並且跳過去執行