一、系統(tǒng)引導(dǎo)過程簡介
系統(tǒng)引導(dǎo)過程主要由以下幾個步驟組成(以硬盤啟動為例)
1、 開機;
2、 BIOS加電自檢(POST---Power On Self Test),內(nèi)存地址為0fff:0000;
3、 將硬盤第一個扇區(qū)(0頭0道1扇區(qū),也就是Boot Sector)讀入內(nèi)存地址0000:7c00處;
4、 檢查(WORD)0000:7dfe是否等于0xaa55.若不等于則轉(zhuǎn)去嘗試其他介質(zhì);如果沒有其他啟動介質(zhì),則顯示 ”No ROM BASIC” ,然后死機;
5、 跳轉(zhuǎn)到0000:7c00處執(zhí)行MBR中的程序;
6、 MBR先將自己復(fù)制到0000:0600處,然后繼續(xù)執(zhí)行;
7、 在主分區(qū)表中搜索標(biāo)志為活動的分區(qū).如果發(fā)現(xiàn)沒有活動分區(qū)或者不止一個活動分區(qū),則停止;
8、 將活動分區(qū)的第一個扇區(qū)讀入內(nèi)存地址0000:7c00處;
9、 檢查(WORD)0000:7dfe是否等于0xaa55,若不等于則顯示 “Missing Operating System”,然后停止,或嘗試軟盤啟動;
10、 跳轉(zhuǎn)到0000:7c00處繼續(xù)執(zhí)行特定系統(tǒng)的啟動程序;
11、 啟動系統(tǒng).以上步驟中(2),(3),(4),(5)步由BIOS的引導(dǎo)程序完成;(6),(7),(8),(9),(10)步由MBR中的引導(dǎo)程序完成.
一般多系統(tǒng)引導(dǎo)程序(如Smart Boot Manager, BootStar,PQBoot等)都是將標(biāo)準(zhǔn)主引導(dǎo)記錄替換成自己的引導(dǎo)程序,在運行系統(tǒng)啟動程序之前讓用戶選擇想要啟動的分區(qū).而某些系統(tǒng)自帶的多系統(tǒng)引導(dǎo)程序(如LILO,NT Loader等)則可以將自己的引導(dǎo)程序放在系統(tǒng)所處分區(qū)的第一個扇區(qū)中,在Linux中即為兩個扇區(qū)的SuperBlock.注:以上步驟中使用的是標(biāo)準(zhǔn)的MBR,多系統(tǒng)引導(dǎo)程序的引導(dǎo)過程與此不同.
二、硬盤結(jié)構(gòu)及參數(shù)
3D參數(shù)(Disk Geometry):CHS(Cylinder/Head/Sector)C-Cylinder柱面數(shù)表示硬盤每面盤片上有幾條磁道,最大為1024(用10個二進制位存儲);H-Head磁頭數(shù)表示硬盤總共有幾個磁頭,也就是幾面盤片,最大為256(用8個二進制位存儲);S-Sector扇區(qū)數(shù)表示每條磁道上有幾個扇區(qū),最大為63(用6個二進制位存儲).
1、引導(dǎo)扇區(qū)
Boot Sector組成
Boot Sector也就是硬盤的第一個扇區(qū),它由MBR(Master Boot Record), DPT(Disk PartitionTable) 和 Boot Record ID三部分組成. MBR又稱為主引導(dǎo)記錄,占用BootSector的前446個字節(jié)(0~0x1BD),存放系統(tǒng)主引導(dǎo)程序(它負(fù)責(zé)從活動分區(qū)中裝載并且運行系統(tǒng)引導(dǎo)程序).DPT即主分區(qū)表占用64個字節(jié)(0x1BE~0x1FD),記錄磁盤的基本分區(qū)信息.主分區(qū)表分為四個分區(qū)項,每項16個字節(jié),分別記錄每個主分區(qū)的信息(因此最多可以有四個主分區(qū)). Boot RecordID即引導(dǎo)區(qū)標(biāo)記占用兩個字節(jié)(0x1FE~0x1FF),對于合法引導(dǎo)區(qū),它等于0xaa55,這是判別引導(dǎo)區(qū)是否合法的標(biāo)志).Boot Secor具體結(jié)構(gòu)如圖:
2、分區(qū)表結(jié)構(gòu)簡介
分區(qū)表由四個分區(qū)項構(gòu)成,每一項結(jié)構(gòu)如下:
BYTE State:分區(qū)狀態(tài),0=未激活,0x80=激活(注意此項);
BYTE StartHead:分區(qū)起始磁頭號;
WORD StartSC:分區(qū)起始扇區(qū)和柱面號,底字節(jié)的底6位為扇區(qū)號,高2位為柱面號的第9,10位,高字節(jié)為柱面號的低8位;
BYTE Type:分區(qū)類型,如0x0B=FAT32,0x83=Linux等,00表示此項未用;
BYTE EndHead:分區(qū)結(jié)束磁頭號;
WORD EndSC:分區(qū)結(jié)束扇區(qū)和柱面號,定義同前;
DWORD Relative:在線性尋址方式下的分區(qū)相對扇區(qū)地址(對于基本分區(qū)即為絕對地址);
DWORD Sectors:分區(qū)大小(總扇區(qū)數(shù)).
在DOS或Windows系統(tǒng)下,基本分區(qū)必須以柱面為單位劃分(Sectors*Heads個扇區(qū)),如對于CHS為764/256/63的硬盤,分區(qū)的最小尺寸為256*63*512/1048576=7.875MB.
由于硬盤的第一個扇區(qū)已經(jīng)被引導(dǎo)扇區(qū)占用,所以一般來說,硬盤的第一個磁道(0頭0道)的其余62個扇區(qū)是不會被分區(qū)占用的.某些分區(qū)軟件甚至將第一個柱面全部空出來.擴展