講到電腦的啟動流程,我們要先明白這麼一件事,記憶體是揮發性儲存空間件,所以在電腦上電之前記憶體中是什麼都不存在的,所以從記憶體中的程式和資料從無到有,這需要一個過程,就是我們要講的電腦啟動流程。
知識預熱:(以下資料來自於百度百科)
1、BIOS、CMOS
(1)BIOS是一個寫入到硬體上的一個軟體程式,BIOS的功能主要分為3部分:自檢和初始化、程式服務處理、硬體中斷處理
a)自檢和初始化
這個功能又分為3部分:
i、加電自檢(POST power on self test),上電後對電腦的硬體部分檢測,通常要檢測的硬體有:CPU,640K基本記憶體,1M以上的擴充記憶體,ROM,主板,CMOS儲存空間,串並口,顯示卡,軟硬碟子系統及鍵盤進行測試。
ii、初始化,包括建立中斷向量、設定寄存器、對一些外部裝置進行初始化和檢測
iii、引導程式,作用是引導DOS或其他動作系統,BIOS先從硬板的起始扇區中讀取引導記錄,讀取成功後,BIOS會把控制權交給引導記錄,由引導記錄把作業系統裝入電腦
b)程式服務處理,服務物件是使用者的應用程式和作業系統,提供的服務是與I/O裝置有關的服務,如:讀磁碟、檔案輸出到印表機
c)硬體中斷處理,處理應用程式和作業系統對硬體的需求,如磁碟和串口服務、視頻服務、螢幕列印
(2)CMOS主要用於儲存BIOS設定程式所設定的一些參數和資料
2、MBR
| 位元組位移(hex) |
位元組數 |
描述 |
| 00~1BD |
446 |
引導代碼 |
| 1BE~1CD |
16 |
分區表項1 |
| 1CE~1DD |
16 |
分區表項2 |
| 1DE~1ED |
16 |
分區表項3 |
| 1EE~1FD |
16 |
分區表項4 |
| 1FE~1FF |
2 |
55AA |
註:進位轉換程式可以在我的部落格分類“工具箱”中找到。
1BD = 1*16*16 + 11(B)*16 + 13 = 445
1BE~1FD = 446~509,共64bytes
(1)MBR(master boot record 主引導記錄)位於硬碟的0號柱面、0號磁頭、1號扇區(PS. 硬碟的0\0\0用於存放本磁碟的型號,大小等內容),主要由4個部分組成。
i、主引導程式:0000H~0088H,它負責從使用中的磁碟分割中裝載運行系統的引導程式。這裡主要包含一段指令,用於通知電腦如何閱讀分區表並定位作業系統的位置,這部分的代碼會因作業系統的不同而不同,利用引導代碼可以實現多重開機。
ii、出錯資訊資料區,位移地址0x89--0xE1為出錯資訊,0xE2--0x1BD全為0位元組。
iii、分區表,0x1BE~0x1FD,每個分區表項佔16bytes,最多可以描述4個分區(這就是為什麼MBR分區體系只能分成4個區【我們平時看到的分區一般可以從26個字母中選取任意多個當做分區標識(多於4個),這是因為那些分區是邏輯分區,這裡的4個分區指的是主要磁碟分割和擴充分區的數目,而邏輯分區是在擴充分區中劃分出來的,也叫做二級、三級擴充分區。】)。含4個分區項,位移地址01BEH--01FDH,每個分區表項長16個位元組,
分區表項並沒有順序要求,即不要求第一個分區表項在第二個分區表項前。分區表也不要求從第一個分區表項開始 iv、結束標誌,位移地址01FE--01FF的2個位元組值為結束標誌55AA,如果沒有這個標誌,作業系統會認為磁碟沒有初始化,無法正確載入磁碟的分區。
PS. 在嵌入式的世界,我們用的就是大名鼎鼎的Bootloader來代替PC機上MBR的作用。 BootLoader 的啟動過程可分為:單階段和多階段兩種,實際應用中多階段功能強大,可移植性好所以多採用多階段。 目前Bootloader大多採用兩階段,即啟動過程可以分為 stage1 和 stage2: stage1(用彙編實現,且在Flash上運行,因為C語言的實現需要庫的支援,顯然剛開機的時候庫還沒有準備好): (1)硬體初始化(主要是CPU內部的寄存器) (2)為 BootLoader 的stage2階段準備記憶體(ram)空間 (3)將BootLoader的stage2階段的代碼拷貝到記憶體空間 (4)設定好堆棧(設定堆棧的原因是,在stage2階段要用到 C 代碼,C代碼的運行要用到堆棧) (5)跳轉到 stage2 的C進入點 stage2(用C語言實現,在記憶體中運行): (1)初始化一些板載的一些硬體 (2)將核心和根檔案系統從flash中拷貝到記憶體中 (3)調用核心,啟動作業系統
MBR:
=====================================================================================================================
上面的知識預熱搞定後,那麼搞定系統的啟動流程就很簡單了,
首先,電腦上電後,
(1)先啟動的是主板上的BIOS,BIOS完成硬體檢測、資源分派、初始化一些寄存器和向量,(這裡假設BIOS檢測到的第一個可以啟動的裝置是硬碟)最後BIOS會把硬碟的CHS=0\0\1處的扇區即MBR讀入記憶體0x7c00位置,並把控制權移交給MBR中的主引導程式
(2)MBR中的主引導程式根據分區表會把作業系統的核心鏡像從硬碟中讀到記憶體中去,並把控制權交給作業系統
(3)作業系統啟動