網頁

2013年3月10日 星期日

一般開機程序 ( X86 )


開機是一個頗複雜的過程, 不同的 CPU 會有不同的過程, 這邊基本上以 X86 來做一些說明.
 

1. 電源啟動: (冷啟動階段, code boot )


        內部的電源接通, 內部的電源供應器輸出穩定的電力.
 

2. 晶片組產生一個 reset 的訊號.


        reset訊號 基本上是 High-Low-High 的一組訊號.

        Low 的時間, CPU 及相關電路邏輯的複雜度而定. CPU 通常包含數百萬       個邏輯閘, 其中有些是循序電路. reset 的訊號必須傳遞經過每一個電路元    , 也就是所謂的 fan-out. reset 時間完成後, 所有的電路都必須被設定到default.

 

3. reset 後的第一個 clock


        reset , 指令暫存器內容為 NOP ( no operation), 程式計數器內容為指向        BISO 的位址.
 

* 這邊說明一下 instruction cycle. 附圖是 Pentium 4 instruction cycle:

 

 

在同一個時間, CPU 執行目前的指令, 解碼預備執行下一個指令, 提取下下個指令.

程式計數器的內容, 就是下一個要提取的指令的位址. 因此, reset address 指的就是程式計數器 reset 後的 default . 只要把指令放在這個地方, reset 後就自然會被執行. 通常, 利用 memory mapping 的方法, 把這一部份對應到 EEPROM, 也就是 BIOS 的地方. 藉以引入 BIOS.
 

4. BIOS 啟動


        BIOS 執行 POST (Power On Self Test), 檢查記憶

        偵測及辨別視訊卡. 一般是在 0xC000H 的位置

        偵測及辨別其它設備, 包含軟碟¸硬碟,...

        BIOS 依據開機順序的設定, 在指定的設備中尋找主開機記錄 (MBR). 如果        找到的話, MBR 上的 Bootloader 載記憶體, 並且開始執行. 見附圖
 

 


 
* 我在某些地方看到, 類似這樣的敘述. " BIOS 是透過硬體的 INT 13 中斷功能來讀取 MBR ", 這樣的敘述是有問題的.

事實上, INT 13 H BIOS 的負責 disk 的中斷呼叫是 BIOS 的一部份.  請參考:
http://en.wikipedia.org/wiki/BIOS_interrupt_call.

另外¸ 也可以呼叫INT 19H 來做 software reset, 來重新載入/執行 Bootloader.

 

5. Bootloader : ( 熱啟動, warm boot)


        Bootloader 放置的位置, MBR 的前 446 bytes. 內容則和作業系統相關, 也和用什麼樣的 bootloader manager 的程式有關.
 
        在 Linux 底下, 如果不使用其他的 bootloader manager, bootloader 的內容是 src/arch/i386/boot/bootsect.S, 否則內容會是 bootloader manager 設置. 例如以下是使用 GRUB 的 bootloader 內容. 可以發現 GRUB 的字樣.


       
       

完整的 X86 BIOS Boot sequence

請參考 :
 
 

 

沒有留言:

張貼留言

請提供您寶貴的意見