[系統]有關windows2000開機的知識

http://paching.myweb.hinet.net/lesson6.htm#13
這是由陳柏菁所撰寫,我節錄一部分,並列出我的心得:

* 我的心得
硬碟的第0個磁柱(cylinder), 第0個磁頭(head),第一個磁區(sector),
容量為512bytes, 就是MBR.
所以, 一個disk drive只有一個MBR

MBR裡面包含446bytes的BPL(Boot Partition Loader)與64bytes的partition table與2bytes的檢查碼(讓BPL檢查MBR的正確性)
partition table 包含四個分割區的記錄
(按:我參考http://www.datarescue.com/laboratory/partition.htm畫出
partition table的結構圖)

這是一個partition 的結構圖, 有16bytes, 4個partition共有64bytes

struct partition{
    u_int8_t state;
    u_int8_t begin_head;
    u_int16_t begin_cyl_sec;
    u_int8_t type;
    u_int8_t end_head;
    u_int16_t end_cyl_sec;
    u_int32_t sectors_between_MBR_1st_sector;
    u_int32_t sectors_in_partition;
}

state就是代表active flag

type可以是BigDos, Extended等… 我不了解其意義

BPL就是開機時一定會執行的小程式,它會看partition table裡有設active flag的partition
載入那個partition 的”boot sector”

NT loader, LILO, GRUB都是”Boot Loader”, 用來載入作業系統的核心
所以NT loader就用來載入NT的kernel

====================================================================================
原文:
6.1.1 電腦開機簡介

BIOS 簡述:

在還沒正式介紹 Linux 的開機流程之前,先大致認識一下電腦在開機時所會執行的基本工作。講到開機,第一個馬上聯想到的就是 BIOS,所以還是從 BIOS 的觀念開始談起吧 ! BIOS (Basic Input and Output System) 是燒錄於主機版上的 EEPROM 或 Flash memory 記憶體晶片中的程式,主要是用來記憶週邊裝置及系統的相關設定,且提供一個使用者操作介面來讓我們修改設定值,而您在 BIOS 中所做的設定,會被存放在 CMOS RAM (隨機存取記憶體) 中,且這些資料並不會因為您的關機而消失,因為主機板上的鋰電池會負責供應 CMOS RAM 所需的電力。

當我們主機電源打開後,系統會去讀出儲存在 CMOS RAM 中的 BIOS 設定,並開始進行開機自我測試 (Power On Self Test : POST),如果還在 POST 階段時按下 Delete 鍵 (大部分電腦品牌都是使用這個 key),就可以進入到 BIOS 設定的主畫面,比如您要調整開機順序或修改日期時間時就可以這麼做。接下來 BIOS 將依照 CMOS 中所設定的開機順序來依序尋找可開機裝置,如果這個裝置是硬碟的話,那就會先去讀取硬碟的第 0 個磁柱的第 0 個磁頭的第一個磁區 (最前面 512 bytes 的磁區),也就是 MBR (Master Boot Record)。

MBR 簡述:

MBR 內主要是存放著 Boot Partition Loader (BPL : 分割區引導程式) 及 partition table,分別各佔據 446 bytes 及 64 bytes 的空間,而 partition table 是包含著四個分割區的紀錄 (以 hda 來說為 hda1 ~ hda4),比如起始、結束磁柱的資訊及哪個 partition 有設定啟動旗標 (Active) 等,此時如果您硬碟上存在著兩套 windows 的作業系統,那麼 MBR 上的小程式 (BPL) 就會根據 partition table 裡有設定 Active 旗標的那個 partition,而載入該 partition 的 boot sector,以完成後續的開機作業。至於 MBR 內剩下的 2 bytes 是存放檢查碼 (Magic number),主要是讓 BPL 去檢查 MBR 磁區的正確性而已。

MBR 一般是由 DOS/Windows 的分割程式或安裝程式所建立起來的,所以也可以把剛剛提到的分割區引導程式當成一個 DOS/Windows 的 Loader 來看待。不過這裡的 Loader 與 Linux Loader 或 Win NT 系列的 NT Loader 的作用可不太相同噢 !

Boot Loader 簡述:

接著談談 Boot Loader,Boot Loader 顧名思義就是開機載入程式,其主要功用是用來載入作業系統的核心。像 NT Loader 就是用來載入 NT 的 kernel,以便開啟 NT 的作業系統,那 Linux 的 Loader 也是一樣的道理啊 ! 而在 Linux 中經常使用的 Loader 有兩種,分別是 LILO (LInux LOader) 及 GRUB (GRand Unified Bootloader) ,它們都具有 Boot Manager (開機管理程式) 的功能,也就是可以管理多重開機的意思,當您一顆硬碟上存在多套作業系統時,就必須要使用 Boot Manager 來做管理。如果之前您未曾接觸過 Linux 時,可能都會使用 SPFDISK 或 Partition Magic 這一類的 Boot Manager,但學習了 Linux 之後,您就可以使用 LILO 或 GRUB 來管理您的多重開機噢。

一般來說,Linux 的 Boot Loader 為一兩階段程式,第一階段可以放在 MBR 或 /boot 分割區的 boot sector 裡 ( 若 /boot 沒獨立出來,那就在 root partition 裡 ),第二階段則是一定放在 /boot 分割區內 (若 /boot 沒獨立出來,那就在 root partition 裡),像我們在安裝作業系統時,大部分的 distribution 預設都是將 Boot Loader 安置在 MBR,這個就是指 Boot Loader 的第一階段而言。至於為何不把 Linux Loader 全部放在 MBR ? 理由很簡單,因為 MBR 中能使用的空間有限,Loader 的程式碼不夠放啦。

接著我們就要開始提到重點了,當您將 Boot Manager 放在 MBR 的時候,它會取代原本分割區引導程式的功能,所以當 BIOS 在讀取 MBR 時,就會直接交給 Boot Manager 去執行,此時不論您是使用 LILO、GRUB 或 SPFDISK 來擔任 Boot Manager ,都會看到開機選單畫面,來讓您選擇要進入哪套作業系統。請注意,MBR 一次只能安置一個 Boot Manager,比如之前您是使用 SPFDISK 來做開機管理,現在在安裝 Linux 時又把 Linux Loader 放在 MBR,那當然 MBR 裡的 Boot Manager 就變成是 Linux Loader 了。Win NT 系列也有它們自己的 Boot Manager 叫 ntldr,不過這個 ntldr 是放在 partition 裡而非 MBR。

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: