硬盤那點事兒

在硬盤的讀寫效率方面比拼的不僅僅是看誰轉的快,還有尋道時間,還有內置緩存。

爲了理解硬盤的工作原理,我們先來打開硬盤看看:

那光潔如銀鏡的圓盤叫磁碟,它的表面就是存放數據的地方。那細如米粒的尖端上就裝着讀寫數據的部件,叫磁頭。一個磁碟的兩面都可以記錄數據,因此磁碟的正反面都會有一個讀寫磁頭。而一個硬盤內可以安裝多個磁碟,也就有多個磁頭,磁碟和磁頭都是好幾層的。看看下面的解剖圖就明白了:

我們再來看看硬盤是如何讀寫數據的。

在還未給硬盤通電前,磁頭總體靠在一個安全的飛機場。這個飛機場要麼在磁碟的最內側,要麼在磁碟的最外側。飛機場部分的表面是不存放數據的,僅用於磁頭的起飛和着陸。

磁碟的大部分區域是用來記錄數據的,這些區域由一圈一圈的磁道組成,每個磁道又被劃分成若干扇區。而磁碟的層疊看起來就像一個圓柱,那些磁道就形成以一層包裹一層的柱面結構,就像大樹的年輪一樣。而硬盤管理存儲空間的方式都是先按柱面來存,再把磁道換到下一個柱面,並非按一個個磁碟來走的。

早期的硬盤採用CHS座標體系規劃硬盤存儲空間,內側磁道和外側磁道的扇區數都相同。即使外側磁道比內側磁道要長得多,但容量只能與內側磁道相同。硬盤總存儲容量實際受內側磁道的記錄密度所限制,這顯然是一種浪費。當磁道密度達到第一次極限時,人類發明了LBA的座標映射,允許外側磁道劃分出更多的扇區,大幅度提升了硬盤容量。

同樣,當LBA模式的硬盤容量又抵達距離的極限時,人類又發明了垂直記錄技術,這又將大幅提升硬盤容量。所謂垂直記錄技術就是把本來在磁碟表面平放的磁記錄單元,改成豎着放。就像一個接一個平躺着的人會佔據很長的距離,但這些人站起來就可以靠攏,從而縮小佔據的距離。因此,垂直記錄技術就可以在同樣長度的磁道上放置更多的磁記錄單元,從而提升硬盤容量。

當硬盤加電時,磁碟便開始加速轉動。磁頭是按精巧的好空氣動力學原理設計出來的戰鬥機,當它在磁頭的表面滑行到一定的速度時就會飛起來,從而浮在磁碟的表面。相信沒有哪種飛機能像硬盤磁頭那樣,以零點幾微米的超低空狀態保持高速飛行。這樣的超低空可以保證磁頭能有效地分辨細小的磁記錄單元的信號變化。

硬盤最怕什麼?震動!在硬盤高速運轉時,震動可能導致超低空飛行的磁頭碰到磁碟表面,從而劃傷磁碟,產生壞道。因此,硬盤運行時絕對禁止震動。

硬盤的轉速和磁碟記錄密度與磁頭讀寫的速度都成近似的正比關係。轉速越快,磁頭讀取數據就越快;而記錄密度越高,相同時間下磁頭讀取的數據就越多。因此,人們總喜歡購買轉速高的硬盤或容量大的硬盤。但除了轉速和記錄密度之外,其他方面的因素對硬盤的讀寫效率更加總要。

當硬盤接到讀寫命令時,磁頭首先需要移動到要讀寫數據的磁道上,這個過程稱爲尋道。尋道需要時間的,這取決於磁頭當前磁道與目標磁道的距離。如果距離遠,移動磁頭的時間就長,尋道就慢;如果距離很近,移動磁頭的時間就短,尋道就快。平均尋道時間是影響硬盤讀寫效率的最重要指標。

