機(jī)械硬盤(pán)(HDD
辽旋,Hard Disk Drive
)主要由盤(pán)片妓盲、磁頭杂拨、電機(jī)馬達(dá)、接口等組成悯衬。
機(jī)械硬盤(pán)的結(jié)構(gòu)
一個(gè) 機(jī)械硬盤(pán)
由多個(gè)盤(pán)片
疊加而成弹沽。
盤(pán)片(Platters
)的表面涂有磁性物質(zhì)
,這些磁性物質(zhì)用來(lái)記錄二進(jìn)制數(shù)據(jù)。工作時(shí)在主軸馬達(dá)的帶動(dòng)下進(jìn)行高速旋轉(zhuǎn)(比如每分鐘 7200 轉(zhuǎn)
)策橘。每個(gè)盤(pán)片都有上下兩面炸渡,稱為盤(pán)面,每個(gè)盤(pán)面都有一個(gè)對(duì)應(yīng)的讀寫(xiě)磁頭負(fù)責(zé)讀寫(xiě)該盤(pán)面上的數(shù)據(jù)丽已。
每個(gè)盤(pán)面對(duì)應(yīng)一個(gè)磁頭蚌堵,所有的磁頭都是連在同一個(gè)機(jī)械臂桿上的,因此所有磁頭只能 “共進(jìn)退”沛婴,即做相同運(yùn)動(dòng)吼畏。
當(dāng)關(guān)機(jī)時(shí),磁頭會(huì)停留在硬盤(pán)的停泊區(qū)
瘸味,工作時(shí)才會(huì)移動(dòng)到盤(pán)面上方宫仗,依靠磁盤(pán)高速旋轉(zhuǎn)引起的空氣動(dòng)力效應(yīng)懸浮在盤(pán)面上够挂。
在硬盤(pán)系統(tǒng)中旁仿,盤(pán)面按照從上到下的順序從 0 開(kāi)始編號(hào),盤(pán)面號(hào)也叫磁頭號(hào)孽糖,比如一個(gè)硬盤(pán)有兩個(gè)盤(pán)片
枯冈,則盤(pán)面號(hào)為 0 ~ 3
。
名詞解釋:
-
Boom
:機(jī)械臂桿办悟。 -
Head
:磁頭尘奏。 -
Sector
:扇區(qū)。 -
Spindle
:軸病蛉。 -
Track
:磁道炫加。 -
Platter
:盤(pán)面。 -
Cylinder
:柱面铺然。
其中
A
是磁道
俗孝,B
是扇面
,C
是扇區(qū)
魄健,D
是簇
(扇區(qū)組)
在盤(pán)片高速旋轉(zhuǎn)時(shí)保持磁頭不動(dòng)赋铝,那么磁頭就會(huì)在盤(pán)面上形成一個(gè)圓形的軌跡,這些同心的圓形軌跡就是磁道
(Track
)沽瘦。每個(gè)盤(pán)面上都有多個(gè)磁道革骨,這些磁道由外向內(nèi)
從 0 開(kāi)始順序編號(hào)。
【注意】磁道之間并不是緊挨著的析恋,因?yàn)榇呕膯卧さ锰鼤?huì)相互影響良哲。
所有盤(pán)面上半徑相同的同心磁道垂直堆疊在一起構(gòu)成的一個(gè)圓柱,稱為柱面
(Cylinder
)助隧。柱面是一個(gè)抽象出來(lái)的概念筑凫,它在物理上不是一體的,只是在空間上類似于一個(gè)圓柱的外壁。為了方便理解漏健,可以認(rèn)為柱面就是磁道嚎货。柱面上的磁頭由上到下
從 0 開(kāi)始順序編號(hào),數(shù)據(jù)的讀寫(xiě)也是按照柱面進(jìn)行蔫浆。
在讀寫(xiě)數(shù)據(jù)時(shí)殖属,首先在同一柱面內(nèi)從 0 號(hào)磁頭開(kāi)始操作,依次向下在同一柱面的不同盤(pán)面即磁頭上進(jìn)行操作瓦盛,只有當(dāng)同一柱面的所有磁頭全部讀寫(xiě)完畢后才將磁頭切換到下一個(gè)柱面
(同心圓往里的柱面
)洗显。這么做的原因是選取磁頭只需通過(guò)電子切換即可,而選取柱面則必須通過(guò)機(jī)械切換原环,電子切換是相當(dāng)快的挠唆,而機(jī)械切換磁頭則要慢得多。
概括來(lái)說(shuō)嘱吗,就是當(dāng)一個(gè)磁道寫(xiě)滿數(shù)據(jù)后玄组,就在同一柱面的下一個(gè)盤(pán)面上寫(xiě),一個(gè)柱面寫(xiě)滿后谒麦,才會(huì)移動(dòng)到下一個(gè)柱面俄讹,讀數(shù)據(jù)也是按照同樣的方式。
盤(pán)面上可以劃分出很多磁道绕德,但是我們并不需要每次都讀寫(xiě)這么多數(shù)據(jù)患膛,所以又將磁道劃分為了若干更小的弧段,每段被稱為一個(gè)扇區(qū)
(Sector
)耻蛇。
由于這些弧段轉(zhuǎn)動(dòng)的角速度一樣
踪蹬,但是長(zhǎng)度不同,所以線速度也不一樣
臣咖,外圈的線速度大于內(nèi)圈跃捣,即相同的轉(zhuǎn)速下,在同樣的時(shí)間段內(nèi)外圈劃過(guò)的弧段長(zhǎng)度要比內(nèi)圈劃過(guò)的弧段長(zhǎng)度大亡哄。
扇區(qū)從 1 開(kāi)始編號(hào)枝缔,是硬盤(pán)進(jìn)行讀寫(xiě)操作的最小單位
,一般硬盤(pán)的一個(gè)扇區(qū)大小為 512 字節(jié)
——這也就意味著哪怕我們只存放 1 字節(jié)的數(shù)據(jù)也會(huì)占用硬盤(pán)的一個(gè)扇區(qū)(512 字節(jié))蚊惯。后來(lái)為了提升硬盤(pán)的效率和使用率又推出了 4K 大小的扇區(qū)
標(biāo)準(zhǔn)愿卸。
扇區(qū)的物理地址
扇區(qū)存儲(chǔ)的第一個(gè)主要部分
就是標(biāo)識(shí)符,也就是扇區(qū)頭標(biāo)截型,它是一個(gè)扇區(qū)的三維地址趴荸,包括盤(pán)面號(hào)、柱面號(hào)和扇區(qū)號(hào)宦焦,通過(guò)這三個(gè)地址可以唯一確定一個(gè)扇區(qū)发钝《倩粒可用(柱面號(hào)
,盤(pán)面號(hào)
酝豪,扇區(qū)號(hào)
)來(lái)定位任意一個(gè) “磁盤(pán)塊”涛碑。
在 【文件的物理結(jié)構(gòu)】中,我們經(jīng)常提到文件數(shù)據(jù)存放在外存中的幾號(hào)塊(邏輯地址)孵淘,這個(gè)塊號(hào)就可以轉(zhuǎn)換成(柱面號(hào)
蒲障,盤(pán)面號(hào)
,扇區(qū)號(hào)
)的地址形式瘫证。
可根據(jù)該地址讀取一個(gè) “塊”揉阎,操作如下:
- (1)根據(jù)
柱面號(hào)
移動(dòng)磁臂,讓磁頭指向指定柱面背捌; - (2)激活指定盤(pán)面對(duì)應(yīng)的磁頭毙籽;
- (3)磁盤(pán)旋轉(zhuǎn)的過(guò)程中,指定的扇區(qū)會(huì)從磁頭下面劃過(guò)毡庆,這樣就完成了對(duì)指定扇區(qū)的讀/寫(xiě)坑赡。
扇區(qū)的第二個(gè)主要部分
就是存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)段,可分為數(shù)據(jù)和保護(hù)數(shù)據(jù)的糾錯(cuò)碼(ECC
)扭仁。
容量計(jì)算
存儲(chǔ)容量 = 磁頭數(shù)(盤(pán)面數(shù))* 磁道數(shù)(柱面數(shù))* 每個(gè)磁道的扇區(qū)數(shù) * 每個(gè)扇區(qū)的字節(jié)數(shù)
- 以前的硬盤(pán)每個(gè)磁道的扇區(qū)數(shù)是一樣的垮衷,外圈扇區(qū)的密度小厅翔,內(nèi)圈扇區(qū)的密度大乖坠。
- 現(xiàn)在的硬盤(pán)內(nèi)外圈扇區(qū)的密度一致,這樣磁道的長(zhǎng)度越長(zhǎng)刀闷,扇區(qū)就越多熊泵,存儲(chǔ)的數(shù)據(jù)量就越大。
簇或塊
從硬盤(pán)的物理結(jié)構(gòu)來(lái)看甸昏,數(shù)據(jù)存取信息的最小單位是扇區(qū)顽分,一個(gè)扇區(qū)可能為 512 字節(jié)
或者是 4K
。
由于扇區(qū)的容量小且數(shù)量眾多施蜜,在尋址時(shí)比較困難卒蘸,所以操作系統(tǒng)就將相鄰的扇區(qū)組合在一起,形成一個(gè)整體翻默,這個(gè)整體就是操作系統(tǒng)對(duì)硬盤(pán)進(jìn)行存取的最小單位缸沃,在 Windows 下稱為簇
(Cluster
),在 Linux 等系統(tǒng)中稱為塊
(Block
)修械。每個(gè)簇或塊可以包含 2, 4, 8, 16, 32
等趾牧,2 的 n 次方個(gè)扇區(qū)
。
Windows 系統(tǒng)上通過(guò)管理員身份運(yùn)行 fsutil fsInfo ntfsInfo C:
命令肯污,會(huì)得到以下信息:
C:\WINDOWS\system32>fsutil fsInfo ntfsInfo C:
NTFS 卷序列號(hào) : 0x01d5a3f9fb0c2900
NTFS 版本 : 3.1
LFS 版本 : 2.0
總扇區(qū) : 466,752,274 (222.6 GB)
總?cè)杭? : 58,344,034 (222.6 GB)
空余群集 : 9,150,639 ( 34.9 GB)
總保留群集 : 79,649 (311.1 MB)
用于存儲(chǔ)備用的保留 : 0 ( 0.0 KB)
每扇區(qū)字節(jié)數(shù) : 512
每物理扇區(qū)字節(jié)數(shù) : 512
每群集字節(jié)數(shù) : 4096
每 FileRecord 分段字節(jié)數(shù) : 1024
每 FileRecord 分段群集數(shù) : 0
Mft 有效數(shù)據(jù)長(zhǎng)度 : 1.32 GB
Mft 開(kāi)始 Lcn : 0x00000000000c0000
Mft2 開(kāi)始 Lcn : 0x0000000000000002
Mft 區(qū)域開(kāi)始 : 0x0000000002676580
Mft 區(qū)域結(jié)束 : 0x0000000002682da0
MFT 區(qū)域大小 : 200.13 MB
最大設(shè)備修剪程度計(jì)數(shù) : 64
最大設(shè)備修剪字節(jié)計(jì)數(shù) : 0x7fff8000
最大卷修剪程度計(jì)數(shù) : 62
最大卷修剪字節(jié)計(jì)數(shù) : 0x40000000
Resource Manager 標(biāo)識(shí)符: E19CBA6D-0FE9-11EA-9980-484D7ECA4B02
這臺(tái)設(shè)備使用的文件系統(tǒng)是 NTFS
翘单,默認(rèn)的簇大小為 4096 字節(jié)
吨枉。
Linux 系統(tǒng)上通過(guò)以下命令可以查看 block 信息:
$ sudo tune2fs -l /dev/sda1 | grep "Block size"
Block size: 4096
$ stat /boot/ | grep "IO Block"
Size: 4096 Blocks: 8 IO Block: 4096 directory
【設(shè)置 cmd 的顯示語(yǔ)言】
# 設(shè)置為英文
C:\WINDOWS\system32>chcp 437
Active code page: 437
# 設(shè)置為中文
C:\WINDOWS\system32>chcp 936
活動(dòng)代碼頁(yè): 936
訪盤(pán)過(guò)程
當(dāng)需要從硬盤(pán)讀取數(shù)據(jù)時(shí),操作系統(tǒng)會(huì)將數(shù)據(jù)的邏輯地址發(fā)送給硬盤(pán)哄芜,硬盤(pán)的控制電路按照尋址邏輯將邏輯地址翻譯成物理地址貌亭,即確定要讀取的數(shù)據(jù)在哪個(gè)磁道,哪個(gè)扇區(qū)认臊。
為了讀取這個(gè)扇區(qū)的數(shù)據(jù)属提,需要將磁頭移動(dòng)到這個(gè)扇區(qū)的上方,為了實(shí)現(xiàn)這一點(diǎn):
- (1)首先必須找到對(duì)應(yīng)的柱面美尸,即磁頭需要移動(dòng)到對(duì)應(yīng)的磁道上冤议,這個(gè)過(guò)程叫做尋道,所耗費(fèi)的時(shí)間叫做
尋道時(shí)間
师坎。 - (2)然后目標(biāo)扇區(qū)旋轉(zhuǎn)到磁頭下恕酸,這個(gè)過(guò)程耗費(fèi)的時(shí)間叫做
旋轉(zhuǎn)時(shí)間
。 - (3)接下來(lái)磁頭讀取該扇區(qū)的信息胯陋,然后就需要進(jìn)行數(shù)據(jù)傳輸蕊温,即數(shù)據(jù)從硬盤(pán)傳輸?shù)絻?nèi)存。
可以看到遏乔,進(jìn)行一次讀寫(xiě)硬盤(pán)所需要的時(shí)間可以概括為:尋道時(shí)間
义矛、旋轉(zhuǎn)時(shí)間
和傳輸時(shí)間
。目前硬盤(pán)的平均尋道時(shí)間在 3ms
到 15ms
之間盟萨,普通硬盤(pán)的轉(zhuǎn)速一般為 5400 rpm
或 7200 rpm
凉翻。
局部性原理與磁盤(pán)預(yù)讀
由于存儲(chǔ)介質(zhì)的特性,硬盤(pán)本身的存取速度就比主存慢很多捻激,再加上磁頭的機(jī)械運(yùn)動(dòng)制轰,存取速度就更慢了。
為了提高硬盤(pán)的效率胞谭,盡量減少磁盤(pán) I/O
垃杖,硬盤(pán)往往不是嚴(yán)格的按需存取,而是每次都會(huì)預(yù)讀丈屹,即使只需要一個(gè)字節(jié)调俘,磁盤(pán)也會(huì)從這個(gè)位置開(kāi)始,順序地向后讀取一定長(zhǎng)度的數(shù)據(jù)放入內(nèi)存旺垒,這樣做的理論依據(jù)是計(jì)算機(jī)科學(xué)中著名的空間局部性原理
:
當(dāng)一個(gè)數(shù)據(jù)被用到時(shí)彩库,其附近的數(shù)據(jù)通常也會(huì)馬上被用到。
程序在運(yùn)行期間袖牙,一段時(shí)間內(nèi)所需要的數(shù)據(jù)通常都比較集中侧巨,由于磁盤(pán)的順序讀取效率很高(不需要尋道時(shí)間,只需要很少的旋轉(zhuǎn)時(shí)間)鞭达,因此預(yù)讀一般都可以提高磁盤(pán) I/O 的效率
司忱。
磁盤(pán)預(yù)讀的長(zhǎng)度一般為 頁(yè)
(Page
)的整數(shù)倍皇忿。由于操作系統(tǒng)經(jīng)常與內(nèi)存和硬盤(pán)這兩種設(shè)備進(jìn)行通信,為了屏蔽底層物理存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)細(xì)節(jié)坦仍,需要抽象出一種邏輯上的存儲(chǔ)單位鳍烁。
當(dāng)與硬盤(pán)打交道時(shí),操作系統(tǒng)
使用簇或者塊
繁扎;當(dāng)與內(nèi)存打交道時(shí)幔荒,操作系統(tǒng)使用頁(yè)
。
當(dāng)程序要讀取的數(shù)據(jù)不在內(nèi)存中時(shí)梳玫,會(huì)觸發(fā)一個(gè)缺頁(yè)異常爹梁,此時(shí)操作系統(tǒng)會(huì)向磁盤(pán)發(fā)出讀盤(pán)信號(hào),磁盤(pán)會(huì)找到數(shù)據(jù)的起始位置然后連續(xù)讀取一頁(yè)或者幾頁(yè)的數(shù)據(jù)放入內(nèi)存提澎,然后異常返回姚垃,程序繼續(xù)執(zhí)行。
分類
硬盤(pán)按數(shù)據(jù)接口不同盼忌,大致分為 ATA
和 SATA
(可參閱IDE界面)以及 SCSI
和 SAS
积糯。
-
ATA,全稱
Advanced Technology Attachment
谦纱,是用傳統(tǒng)的40-pin
并口數(shù)據(jù)線連接主板與硬盤(pán)的看成,外部接口速度最大為133Mb/s
。- 因?yàn)椴⒖诰€的抗干擾性太差跨嘉,且排線占空間川慌,不利計(jì)算機(jī)散熱,將逐漸被 SATA 所取代偿荷。
-
SATA
于2002
年推出后窘游,原有的ATA
改名為 PATA(Parallel ATA
)。
-
SATA跳纳,全稱
Serial ATA
,也就是使用串口的ATA
接口贪嫂。 -
SCSI贞岭,全稱為
Small Computer System Interface
(小型機(jī)系統(tǒng)接口)八毯。 -
SAS(
Serial Attached SCSI
)是新一代的SCSI
技術(shù)。- 和
SATA
硬盤(pán)相同唉工,都是采取序列式技術(shù)以獲得更高的傳輸速度白指,可達(dá)到3Gb/s
。 - 此外也透過(guò)縮小連接線改善系統(tǒng)內(nèi)部空間等酵紫。
- 和
TIPS:硬盤(pán)轉(zhuǎn)速以每分鐘多少轉(zhuǎn)來(lái)表示告嘲,單位表示為
RPM
,RPM
是Revolutions Per minute
的縮寫(xiě)奖地,是 轉(zhuǎn)/每分鐘橄唬。RPM
值越大,內(nèi)部傳輸率就越快参歹,訪問(wèn)時(shí)間就越短仰楚,硬盤(pán)的整體性能也就越好。