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