硬盘物理结构
硬盤物理結構
先看下硬盤物理結構
?
1 硬盤物理結構
?
硬盤物理上主要是盤片、機械手臂、磁頭、和主軸等組成。在盤片邏輯劃分上又分為磁道、扇區(qū),例如下圖:
?
2 盤片磁道、扇區(qū)
?
磁道:
當硬盤盤片旋轉(zhuǎn)時,磁頭若保持在一個位置上,則磁頭會在盤片表面劃出一個圓形軌跡,這些圓形軌跡就叫做磁道。以盤片中心為圓心,由此可以劃分出很多磁道來, 這些磁道用肉眼是根本看不到的,因為它們僅 是盤面上以特殊方式磁化了的一些磁化區(qū),硬盤上的信息便是沿著這樣的軌道存放的,盤片上的磁道由外向內(nèi)依次從“0”開始進行編號。
?
柱面:
由于硬盤可以由很多盤片組成,不同盤片的相同磁道就組成了柱面(cylinder),如圖1所示。
磁頭:
假設有N個盤片組成的硬盤,那么有2N個盤面(一個盤片有2面),那么磁頭也就有2N個,即每個盤面有一個磁頭。
扇區(qū) :
早期的硬盤盤片的盤面以圓心開始向外放射狀將磁道分割成等分的弧段,這些弧段便是硬盤的扇區(qū)(如圖2)。每個扇區(qū)一般規(guī)定大小為512byte,這里大家應該比較疑惑,外圈周長很明顯比內(nèi)圈要長,怎么可能每個扇區(qū)都是512byte?其實答案早期硬盤外圈存儲比內(nèi)圈存儲密度低一些,所以外圈很長但是仍然只能存儲512byte,因此如果我們知道了柱面數(shù)(磁道數(shù)) Cylinders、磁頭數(shù)Heads、扇區(qū)數(shù)Sectors,基本上硬盤的容量我們能夠計算出來 硬盤總?cè)萘?#61; Cylinders * Heads * Sectors * 512byte。 但是由于早期硬盤外圈密度低,導致盤片利用率不高,現(xiàn)在的硬盤盤片則采用內(nèi)外存儲密度一致的方式,每個磁道都劃分成以512byte大小的弧段,這樣也造成了內(nèi)外磁道上扇區(qū)數(shù)量會不一樣,外圈上的扇區(qū)數(shù)要多于內(nèi)圈扇區(qū)數(shù)。
硬盤尋址方式
硬盤存取、讀取數(shù)據(jù),首先要做的就是尋址,即定位到數(shù)據(jù)所在的物理地址,在硬盤上就要找到對應的柱面、磁頭以及對應的扇區(qū),那么怎么尋址呢??? 有兩種方式:CHS和LBA
CHS模式:
CHS(Cylinder/Head/Sector)尋址模式也稱為3D模式,是硬盤最早采用的尋址模式,它是在硬盤容量較小的前提下產(chǎn)生的。
硬盤的C/H/S 3D參數(shù)既可以計算出硬盤的容量,也可以確定數(shù)據(jù)所在的具體位置。這是因為扇區(qū)的三維物理地址與硬盤上的物理扇區(qū)一一對應,即三維物理地址可完全確定硬盤上的物理扇區(qū)。三維物理地址通常以C/H/S的次序來書寫,如C/H/S為0/1/1,則第一個數(shù)字0指0柱面,第二個數(shù)字1指1磁頭(盤面),第三個數(shù)字1指1扇區(qū),表示該數(shù)據(jù)位于硬盤1盤面上的0磁道1扇區(qū)?,F(xiàn)在定位已完成,硬盤內(nèi)部的參數(shù)和主板BIOS之間進行協(xié)議,正確發(fā)出尋址信號,從而正確定位數(shù)據(jù)位置。
早期硬盤一個磁道上分63個扇區(qū),物理磁頭最多16個(8個盤片,盤片多了硬盤那就真要加厚了)。采用8位尋址方式,8位二進制位的最大值是256(0-255),可以表示磁頭數(shù),而扇區(qū)只有63個(1-63),只需要其中6個二進制位即可表示,剩下2位拿去表示柱面,柱面數(shù)用10(8+2)位來表達,達到1024個柱面(0-1023),因此總扇區(qū)數(shù)(1024×16×63)。前面說一個扇區(qū)大小為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)
?? 經(jīng)常去買硬盤的人都知道,目前硬盤經(jīng)常都說單碟、雙碟,其實意思就是說硬盤盤片只有1個或者2個,而且都只是用一面,單碟一個磁頭而已,但是硬盤容量確是幾百G,而且硬盤柱面往往都大于1024個柱面,CHS是無法尋址利用完這些硬盤容量的。
另外由于老硬盤的扇區(qū)劃分方式對硬盤利用率不高,因此出現(xiàn)了現(xiàn)在的等密度盤,外圈的扇區(qū)數(shù)要比內(nèi)圈多,原來的3D尋址方式也就不能適應這種方式,因此也就出現(xiàn)了新的尋址方式LBA,這是以扇區(qū)為單位進行的線性尋址方式,即從最外圈柱面0開始,依次將扇區(qū)號編為0、1….等等,舉個例子,假設硬盤有1024個柱面,由于是等密度硬盤,柱面0(最外圈)假設有128個扇區(qū),依次編號為0-127,柱面1有120個扇區(qū),則依次編號為127-246,…..依次最內(nèi)圈柱面127只有扇區(qū)64個,則編號到最后。因此要定位到硬盤某個位置,只需要給出LBA數(shù)即可,這個就是邏輯數(shù)。
? ?在 LBA 模式下,為了保留原來CHS時的概念,也可以設置柱面、磁頭、扇區(qū)等參數(shù),但是他們并不是實際硬盤的物理參數(shù),只是為了計算方便而出的一個概念,1023之前的柱面號都一一物理對應,而1023以后的所有柱面號都記錄成1023磁頭最大數(shù)可以設置為255,而扇區(qū)數(shù)一般是每磁道63個,硬盤控制器會把由柱面、磁頭、扇區(qū)等參數(shù)確定的地址轉(zhuǎn)換為LBA數(shù)。這里我們再此明確兩個概念:
?物理扇區(qū)號:
一般我們稱CHS模式下的扇區(qū)號為物理扇區(qū)號,扇區(qū)編號開始位置是1
?邏輯扇區(qū)號:
LBA下的編號,扇區(qū)編號是從0開始。
CHS模式轉(zhuǎn)換到邏輯扇區(qū)號LBA
計算公式
LBA(邏輯扇區(qū)號)=磁頭數(shù) × 每磁道扇區(qū)數(shù) × 當前所在柱面號 + 每磁道扇區(qū)數(shù) × 當前所在磁頭號 + 當前所在扇區(qū)號 – 1
例如:CHS=0/0/1,則根據(jù)公式LBA=255 × 63 × 0 + 63 × 0 + 1 – 1= 0
也就是說物理0柱面0磁頭1扇區(qū),是邏輯0扇區(qū)。
硬盤分區(qū)
我們知道,一般使用硬盤,我們首先會對硬盤進行分區(qū),然后對分區(qū)使用某個文件系統(tǒng)格式(NTFS、FAT、ext2/ext3)進行分區(qū)格式化,然后才能正常使用。那么分區(qū)是怎么回事呢?我們常見的windows中說到的c、d、e盤是怎么劃分出來的呢?其實,在裝windows系統(tǒng)過程中,一般我們只需要填寫每個分區(qū)的大小,看不出來分區(qū)過程的實際工作情況,我們可以從linux系統(tǒng)分區(qū)過程反而能反應底層實際分區(qū)情況。
柱面是分區(qū)的最小單位,即分區(qū)是以某個某個柱面號開始到某個柱面號結束的。
?
如圖,柱面1~200我們可以分為一個區(qū),柱面201~500再劃分為一個區(qū),501~1000再劃分為一個區(qū),以此類推。大家可以看到,柱面0沒有在任何分區(qū)里面,為何?這里說說,前面說到硬盤從外圈(柱面0)到內(nèi)圈扇區(qū)是依次編號,看似各個扇區(qū)沒有什么區(qū)別,但是這里硬盤的柱面0的第一個扇區(qū)(邏輯扇區(qū)0,CHS表示應該是0/0/1)卻是最重要的,因為硬盤的第一個扇區(qū)記錄了整個硬盤的重要信息,第一個扇區(qū)(512個字節(jié))主要記錄了兩部分:
①??? MBR(Master Boot Record):主引導程序就放在這里,主引導程序是引導操作系統(tǒng)的一個程序,但是這部分只占446字節(jié)。
②??? DPT(Disk Partition table):硬盤分區(qū)表也在這里,分區(qū)表就是用來記錄硬盤的分區(qū)情況的,例如c盤是1~200柱面,d盤是201~500柱面,分區(qū)表總共只占64字節(jié),可以看出,分區(qū)其實很簡單,就是在這個表里面修改一下記錄就重新分區(qū)了,但是由于只有64字節(jié),而一條記錄就要占用16字節(jié),這個分區(qū)表最多只能記錄4個分區(qū)信息,為了繼續(xù)分出更多分區(qū)來,引入了擴展分區(qū)的概念,也就是說,在這4個分區(qū)中,可以使用其中一條記錄來記錄擴展分區(qū)的信息,然后在擴展分區(qū)中再繼續(xù)劃分邏輯分區(qū),而邏輯分區(qū)的分區(qū)記錄則記錄在擴展分區(qū)的第一個扇區(qū)中,如此則可以像鏈表一樣劃分出很多分區(qū)來。但是請注意,一個分區(qū)表中可以有1~4條主分區(qū),但是最多只能有1個擴展分區(qū)。
舉例,主分區(qū)可以是P1:1~200,擴展分區(qū)P2: 2~1400,擴展分區(qū)開始的第一個扇區(qū)可以用來記錄擴展分區(qū)中劃分出來的邏輯分區(qū)。
?
分區(qū)表鏈
?????? 分區(qū)表之間是如何關聯(lián)的,詳細講一下,分區(qū)表是一個單向鏈表,第一個分區(qū)表,也就是位于硬盤第一個扇區(qū)中的DPT,可以有一項記錄擴展分區(qū)的起始位置柱面,類似于指針的概念,指向擴展分區(qū)(圖3),根據(jù)這項記錄我們可以找到擴展分區(qū)的某柱面0磁頭1扇區(qū)(CHS),而這個扇區(qū)中又存放了第二個分區(qū)表,第二個分區(qū)表第一項記錄一般表述了當前所在的邏輯分區(qū)的起始/終止柱面,第二項記錄表述了下一個邏輯分區(qū)所在的0磁頭1扇區(qū)(CHS),第三、第四項記錄不存任何信息(圖4)。
? 請看下圖,主引導記錄/分區(qū)表所在的是硬盤第一個分區(qū),基本分區(qū)1、基本分2、基本分區(qū)3都是主分區(qū)、擴展分區(qū)內(nèi)有2個邏輯分區(qū),每個邏輯分區(qū)的第一個扇區(qū)都是分區(qū)表,至于引導扇區(qū)(DBR),在系統(tǒng)啟動一節(jié)中會提及。
?
系統(tǒng)啟動:
?之前提到MBR中安裝的引導加載程序,他的作用是什么?
①??? 提供開機菜單選項:可以供用戶選擇啟動哪個操作系統(tǒng),這是多重引導功能。
②??? 加載操作系統(tǒng)內(nèi)核:每個操作系統(tǒng)都有自己的內(nèi)核,需要引導程序來加載
③??? 轉(zhuǎn)交給其他引導程序:可以將工作移交給其他引導程序來進行上述操作。
? 其實引導加載程序除了可以安裝在MBR中,還可以直接安裝在每個分區(qū)的引導扇區(qū)(DBR)中,注意下,每個分區(qū)(主分區(qū)、邏輯分區(qū))都有一個自己的啟動扇區(qū),專門用來安裝引導加載程序,如上圖標3結構圖。
?
系統(tǒng)啟動過程:
①??? 首先,BIOS啟動后,讀取硬盤第一個扇區(qū)MBR中的引導加載程序(可能是windows或者linux的grub)
②??? MBR中的引導程序提供開機菜單,你可以選擇1)直接加載windows 內(nèi)核 2)將工作轉(zhuǎn)交給windows 分區(qū)內(nèi)的引導扇區(qū)中的加載程序,讓他自己去加載內(nèi)核 3)轉(zhuǎn)交給linux分區(qū)內(nèi)引導扇區(qū),讓他去加載linux.
③??? 根據(jù)用戶選擇的選項和引導加載程序中記錄的分區(qū),到分區(qū)表找對應的分區(qū)柱面號等分區(qū)信息,啟動內(nèi)核或者分區(qū)加載程序。
?
Window安裝時默認會自動將MBR和windows所在分區(qū)的引導扇區(qū)都裝上引導程序,而不會提供任何選項給用戶選擇,因此如果之前裝過其他操作系統(tǒng),然后再另外裝一個windows時,會把公用的MBR覆蓋掉,如此,原來的操作系統(tǒng)就無法啟動了。如果先裝windows,然后裝linux,linux 會覆蓋MBR,然后讓用戶選擇是否將windows等其他操作系統(tǒng)的啟動項添加進來,如果你選擇了添加進來,那么你在開機時就會有兩個選項讓用戶進行選擇了。
后記
l? 這里討論的全部是硬盤相關的東西,光盤不在此列,而且光盤的磁道并不是從外圈到內(nèi)圈編號,而是從內(nèi)圈開始編號,這點注意。
l? 硬盤第一個扇區(qū)是由MBR和分區(qū)表占據(jù),因此0柱面0磁頭上剩下的62個扇區(qū)一般會空出來保留(這部分保留稱為隱藏扇區(qū),因為操作系統(tǒng)讀取不到這部分扇區(qū),這部分扇區(qū)是提供給BIOS讀取的),而系統(tǒng)分區(qū)則從0柱面1磁頭1扇區(qū)開始,折算成LBA=255 × 63 × 0 + 63 × 1 + 1 – 1= 63,即從LBA 63號扇區(qū)開始分區(qū)。不過查閱有的資料提及到另外一種說法,那就是有的硬盤可能0柱面全部空下來,如果真是這樣,那浪費可就真的大了。
l? 對于擴展分區(qū)的分區(qū)表我們知道也是由擴展分區(qū)的第一個扇區(qū)開始寫,而且是寫到每個邏輯驅(qū)動器的第一個扇區(qū),同樣,擴展分區(qū)內(nèi)的第一個扇區(qū)所在的磁道剩余的扇區(qū)也會全部空余出來,這些保留的扇區(qū)操作系統(tǒng)也是無法讀取的,注意在擴展分區(qū)的第一個扇區(qū)里面是沒有引導加載記錄的。引導加載記錄都是放在隱藏扇區(qū)后面的。可以看圖3,圖4
總結
- 上一篇: 抖音张一鸣:我的大学四年收获及工作感悟
- 下一篇: 2,列表渲染指令v-for以及过滤和排序