硬盤分區、尋址和系統啓動過程

硬盤物理結構
先看下硬盤物理結構

1 硬盤物理結構

硬盤物理上主要是盤片、機械手臂、磁頭、和主軸等組成。在盤片邏輯劃分上又分爲磁道、扇區,例如下圖:

2 盤片磁道、扇區

磁道:
當硬盤盤片旋轉時,磁頭若保持在一個位置上,則磁頭會在盤片表面劃出一個圓形軌跡,這些圓形軌跡就叫做磁道。以盤片中心爲圓心,由此可以劃分出很多磁道來, 這些磁道用肉眼是根本看不到的,因爲它們僅 是盤面上以特殊方式磁化了的一些磁化區,硬盤上的信息便是沿着這樣的軌道存放的,盤片上的磁道由外向內依次從“0”開始進行編號。

柱面:
由於硬盤可以由很多盤片組成,不同盤片的相同磁道就組成了柱面(cylinder),如所示。

磁頭:
假設有N個盤片組成的硬盤,那麼有2N個盤面(一個盤片有2面),那麼磁頭也就有2N個,即每個盤面有一個磁頭。

扇區 :
早期的硬盤盤片的盤面以圓心開始向外放射狀將磁道分割成等分的弧段,這些弧段便是硬盤的扇區(如)。每個扇區一般規定大小爲512byte,這裏大家應該比較疑惑,外圈周長很明顯比內圈要長,怎麼可能每個扇區都是512byte?其實答案早期硬盤外圈存儲比內圈存儲密度低一些,所以外圈很長但是仍然只能存儲512byte,因此如果我們知道了柱面數(磁道數) Cylinders、磁頭數Heads、扇區數Sectors,基本上硬盤的容量我們能夠計算出來 硬盤總容量= Cylinders Heads Sectors * 512byte。 但是由於早期硬盤外圈密度低,導致盤片利用率不高,現在的硬盤盤片則採用內外存儲密度一致的方式,每個磁道都劃分成以512byte大小的弧段,這樣也造成了內外磁道上扇區數量會不一樣,外圈上的扇區數要多於內圈扇區數。

硬盤尋址方式
硬盤存取、讀取數據,首先要做的就是尋址,即定位到數據所在的物理地址,在硬盤上就要找到對應的柱面、磁頭以及對應的扇區,那麼怎麼尋址呢? 有兩種方式:CHS和LBA

CHS模式:
CHS(Cylinder/Head/Sector)尋址模式也稱爲3D模式,是硬盤最早採用的尋址模式,它是在硬盤容量較小的前提下產生的。

硬盤的C/H/S 3D參數既可以計算出硬盤的容量,也可以確定數據所在的具體位置。這是因爲扇區的三維物理地址與硬盤上的物理扇區一一對應,即三維物理地址可完全確定硬盤上的物理扇區。三維物理地址通常以C/H/S的次序來書寫,如C/H/S爲0/1/1,則第一個數字0指0柱面,第二個數字1指1磁頭(盤面),第三個數字1指1扇區,表示該數據位於硬盤1盤面上的0磁道1扇區。現在定位已完成,硬盤內部的參數和主板BIOS之間進行協議,正確發出尋址信號,從而正確定位數據位置。

早期硬盤一個磁道上分63個扇區,物理磁頭最多16個(8個盤片,盤片多了硬盤那就真要加厚了)。採用8位尋址方式,8位二進制位的最大值是256(0-255),可以表示磁頭數,而扇區只有63個(1-63),只需要其中6個二進制位即可表示,剩下2位拿去表示柱面,柱面數用10(8+2)位來表達,達到1024個柱面(0-1023),因此總扇區數(1024×16×63)。前面說一個扇區大小爲512byte,這也就是說,如果以C/H/S尋址模式尋址,則IDE硬盤的最大容量只能爲1024×16×63×512B= 500MB左右。

可以思考下,在8位尋址模式下,其實可以尋址的硬盤最大容量爲1024×256×63×512B =8G,那爲啥CHS模式硬盤只支持到500MB呢?原因很簡單,我們的硬盤盤片不可能讓128片盤片重疊起來吧,那會是多厚??如果採用28位尋址方式,那麼可以尋址137G,盤片也不可能一直堆疊下去。

