BIOS啓動過程詳解

BIOS 

工作原理

 


最近幾天在看《
UNIX

操作系統設計》突然想到計算機是如何啓動的呢?那就得從
BIOS

說起,其實這個鼕鼕早已是
n

多人寫過的了,今天就以自己的理解來寫寫,權當一個學習筆記。


一、        

 


預備知識:

 


很多人將
BIOS


CMOS

混爲一談,在開始介紹
BIOS

工作原理以前先來簡單的瞭解以下
BIOS


CMOS


 


什麼是
BIOS 


 


系統開機啓動
 BIOS

,即微機的基本輸入輸出系統
(Basic Input-Output System)

,是集成在主板上的一個
ROM

芯片,其中保存有微機系統最重要的基本輸入
/

輸出程序、系統信息設置、開機上電自檢程序和系統啓動自舉程序。


集成在
BIOS

上得程序主要有如下幾個:


BIOS


中斷例程:

 


BIOS

中斷服務程序。它是微機系統軟、硬件之間的一個可編程接口,用於程序軟件功能與微機硬件實現的衍接。
 DOS/Windows

操作系統對軟、硬盤、光驅與鍵盤、顯示器等外圍設備的管理即建立在系統
BIOS

的基礎上。程序員也可以通過
 


INT 5


INT 13

等中斷的訪問直接調用
BIOS

中斷例程。
 


BIOS


系統設置程序:

 

微機部件配置情況是放在一塊可讀寫的
CMOS RAM

芯片中的,它保存着系統
CPU

、軟硬盤驅動器、顯示器、鍵盤等部件的信息。
 

關機後,系統通過一塊後備電池向
CMOS

供電以保持其中的信息。如果
CMOS

中關於微機的配置信息不正確,會導致系統性能降低、零部件不能識別,並由此引發一系統的軟硬件故障。在
BIOS ROM

芯片中裝有一個程序稱爲

系統設置程序

,就是用來設置
CMOS RAM

中的參數的。這個程序一般在開機時按下一個或一組鍵即可進入(一般爲
Delete

鍵),它提供了良好的界面供用戶使用。這個設置
 CMOS

參數的過程,習慣上也稱爲
“BIOS

設置

。新購的微機或新增了部件的系統,都需進行
BIOS

設置。
 


POST


上電自檢

 

微機接通電源後,系統將有一個對內部各個設備進行檢查的過程,這是由一個通常稱之爲
POST(Power On Self Test,

上電自檢
)

的程序來完成的。這也是
BIOS

的一個功能。完整的
POST

自檢將包括
CPU


640K

基本內存、
1M

以上的擴展內存、
ROM

、主板、
 CMOS

存貯器、串並口、顯示卡、軟硬盤子系統及鍵盤測試。自檢中若發現問題,系統將給出提示信息或鳴笛警告。
 


BIOS


系統啓動自舉程序

 

在完成
POST

自檢後,
ROM BIOS

將按照系統
CMOS

設置中的啓動順序搜尋軟硬盤驅動器及
CDROM

、網絡服務器等有效的啓動驅動器
 

,讀入操作系統引導記錄,然後將系統控制權交給引導記錄,由引導記錄完成系統的啓動。
 

 

 


什麼是
CMOS 


 


CMOS

(本意是指互補金屬氧化物半導體
——

一種大規模應用於集成電路芯片製造的原料)是微機主板上的一塊可讀寫的
RAM

芯片,用來保存當前系統的硬件配置和用戶對某些參數的設定。
CMOS

可由主板的電池供電,即使系統掉電,信息也不會丟失。
 CMOS RAM

本身只是一塊存儲器,只有數據保存功能,而對
CMOS

中各項參數的設定要通過專門的程序。早期的
CMOS

設置程序駐留在軟盤上的
(


IBM


PC/AT

機型
)

,使用很不方便。現在多數廠家將
CMOS

設置程序做到了
BIOS

芯片中,在開機時通過特定的按鍵
 

就可進入
CMOS

設置程序方便地對系統進行設置,因此
CMOS

設置又被叫做
BIOS

設置。
 

早期的
CMOS

是一塊單獨的芯片
MC146818A(DIP

封裝
)

,共有
64

個字節存放系統信息
,


CMOS

配置數據表。
386

以後的微機一般將
 MC146818A

芯片集成到其它的
IC

芯片中
(


82C
206


PQFP

封裝
)

,最新的一些
586

主板上更是將
CMOS

與系統實時時鐘和後備電池集成到一塊叫做
DALLDA DS1287

的芯片中。隨着微機的發展、可設置參數的增多,現在的
CMOS RAM

一般都有
128

字節及至
256

字節的容量。爲保持兼容性,各
BIOS

廠商都將自己的
BIOS

中關於
CMOS RAM

的前
64

字節內容的設置統一與
MC146818A


CMOS RAM

格式一致,而在擴展出來的部分加入自己的特殊設置,所以不同廠家的
BIOS

