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

硬盤劃分爲磁頭(Head)、柱面(Cylinder)、扇區(Sector)。
磁道: 每一個盤面都有 n 個同心圓組成,每一個同心圓稱之爲一個磁道。由外向內分爲 0 磁道到 n 磁道。 磁頭(Head):每張磁片的正反兩面各有一個磁頭,一個磁頭對應一張磁片的一個面。磁頭固定在可移動的機械臂上,用於讀寫數據。現代硬盤都是雙面可讀寫,所以磁頭數量等於盤片數的 2 倍。磁頭數最大值爲 255 (8 個二進制位)。 柱面(Cylinder):全部磁片中半徑相同的同心磁道構成「柱面"。簡單地理解,柱面就是磁道。n 個盤面的相同磁道 (位置相同) 共同組成一個柱面。柱面數最大爲 1023 (10 個二進制位) 扇區(Sector):從磁盤中心向外畫直線,能夠將磁道劃分爲若干個弧段。每一個磁道上一個弧段被稱之爲一個扇區。扇區是硬盤的最小組成單元,一般是 512 字節。磁道上的扇區數最大爲 63 (6 個二進制位)。 硬盤容量=磁頭數×柱面數×扇區數×512字節

在老式硬盤中,儘管磁道周長不一樣,但每一個磁道上的扇區數是相等的,越往圓心扇區弧段越短,但其存儲密度越高。不過這種方式顯然比較浪費空間,所以現代硬盤則改成等密度結構,這意味着外圍磁道上的扇區數量要大於內圈的磁道,尋址方式也改成以扇區爲單位的線性尋址。
爲了兼容老式的 3D 尋址方式,現代硬盤控制器中都有一個地址翻譯器將 3D 尋址參數翻譯爲線性參數.

硬盤物理結構

先看下硬盤物理結構linux

 

                           1 硬盤物理結構windows

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

 

                             2 盤片磁道、扇區操作系統

 

磁道(Track):

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

 

 

柱面(Cylinder):

因爲硬盤能夠由不少盤片組成,不一樣盤片的相同磁道就組成了柱面(cylinder),如圖1所示。3d

磁頭(Head):

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

扇區 (Sector):

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

硬盤尋址方式

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

CHS模式:

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

硬盤的C/H/S 3D參數(Disk Geometry)既能夠計算出硬盤的容量,也能夠肯定數據所在的具體位置。這是由於扇區的三維物理地址與硬盤上的物理扇區一一對應,即三維物理地址可徹底肯定硬盤上的物理扇區。三維物理地址一般以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方式下,系統把全部的物理扇區都按照某種方式或規則看作是一個線性編號的扇區,即從0到某個最大值方式排列,並連成一條線,把LBA做爲一個總體來對待,而再也不是具體的實際的C/H/S值,這樣只用一個序數就肯定了一個唯一的物理扇區,顯然線性地址是物理扇區的邏輯地址。

爲了保留原來CHS時的概念,也能夠設置柱面、磁頭、扇區等參數,可是他們並非實際硬盤的物理參數,只是爲了計算方便而出的一個概念,1023以前的柱面號都一一物理對應,而1023之後的全部柱面號都記錄成1023磁頭最大數能夠設置爲255,而扇區數通常是每磁道63個,硬盤控制器內部的地址翻譯器會把由柱面、磁頭、扇區等參數肯定的地址轉換爲LBA地址。

 物理扇區號:

通常咱們稱CHS模式下的扇區號爲物理扇區號,扇區編號開始位置是1

 邏輯扇區號:

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

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

計算公式

 因爲系統在寫入數據時是按照從柱面到柱面的方式,在上一個柱面寫滿數據後才移動磁頭到下一個柱面,並從柱面的第一個磁頭的第一個扇區開始寫入,從而使磁盤性能最優,因此,在對物理扇區進行線性編址時,也按照這種方式進行。即把第一柱面(0柱)第一磁頭(0面)的第一扇區(1扇區)編爲邏輯「0」扇區,把第一柱面(0柱)第一磁頭(0面)的第二扇區(2扇區)編爲邏輯「1」扇區,直至第一柱面(0柱)第一磁頭(0面)的第63扇區(63扇區)編爲邏輯「62」扇區,而後轉到第一柱面(0柱)第二磁頭(1面)的第一扇區(1扇區),接着上面編爲邏輯「63」扇區,0柱面全部扇區編號完畢後轉到1柱面的0磁頭1扇區,依次往下進行,直至把全部的扇區都編上號。

 另外還要注意C/H/S中的扇區編號從「1」至「63」,而LBA方式下扇區從「0」開始編號,全部扇區順序進行編號。

從C/H/S到LBA的轉換公式

C表示當前柱面號,

H表示當前磁頭號,

S表示當前扇區號,

CS表示起始柱面號,HS表示起始磁頭號,SS表示起始扇區號,PS表示每磁道扇區數,PH表示每柱面磁道數,因此公式爲:

LBA=(C–CS)﹡PH﹡PS+(H–HS)﹡PS+(S–SS)

通常狀況下,CS=0,HS=0,SS=1,PS=63,PH=255。

下面帶入幾個值驗證一下:

當C/H/S=0/0/1時,代入公式得LBA=0

當C/H/S=0/0/63時,代入公式得LBA=62

當C/H/S=0/1/1時,代入公式得LBA=63

從LBA到C/H/S的轉換公式爲

DIV爲整除運算,MOD爲取商的餘數

C=LBA DIV (PH﹡PS)+CS

H=(LBA DIV PS)MOD PH+HS

S=LBA MOD PS+SS

一樣能夠帶入幾個值進行驗證:

當LBA=0時,代入公式得C/H/S=0/0/1

當LBA=62時,代入公式得C/H/S=0/0/63

當LBA=63時,代入公式得C/H/S=0/1/1

 

硬盤分區

咱們知道,通常使用硬盤,咱們首先會對硬盤進行分區,而後對分區使用某個文件系統格式(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,能夠有一項記錄擴展分區的起始位置柱面,相似於指針的概念,指向擴展分區(圖3),根據這項記錄咱們能夠找到擴展分區的某柱面0磁頭1扇區(CHS),而這個扇區中又存放了第二個分區表,第二個分區表第一項記錄通常表述了當前所在的邏輯分區的起始/終止柱面,第二項記錄表述了下一個邏輯分區所在的0磁頭1扇區(CHS),第3、第四項記錄不存任何信息(圖4)。

  請看下圖,主引導記錄/分區表所在的是硬盤第一個分區,基本分區一、基本分二、基本分區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等其餘操做系統的啓動項添加進來,若是你選擇了添加進來,那麼你在開機時就會有兩個選項讓用戶進行選擇了。

後記

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

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

對於擴展分區的分區表咱們知道也是由擴展分區的第一個扇區開始寫,並且是寫到每一個邏輯驅動器的第一個扇區,一樣,擴展分區內的第一個扇區所在的磁道剩餘的扇區也會所有空餘出來,這些保留的扇區操做系統也是沒法讀取的,注意在擴展分區的第一個扇區裏面是沒有引導加載記錄的。引導加載記錄都是放在隱藏扇區後面的。能夠看圖3,圖4

相關文章
相關標籤/搜索