LBA(Logical Block Addressing)
經常去買硬盤的人都知道,目前硬盤經常都說單碟、雙碟,其實意思就是說硬盤盤片只有1個或者2個,而且都只是用一面,單碟一個磁頭而已,但是硬盤容量確是幾百G,而且硬盤柱面往往都大於1024個柱面,CHS是無法尋址利用完這些硬盤容量的。

另外由於老硬盤的扇區劃分方式對硬盤利用率不高,因此出現了現在的等密度盤,外圈的扇區數要比內圈多,原來的3D尋址方式也就不能適應這種方式,因此也就出現了新的尋址方式LBA,這是以扇區爲單位進行的線性尋址方式,即從最外圈柱面0開始,依次將扇區號編爲0、1….等等,舉個例子,假設硬盤有1024個柱面,由於是等密度硬盤,柱面0(最外圈)假設有128個扇區,依次編號爲0-127,柱面1有120個扇區,則依次編號爲127-246,…..依次最內圈柱面127只有扇區64個,則編號到最後。因此要定位到硬盤某個位置,只需要給出LBA數即可,這個就是邏輯數。

在 LBA 模式下,爲了保留原來CHS時的概念,也可以設置柱面、磁頭、扇區等參數,但是他們並不是實際硬盤的物理參數,只是爲了計算方便而出的一個概念,1023之前的柱面號都一一物理對應,而1023以後的所有柱面號都記錄成1023磁頭最大數可以設置爲255,而扇區數一般是每磁道63個,硬盤控制器會把由柱面、磁頭、扇區等參數確定的地址轉換爲LBA數。這裏我們再此明確兩個概念:

物理扇區號:
一般我們稱CHS模式下的扇區號爲物理扇區號,扇區編號開始位置是1

邏輯扇區號:
LBA下的編號,扇區編號是從0開始。

CHS模式轉換到邏輯扇區號LBA

計算公式
LBA(邏輯扇區號)=磁頭數 × 每磁道扇區數 × 當前所在柱面號 + 每磁道扇區數 × 當前所在磁頭號 + 當前所在扇區號 – 1

例如:CHS=0/0/1,則根據公式LBA=255 × 63 × 0 + 63 × 0 + 1 – 1= 0

也就是說物理0柱面0磁頭1扇區,是邏輯0扇區。

硬盤分區
我們知道,一般使用硬盤,我們首先會對硬盤進行分區,然後對分區使用某個文件系統格式(NTFS、FAT、ext2/ext3)進行分區格式化,然後才能正常使用。那麼分區是怎麼回事呢?我們常見的windows中說到的c、d、e盤是怎麼劃分出來的呢?其實,在裝windows系統過程中,一般我們只需要填寫每個分區的大小,看不出來分區過程的實際工作情況,我們可以從linux系統分區過程反而能反應底層實際分區情況。

柱面是分區的最小單位,即分區是以某個某個柱面號開始到某個柱面號結束的。

如圖,柱面1~200我們可以分爲一個區,柱面201~500再劃分爲一個區,501~1000再劃分爲一個區,以此類推。大家可以看到,柱面0沒有在任何分區裏面,爲何?這裏說說,前面說到硬盤從外圈(柱面0)到內圈扇區是依次編號,看似各個扇區沒有什麼區別,但是這裏硬盤的柱面0的第一個扇區(邏輯扇區0,CHS表示應該是0/0/1)卻是最重要的,因爲硬盤的第一個扇區記錄了整個硬盤的重要信息,第一個扇區(512個字節)主要記錄了兩部分:

① MBR(Master Boot Record):主引導程序就放在這裏,主引導程序是引導操作系統的一個程序,但是這部分只佔446字節。

② DPT(Disk Partition table):硬盤分區表也在這裏,分區表就是用來記錄硬盤的分區情況的,例如c盤是1~200柱面,d盤是201~500柱面,分區表總共只佔64字節,可以看出,分區其實很簡單,就是在這個表裏面修改一下記錄就重新分區了,但是由於只有64字節,而一條記錄就要佔用16字節,這個分區表最多隻能記錄4個分區信息,爲了繼續分出更多分區來,引入了擴展分區的概念,也就是說,在這4個分區中,可以使用其中一條記錄來記錄擴展分區的信息,然後在擴展分區中再繼續劃分邏輯分區,而邏輯分區的分區記錄則記錄在擴展分區的第一個扇區中,如此則可以像鏈表一樣劃分出很多分區來。但是請注意,一個分區表中可以有1~4條主分區,但是最多只能有1個擴展分區。