芯片一般不能互換,即使是能互換的,互換後也要對
 CMOS

信息重新設置以確保系統正常運行。


 


二、工作原理介紹

 


 


下面從計算機加電開始,看
BIOS

是如何一步一步工作的:


 


1、             

 


加電

 


計算機電源開始工作,當電源的輸入電壓穩定以後,主板的
timer

被觸發,它產生一個復位脈衝送給
80X86cpu


cpu

開始工作,當
cpu

收到該復位脈衝後,其硬件邏輯就會置
CS

寄存器爲
FFFFH


IP

寄存器爲
0000H

,也就是說,會自動地到
FFFF:0000H

去取第一條指令,(在對內存編址的時候,高地址部分總是編給一些

ROM

,在這些
ROM

裏是預先寫好的程序或數據,地址
 FFFF


0000h

其實就是在
ROM

裏。以前不懂這個規則的時候着實被搞糊塗了,不明白
FFFF


0000h

裏的跳轉指令是哪裏來的,其實就是寫死在
ROM

裏的了,就這麼簡單。)
這個地方只有一條
JMP

指令,告訴處理器到什麼地方讀取
BIOS ROM


 


2


POST

 

POST

其實是一系列的執行不同初始化和計算機硬件檢測的函數或例程。
BIOS

以對主板硬件的一系列檢測開始,包括檢測:
cpu

,數學協處理器、時鐘
IC


DMA

控制器和中斷請求(
IRQ

)控制器,檢測的順序根據主板的不同而不同。


然後,
BIOS

會在地址
C000:000h 


 C780:000h

之間檢測視頻
 ROM

是否存在,如果視頻
BIOS

存在,則對視頻
ROM

中的內容求校驗和進行檢測,如果檢測成功,則
BIOS

將控制權轉交給視頻
BIOS

讓其初始化當完成時再將控制權交回給
BIOS

。此時你將會在屏幕上看到顯卡信息,例如顯卡製造商的
logo

,顯卡的描述信息,以及顯卡
BIOS

信息等。


然後
BIOS


2K

的增量掃描
C800:000h 


DF800:000h

直接的地址,以檢測計算機中可能裝的其他
ROM

,比如網卡、
SCSI

適配器等,如果找到一個設備的
ROM

,則對該設備的
ROM

中的內容做校驗和,如果檢測通過則將控制權轉交給設備
BIOS

讓其對設備進行初始化,初始化結束後
BIOS

再收回控制權,如果校驗和檢測失敗,將再屏幕上顯示:“
XXX ROM Error

”,其中
XXX

是檢測到該
ROM

的地址的斷地址。


然後,
BIOS

開始檢測地址爲
0000:0472h

的內存,該處存放這一個標識系統是通過冷啓動啓動還是通過熱啓動啓動的標誌,如果爲
1234h

則代表熱啓動(該數值是一
little endian

的格式存儲的,因此在內存中的應爲
3412

),
BIOS

將直接跳過剩餘的
POST

例程。如果是冷啓動,
BIOS

將繼續執行剩餘的
POST

例程,在此過程中,
BIOS

將一個
16

進制的編碼寫到端口
80h

(不同的計算機端口號會不同),這個
16

進制編碼指示在何時檢測什麼。


 


3


、引導操作系統

 


POST

結束之後,
BIOS

會尋找一個操作系統。通常,
BIOS

會試圖在軟驅中尋找
DOS

系統的引導盤,如果找不到,它會試圖在
C

盤尋找操作系統。如果軟驅中有引導盤,
BIOS


1

扇區
0

磁頭
0

柱面的內容(引導記錄)載入內存
0000


7C
00h

開始的地方。如果軟盤中沒有
DOS

引導盤,則
BIOS

搜索硬盤尋找硬盤的第一個扇區,然後把主引導記錄(
MBR

)載入內存
0000


7C
00h

開始的地方。
一旦引導記錄加載完畢,
BIOS
就交出系統的執行控制權,跳轉到引導程序的頭部執行。下面就是硬盤的
MBR
代碼流程,其中的引導扇區是指硬盤相應分區的第一個扇區,是和操作系統有關的操作系統的引導是由它來完成的,而
MBR
(硬盤的第一個扇區)並不負責,
MBR
和操作系統無關他的任務是把控制權轉交給操作系統的引導程序
 


程序流程:
 


將程序代碼由
0000:7C00H
移動到
0000:0600H
(注,
BIOS

MBR
放在
0000:7C00H
處)
 


搜索可引導分區,即
80H
標誌
 

成功:
goto 3 

失敗:跳入
ROM BASIC 

無效分區表:
goto 5 


讀引導扇區
 (

注:用於操作系統的引導,將它讀到
0000

7C
00H)

失敗:
goto 5 

成功:
goto 4 


驗證引導扇區最後是否爲
55AAH 

失敗:
goto 5 

成功:
goto 6 


打印錯誤進入無窮循環
 


跳到
0:7C00H
進行下一步啓動工作
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章