磁盤是廣為應(yīng)用的保存大量數(shù)據(jù)的存儲設(shè)備,存儲數(shù)據(jù)的數(shù)量級可達(dá)幾百到幾千千兆字節(jié),而基于RAM的存儲器只能有幾百或幾千兆字節(jié)。不過從磁盤上讀信息的時間為毫秒級,比從DRAM讀慢了10萬倍,比從SRAM讀慢了100萬倍。
1、磁盤構(gòu)造
磁盤由盤片構(gòu)成,每個盤片有兩面,稱為表面,表面覆蓋著磁性記錄材料。盤片中央有一個可以旋轉(zhuǎn)的主軸,它使得盤片以固定的旋轉(zhuǎn)速率旋轉(zhuǎn),通常是5400~15000轉(zhuǎn)每分鐘(Revolution Per Minute,RPM)。
下圖是一個典型的磁盤表面的結(jié)構(gòu),每個表面由一組稱為磁道(track)的同心圓組成。每個磁道被劃分為一組扇區(qū)(sector),每個扇區(qū)包含相等數(shù)量的數(shù)據(jù)位(通常是512字節(jié)),這些數(shù)據(jù)編碼在扇區(qū)上的磁性材料中。扇區(qū)之間由一些間隙(gap)分隔開,這些間隙中不存儲數(shù)據(jù)位。間隙存儲用來標(biāo)識扇區(qū)的格式化位。

磁盤通常包含一個或多個這樣的盤片,封裝在一個密封的容器內(nèi),如下圖所示。整個裝置通常被稱為磁盤驅(qū)動器(disk drive),簡稱為磁盤(disk)。

磁盤制造商通常用柱面(cylinder)來描述多個盤片驅(qū)動器的構(gòu)造,這里柱面是所有盤片表面上到主軸中心的距離相等的磁道的集合。如一個驅(qū)動器有三個盤片和六個面,每個表面上的磁道的編號都是一致的,那么柱面k就是6個磁道k的的集合。
2、磁盤容量
一個磁盤上可以記錄的最大位數(shù)稱為它的最大容量,或簡稱為容量。磁盤容量由以下因素決定:
- 記錄密度(位/英寸):磁道一英寸的段中可以放入的位數(shù);
- 磁道密度(道/英寸):從盤片中心出發(fā)半徑上一英寸的段內(nèi)可以有的磁道數(shù);
- 面密度(位/平方英寸):記錄密度 與 磁道密度 的乘積。
下面是一個磁盤容量的計算公式:

假如有一個磁盤,有5個盤片,每個盤片2個面,每個面20000條磁道,每個磁道平均300個扇區(qū),每個扇區(qū)512個字節(jié),則這個磁盤的容量是:

3、磁盤操作
磁盤用讀/寫頭(read/write head)來讀寫存儲在磁性表面的位,而讀寫頭連接到一個傳動臂一端,如下圖所示。

通過沿著半徑軸前后移動這個傳動臂,驅(qū)動器可以將讀/寫頭定位在盤面的任何磁道上。這樣的機(jī)械運(yùn)動成為尋道。多個盤片的磁盤針對每個盤面都有一個獨(dú)立的讀/寫頭,如下圖所示。讀/寫頭垂直排列,一致行動。在任何時刻,所有的讀/寫頭都位于同一個柱面上。

在傳動臂末端的讀/寫頭在磁盤表面高度大約0.1微米處的一層氣墊上飛翔,速度大約80km/h。這樣小的間隙,盤面上一粒灰塵都像一塊巨石,如果讀/寫頭碰到這樣一塊巨石,就會停下來撞到盤面。
磁盤以扇區(qū)大小的塊來讀寫數(shù)據(jù),對扇區(qū)的訪問時間主要有三部分:
- 尋道時間:移動傳動臂到目標(biāo)磁道上所需的時間。平均尋道時間通常為3~9ms,最長可到20ms;
- 旋轉(zhuǎn)時間:讀/寫頭到目標(biāo)磁道后,目標(biāo)扇區(qū)旋轉(zhuǎn)到讀/寫頭下所需的時間。最壞情況下,需等磁盤旋轉(zhuǎn)一圈;
- 傳送時間:當(dāng)目標(biāo)扇區(qū)的第一個位到讀/寫頭下時,驅(qū)動器就可以開始讀或?qū)懺撋葏^(qū)的內(nèi)容,一個扇區(qū)的傳送時間依賴于旋轉(zhuǎn)速度和每條磁道的扇區(qū)數(shù)目。

4、邏輯磁盤塊
現(xiàn)代磁盤構(gòu)造復(fù)雜,有多個盤面,這些盤面上有不同的記錄區(qū)。為了對操作系統(tǒng)隱藏這樣的復(fù)雜性,現(xiàn)代磁盤將它們的構(gòu)造呈現(xiàn)為一個簡單的視圖:一個B個扇區(qū)大小的邏輯塊的序列,編號為0,1,2,...,B-1。磁盤封裝中有一個小的硬件/固件設(shè)備,稱為磁盤控制器,維護(hù)著邏輯塊號和實(shí)際磁盤扇區(qū)之間的映射關(guān)系。
當(dāng)操作系統(tǒng)想要執(zhí)行一個I/O操作時,如讀一個磁盤扇區(qū)的數(shù)據(jù)到主存,操作系統(tǒng)會發(fā)送一個命令到磁盤控制面,讓它讀某個邏輯塊號。控制器上的固件執(zhí)行一個快速表查找,將一個邏輯塊號翻譯成一個三元組(盤面,磁道,扇區(qū)),這個三元組唯一地標(biāo)識了對應(yīng)的物理扇區(qū)。控制器上的硬件會解釋這個三元組,將讀/寫頭移到適當(dāng)?shù)闹妫却葏^(qū)移動到讀/寫頭下,將讀/寫頭感知到的位放到控制器上的一個緩沖區(qū)中,然后將它們復(fù)制到主存中。
