在前文《磁盤開篇:扒開機(jī)械硬盤堅硬的外衣全谤!》中,我們了解了機(jī)械硬盤的物理構(gòu)造联予,是由磁盤面啼县,磁道、扇區(qū)等更小的單位組成的沸久,如下圖:
分區(qū)是操作系統(tǒng)對磁盤進(jìn)行管理的第一步,這也是我們?nèi)魏我粋€計算機(jī)使用者都非常熟悉的概念余蟹。例如Windows下的C卷胯、D、E威酒、F盤窑睁。那么請思考一下,如果你是操作系統(tǒng)的設(shè)計者葵孤,讓你把整塊磁盤分成C担钮、D等分區(qū),你會怎么分呢尤仍?
為了方便討論箫津,我們這里你要分的硬盤是有50個盤面,3000個柱面宰啦。我們給出兩種方案
- 方案一: 50個盤面苏遥,C盤是0-10盤面, D盤是10-20個盤面,……
- 方案二:3263個柱面赡模,C盤0-1000個柱面田炭,D盤1001-20001個柱面,……
接下來我們來討論下那種方案更優(yōu)秀,這得從磁盤的讀寫延時角度說起漓柑。讀寫原理說起來也簡單教硫,就是磁頭要找到指定的磁道叨吮,指定的扇區(qū),進(jìn)而把數(shù)據(jù)讀取出來或者寫入進(jìn)去的過程瞬矩。這個過程分成如下三步:
- 第一步茶鉴,首先是磁頭徑向移動來尋找數(shù)據(jù)所在的磁道。這部分時間叫尋道時間丧鸯。尋道時間蛤铜,現(xiàn)代磁盤大概在3-15ms,其中尋道時間大小主要受磁頭當(dāng)前所在位置和目標(biāo)磁道所在位置相對距離的影響
- 第二步丛肢,找到目標(biāo)磁道后通過盤面旋轉(zhuǎn)围肥,將目標(biāo)扇區(qū)移動到磁頭的正下方,這部分時間叫旋轉(zhuǎn)延遲》湓酰現(xiàn)在主流服務(wù)器上經(jīng)常使用的是1W轉(zhuǎn)/分鐘的磁盤穆刻,每旋轉(zhuǎn)一周所需的時間為60*1000/10000=6ms,故其旋轉(zhuǎn)延遲為(0-6ms)
- 第三步杠步,向目標(biāo)扇區(qū)讀取或者寫入數(shù)據(jù)氢伟,這部分時間叫存取時間。這個是電磁操作幽歼,所以一般耗時較短朵锣,為零點幾ms。
到此為止甸私,單次磁盤IO時間 = 尋道時間 + 旋轉(zhuǎn)延遲 + 存取時間
分區(qū)上采用哪一種方案诚些,最主要看的是那種方式性能更快。在磁盤分區(qū)的使用中皇型,存在一個基本事實诬烹,那就是同一分區(qū)下的數(shù)據(jù)經(jīng)常會一起讀取。兩種方案的對于旋轉(zhuǎn)延遲弃鸦、和存取時間上表現(xiàn)的性能是一樣的绞吁,主要區(qū)別是在尋道時間的表現(xiàn)上:
假如采用第一種,那么這樣磁頭就需要在3000多個磁道間不停地跳來跳去唬格,這樣磁盤的尋道時間就降不下來家破。而對于方案二,假如對于磁盤C西轩,只需要在磁頭在1-1000個磁道間移動就可以了员舵,大大降低了尋道時間。
所以所有的操作系統(tǒng)采用的都是方案二藕畔,沒有用方案一的马僻。如果你在Linux下使用過fdisk進(jìn)行過分區(qū)的話可以注意到以下信息。
分區(qū)的過程就是你輸入起始柱面號和截至柱面號的過程注服。不過在實際中韭邓,分區(qū)并不能從0號柱面開始的措近,因為磁盤的第一個磁道對應(yīng)的柱面會被用來安裝引導(dǎo)加載程序以及磁盤分區(qū)表。
所以女淑,操作系統(tǒng)通過按磁道對應(yīng)的柱面劃分分區(qū)瞭郑,來降低磁盤IO所花費(fèi)的的尋道時間 ,最終提高磁盤的讀寫性能鸭你。
歡迎搜索微信公眾號:開發(fā)內(nèi)功修煉