linux内核bios,BIOS的启动原理——Linux内核设计学习笔记
RAM:隨機存取存儲器,常見的內(nèi)存條就是一類RAM,其特點是加電狀態(tài)下可任意讀、寫,斷電后信息消失。
在RAM中什么程序也沒有的時候,誰來完成加載軟盤中操作系統(tǒng)的任務(wù)呢?
答案是:BIOS。
BIOS的啟動原理
在了解BIOS是如何將操作系統(tǒng)程序加載到內(nèi)存中之前,我們先來了解一下BIOS程序自身是如何啟動的。從我們使用計算機的經(jīng)驗得知:要想執(zhí)行一個程序,必須在窗口中雙擊它,或者在命令行界面中輸入相應(yīng)的執(zhí)行命令。從計算機底層機制上講,其實是在一個已經(jīng)運行起來的操作系統(tǒng)的可視化界面或命令行界面中執(zhí)行一個程序。但是,在開機加電的一瞬間,內(nèi)存中什么程序也沒有,沒有任何程序在運行,不可能有操作系統(tǒng),更不可能有操作系統(tǒng)的用戶界面。我們無法人為地執(zhí)行BIOS程序,那么BIOS程序又是由誰來執(zhí)行的呢?
秘訣是:0xFFFF0 !!!
從體系的角度看,不難得出這樣的結(jié)論:既然用軟件方法不可能執(zhí)行BIOS,就只能靠硬件方法完成了。從硬件角度看,Intel 80x86系列的CPU可以分別在16位實模式和32位保護模式下運行。為了兼容,也為了解決最開始的啟動問題,Intel將所有80x86系列的CPU,包括最新型號的CPU的硬件都設(shè)計為加電即進入16位實模式狀態(tài)運行。同時,還有一點非常關(guān)鍵的是,將CPU硬件邏輯設(shè)計為加電瞬間強行將CS的值置為0xF000、IP的值置為0xFFF0,這樣CS:IP就指向0xFFFF0這個地址位置,如 1-1所示。從圖1-1中可以清楚地看到,0xFFFF0指向了BIOS的地址范圍。

圖1-1 啟動時BIOS在內(nèi)存的狀態(tài)及初始執(zhí)行位置
小貼士
IP/EIP(Instruction Pointer):指令指針寄存器,存在于CPU中,記錄將要執(zhí)行的指令在代碼段內(nèi)的偏移地址,和CS組合即為將要執(zhí)行的指令的內(nèi)存地址。實模式為絕對地址,指令指針為16位,即IP;保護模式下為線性地址,指令指針為32位,即EIP。
CS(Code Segment Register):代碼段寄存器,存在于CPU中,指向CPU當(dāng)前執(zhí)行代碼在內(nèi)存中的區(qū)域(定義了存放代碼的存儲器的起始地址)。
注意,這是一個純硬件完成的動作!如果此時這個位置沒有可執(zhí)行代碼,那么就什么也不用說了,計算機就此死機。反之,如果這個位置有可執(zhí)行代碼,計算機將從這里的代碼開始,沿著后續(xù)程序一直執(zhí)行下去。
BIOS程序的入口地址恰恰就是0xFFFF0 ! 也就是說,BIOS程序的第一條指令就設(shè)計在這個位置。
總結(jié)
以上是生活随笔為你收集整理的linux内核bios,BIOS的启动原理——Linux内核设计学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android如何实现QQ信息通知,an
- 下一篇: 深圳2020年生肖纪念币在哪里可以预约