舉例,主分區可以是P1:1~200,擴展分區P2: 2~1400,擴展分區開始的第一個扇區可以用來記錄擴展分區中劃分出來的邏輯分區。

分區錶鏈
分區表之間是如何關聯的,詳細講一下,分區表是一個單向鏈表,第一個分區表,也就是位於硬盤第一個扇區中的DPT,可以有一項記錄擴展分區的起始位置柱面,類似於指針的概念,指向擴展分區(),根據這項記錄我們可以找到擴展分區的某柱面0磁頭1扇區(CHS),而這個扇區中又存放了第二個分區表,第二個分區表第一項記錄一般表述了當前所在的邏輯分區的起始/終止柱面,第二項記錄表述了下一個邏輯分區所在的0磁頭1扇區(CHS),第三、第四項記錄不存任何信息()。

請看下圖,主引導記錄/分區表所在的是硬盤第一個分區,基本分區1、基本分2、基本分區3都是主分區、擴展分區內有2個邏輯分區,每個邏輯分區的第一個扇區都是分區表,至於引導扇區(DBR),在系統啓動一節中會提及。

系統啓動:
之前提到MBR中安裝的引導加載程序,他的作用是什麼?

① 提供開機菜單選項:可以供用戶選擇啓動哪個操作系統,這是多重引導功能。

② 加載操作系統內核:每個操作系統都有自己的內核,需要引導程序來加載

③ 轉交給其他引導程序:可以將工作移交給其他引導程序來進行上述操作。

其實引導加載程序除了可以安裝在MBR中,還可以直接安裝在每個分區的引導扇區(DBR)中,注意下,每個分區(主分區、邏輯分區)都有一個自己的啓動扇區,專門用來安裝引導加載程序,如上圖標3結構圖。

系統啓動過程:

① 首先,BIOS啓動後,讀取硬盤第一個扇區MBR中的引導加載程序(可能是windows或者linux的grub)

② MBR中的引導程序提供開機菜單,你可以選擇1)直接加載windows 內核 2)將工作轉交給windows 分區內的引導扇區中的加載程序,讓他自己去加載內核 3)轉交給linux分區內引導扇區,讓他去加載linux.

③ 根據用戶選擇的選項和引導加載程序中記錄的分區,到分區表找對應的分區柱面號等分區信息,啓動內核或者分區加載程序。

Window安裝時默認會自動將MBR和windows所在分區的引導扇區都裝上引導程序,而不會提供任何選項給用戶選擇,因此如果之前裝過其他操作系統,然後再另外裝一個windows時,會把公用的MBR覆蓋掉,如此,原來的操作系統就無法啓動了。如果先裝windows,然後裝linux,linux 會覆蓋MBR,然後讓用戶選擇是否將windows等其他操作系統的啓動項添加進來,如果你選擇了添加進來,那麼你在開機時就會有兩個選項讓用戶進行選擇了。

後記
l 這裏討論的全部是硬盤相關的東西,光盤不在此列,而且光盤的磁道並不是從外圈到內圈編號,而是從內圈開始編號,這點注意。

l 硬盤第一個扇區是由MBR和分區表佔據,因此0柱面0磁頭上剩下的62個扇區一般會空出來保留(這部分保留稱爲隱藏扇區,因爲操作系統讀取不到這部分扇區,這部分扇區是提供給BIOS讀取的),而系統分區則從0柱面1磁頭1扇區開始,折算成LBA=255 × 63 × 0 + 63 × 1 + 1 – 1= 63,即從LBA 63號扇區開始分區。不過查閱有的資料提及到另外一種說法,那就是有的硬盤可能0柱面全部空下來,如果真是這樣,那浪費可就真的大了。

l 對於擴展分區的分區表我們知道也是由擴展分區的第一個扇區開始寫,而且是寫到每個邏輯驅動器的第一個扇區,同樣,擴展分區內的第一個扇區所在的磁道剩餘的扇區也會全

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