看了很多資料都很片段,在此整理成我認為合理的解釋。

 

首先BIOS 會去硬碟起始512 bytes 稱為MBR ( master boot record)。然後把它放在記憶體000:07c0 然後去執行它。

MBR 的前446 bytes 是code 。接著64 bytes 是partition table ,最後2bytes 是 magic number 0xAA55。

 

 
  

 

partition table 由 4 個 entry 組成,每個是16 bytes 。

其內容主要是此partition 起初 CHS ,結束CHS,另外也有 LBA starting sector ,及size,還有 partition 的 type ,type

用來表達是何種file system ,也可以用來表示此partition 是extended partition。還有一個值是用來表示此partition entry 是

active 或 inactive ,4 個partition 只會有其中一個是active 。

 

 

 

 

Question : active / inactive 的意義是?

Answer : 個人猜測是 active 的話,partition 中有OS, inactive 就只是一般的儲存裝置。另外 active partition 的 boot sector

會有內容,inactive partition boot sector 不會用到,也不會有內容。這裡的內容表示有code 可以執行。

 

認識CHS

 

 

 

 

要讀取硬碟的資料,使用的是BIOS 提供的INT 13 ,需要輸入參數 CHS , 也就是cylinder , head ,sectors。

上面的圖片說明了cylinder , track , sector 。好,那head 是什麼(以下為猜測)?一個platter 有 2 sides , 每側都

可以放資料,也就是一個platter 會有2個head ,現在我們想要讀某個sector ( 固定為512 bytes ) , 首先指出是哪個cylinder,

一個cylinder 會有很多個track ,例如上面的綠色區塊,有 4 個track , 可以利用 head 去說明指定track ,例如head 3 表示讀

第2個platter 的上半邊的track ,接下來指出是track 的哪一個sector 。

 

code 的主要工作是

(1)它自己從0000:07c0 搬到 0000:0600

(2)去讀 active partition ,然後將它partition 的前 512 bytes ( boot sector )讀出來,放在0000:07c0 ,然後去執行它。

 

這時MBR 工作就結束了,換成partition 的 boot sector 掌控。

boot sector 的就是去load kernel。

 

但問題是 kernel 放在哪裡? 先想一下partition ,

partition 已經formatted 好了,它可能是 ext2 , ...。所以會有root '/' ,那麼只要先規定好,把要讀的kernel 放在 /boot 下,

比如稱為 kernel.img好了,它放在 /boot/kernel.img。

 

boot sector 要有能力知道去解讀這個partition 的file system 。假設是ext2 好了。

ext2 的相關參數是放在superblock裡,superblock offset 一定是1024 , length 是1024。

boot sector 若要找到/boot/kernel.img ,首先要

找到root directory 的位置,這很簡單, inode = 2 是root inode ,然後在此inode 的data block 去找directory entry boot ,

然後找到kernel.img 的inode 。找到之後,將它load 到某某memory location (哪裡我不清楚), 然後去執行它。

 

Question: boot sector 和 MBR 有差嗎?

Answer :個人清測是MBR 指的是硬碟前512 bytes ,boot sector 是partition 前512 bytes ,它們的格式是一樣的,magic number 也一樣。

 

注意boot sector  和 MBR 都是 plain binary ,不像一般的application 可能是ELF。

 

因為boot sector 的code 只有446 bytes ,如果想讓boot sector 添加新的功能,boot sector 就要去load 其它有此功能的檔案,可以放在某個特

定的地方,例如: /boot/ 下。

 

 

文章標籤
全站熱搜
創作者介紹
創作者 lettice0913 的頭像
lettice0913

斑的家

lettice0913 發表在 痞客邦 留言(0) 人氣(121)