磁頭找到需要讀取的磁道後,要讀取的數據塊可能還沒有轉過來,這也需要等待。平均等待讀取數據塊的時間稱爲平均潛伏時間,一般是磁碟旋轉週期的一半。由於現在的硬盤轉速都很快,因此這個等待時間比起平均尋道時間來說要小得多。

整體讀寫效率是由硬盤的平均訪問時間來衡量的,它是指從硬盤收到訪問命令,到完成所有操作並返回最終結果所花費的時間。平均訪問時間基本就等於平均尋道時間與平均潛伏時間之和。因爲這兩個時間指標都與硬盤的機械結構有關,其他電信號切換和指令時間比起機械上所花的時間來說基本可以忽略不計。

由此可見,影響硬盤讀寫效率的主要是平均尋道時間。如果一個文件在硬盤中扇區太分散,東一塊西一段的,那麼讀取這個文件時,磁頭就會嚓嚓嚓地亂跳。由於把大多數的時間都花在尋找不連續的磁道上,讀取文件的效率也就大大降低了。同樣,當我們的硬盤由於文件的平凡更迭,會自然形成許多不連續的文件和磁盤碎片。這時,系統的運行效率也就大大降低,根源也是尋道時間太多。

爲了對硬盤運行原理有一個感性的認識,我們來看看一段錄像:

[hjp2=320,240,true]http://www.leadzen.cn/video/hdplay.flv[/hjp2]

錄像中,Copy & Paste 這種交替跨磁道的讀寫導致了磁頭的劇烈振動,這不僅僅會導致讀寫效率的下降,還會製造噪音,並加速硬盤的損耗。而類似Format那種連續操作時,速度非常快,磁頭也運行得很平穩和安靜。

現代的硬盤都有內置緩存,這些緩存可提供一項重要的功能:“預取”。預讀就是在硬盤讀取完指定扇 區的數據之後、接到系統的下一條指令之前,磁頭接着讀取相鄰的若干扇區的數據並存入緩存中。如果系統接下來所需的數據正好就是相鄰扇區的數據,那麼便可以 直接從緩存中讀取而不用磁頭再尋址,從而極大提高數據訪問速度。

如果,我們定期對硬盤進行碎片整理,儘量保持文件的連續和有序,將對硬盤帶來巨大好處。硬盤在讀取這些連續數據時,磁頭很少劇烈震動,磁盤運行很安靜。因爲連續有序的數據文件可以極大減少尋道時間,既能提高讀取數據的速度,又可減少硬盤損耗,延長使用壽命。

此外,磁盤內置緩存的預讀能力正好符合連續數據的讀取。從尋道時間和緩存命中率兩項指標來看,連續有序的數據可以極大提升電腦系統的運行效率。在實際生活中,一般的文件都會佔用成千上萬個扇區的空間,根據緩存“預取”的原理,如果硬盤中的文件完全沒有磁盤碎片的話,那麼“預取”的命中率就可以達到幾乎100%,但因爲有磁盤碎片,通常“預取”的命中率只在50%左右。

同樣,在數據庫應用系統中,我們也應該儘量保持數據存儲的連續和有序。儘管數據庫會有自己存放數據的格式,操作系統也存在自己的緩存機制。但這些上層的順序結構和緩存機制,也會多多少少體現在硬盤的磁道和扇區的相鄰性上。因爲這些結構和機制也是基於硬盤的順序結構和緩存機制來設計的。因此,在數據庫的數據存儲中儘量保證其物理連續性,將有助於提高數據庫的查詢效率。這也是爲什麼聚集索引要比其他索引快的原因,也是爲什麼精心設計的主鍵可以讓索引的B樹在硬盤上更連續的原因。

如果您讀過薛定諤的那本著名的《生命是什麼》,您將會明白生命的物理學意義就是讓宇宙變得有序。讓世界更有序是生命的天性,有智慧的程序員會讓這種天性融入自己的程序中的。

預祝劉翔在2008奧運會上跑得更加有序!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章