1.1.1 bios的啟動原理
在了解bios是如何將作業系統程式載入到記憶體中之前,我們先來了解一下bios程式自身是如何啟動的。從我們使用計算機的經驗得知:要想執行乙個程式,必須在視窗中雙擊它,或者在命令列介面中輸入相應的執行命令。從計算機底層機制上講,這其實是在乙個已經執行起來的作業系統的視覺化介面或命令列介面中執行乙個程式。但是,在開機加電的一瞬間,記憶體中什麼程式也沒有,沒有任何程式在執行,不可能有作業系統,更不可能有作業系統的使用者介面。我們無法人為地執行bios程式,那bios程式又是由誰來執行的呢?
答案是:0xffff0 !!!
從體系的角度看,不難得出這樣的結論:既然軟體方法不可能執行bios,那就只能靠硬體方法完成了。
從硬體角度看,intel 80x86系列的cpu可以分別在16位實模式和32位保護模式下執行。為了相容,也為了解決最開始的啟動問題,intel 將所有80x86系列的cpu(包括最新型號的cpu)的硬體都設計為加電即進入16位實模式狀態執行。同時,還有一點非常關鍵,即將cpu硬體邏輯設計為加電瞬間強行將cs的值置為0xffff,ip的值置為0x0000,這樣cs:ip就指向0xffff0這個位址位置,如圖1-1 所示。從圖1-1中可以清楚地看到,0xffff0指向了bios的位址範圍。
小貼士ip/eip(instruction pointer):指令指標暫存器,存在於cpu中,記錄將要執行的指令在**段內的偏移位址,它與cs組合即為將要執行的指令的記憶體位址。實模式為絕對位址,指令指標為16位,即ip;保護模式下為線性位址,指令指標為32位,即eip。
圖1-1 啟動時bios在記憶體中的狀態及初始執行位置
小貼士cs(code segment register):**段暫存器,存在於cpu中,指向cpu當前執行**在記憶體中所在的區域。
注意,這是乙個純硬體完成的動作!如果此時這個位置沒有可執行**,那就什麼也不用說了,計算機就此宕機。反之,如果這個位置有可執行**,計算機將從這裡的**開始,沿著後續程式一直執行下去。
bios程式的入口位址恰恰就是0xffff0 !也就是說,bios程式的第一條指令就設計在這個位置上。
BIOS啟動原理BIOS啟動原理
intel的ibm pc上i386晶元是遵循intel與ibm共同制定的boot協議的 1.pc機的復位線和系統中的所有部件相連,包括cpu的reset引腳 2.系統上電開機時,主機板電源系統傳送低電平的 power good 訊號,該訊號送到復位介面電路的 res端,產生時鐘同步的復位正脈衝訊號r...
BIOS的啟動原理學習 載入引導程式
在windows系統以及有圖形介面的其他作業系統中要想執行乙個程式,必須在視窗中雙擊它,或者在命令列介面中輸入相應的執行命令。從計算機底層機制上講,這其實是在乙個已經執行起來的作業系統的視覺化介面或命令列介面中執行乙個程式。感覺要進入先有雞還是先有蛋的迴圈之中了。但是,在開機加電的一瞬間,記憶體中什...
BIOS到Linux Boot的原理
bios啟動的原理 所有x86的cpu都設計成為加電進入16位實模式狀態,cs 0xffff,ip 0x0000。這樣啟動時的第一條指標所在的位址就是0xffff0.建立中斷向量表 0x00000 0x003ff 建立中斷服務程式 bios執行int 19h,載入磁碟的第乙個扇區 512 b 到0x...