磁盤是廣為應用的保存大量數據的存儲設備,存儲數據的數量級可達幾百到幾千千兆字節,而基于RAM的存儲器只能有幾百或幾千兆字節。不過從磁盤上讀信息的時間為毫秒級,比從DRAM讀慢了10萬倍,比從SRAM讀慢了100萬倍。
1、磁盤構造
磁盤由盤片構成,每個盤片有兩面,稱為表面,表面覆蓋著磁性記錄材料。盤片中央有一個可以旋轉的主軸,它使得盤片以固定的旋轉速率旋轉,通常是5400~15000轉每分鐘(Revolution Per Minute,RPM)。
下圖是一個典型的磁盤表面的結構,每個表面由一組稱為磁道(track)的同心圓組成。每個磁道被劃分為一組扇區(sector),每個扇區包含相等數量的數據位(通常是512字節),這些數據編碼在扇區上的磁性材料中。扇區之間由一些間隙(gap)分隔開,這些間隙中不存儲數據位。間隙存儲用來標識扇區的格式化位。
磁盤通常包含一個或多個這樣的盤片,封裝在一個密封的容器內,如下圖所示。整個裝置通常被稱為磁盤驅動器(disk drive),簡稱為磁盤(disk)。
磁盤制造商通常用柱面(cylinder)來描述多個盤片驅動器的構造,這里柱面是所有盤片表面上到主軸中心的距離相等的磁道的集合。如一個驅動器有三個盤片和六個面,每個表面上的磁道的編號都是一致的,那么柱面k就是6個磁道k的的集合。
2、磁盤容量
一個磁盤上可以記錄的最大位數稱為它的最大容量,或簡稱為容量。磁盤容量由以下因素決定:
- 記錄密度(位/英寸):磁道一英寸的段中可以放入的位數;
- 磁道密度(道/英寸):從盤片中心出發半徑上一英寸的段內可以有的磁道數;
- 面密度(位/平方英寸):記錄密度 與 磁道密度 的乘積。
下面是一個磁盤容量的計算公式:
假如有一個磁盤,有5個盤片,每個盤片2個面,每個面20000條磁道,每個磁道平均300個扇區,每個扇區512個字節,則這個磁盤的容量是:
3、磁盤操作
磁盤用讀/寫頭(read/write head)來讀寫存儲在磁性表面的位,而讀寫頭連接到一個傳動臂一端,如下圖所示。
通過沿著半徑軸前后移動這個傳動臂,驅動器可以將讀/寫頭定位在盤面的任何磁道上。這樣的機械運動成為尋道。多個盤片的磁盤針對每個盤面都有一個獨立的讀/寫頭,如下圖所示。讀/寫頭垂直排列,一致行動。在任何時刻,所有的讀/寫頭都位于同一個柱面上。
在傳動臂末端的讀/寫頭在磁盤表面高度大約0.1微米處的一層氣墊上飛翔,速度大約80km/h。這樣小的間隙,盤面上一?;覊m都像一塊巨石,如果讀/寫頭碰到這樣一塊巨石,就會停下來撞到盤面。
磁盤以扇區大小的塊來讀寫數據,對扇區的訪問時間主要有三部分:
- 尋道時間:移動傳動臂到目標磁道上所需的時間。平均尋道時間通常為3~9ms,最長可到20ms;
- 旋轉時間:讀/寫頭到目標磁道后,目標扇區旋轉到讀/寫頭下所需的時間。最壞情況下,需等磁盤旋轉一圈;
- 傳送時間:當目標扇區的第一個位到讀/寫頭下時,驅動器就可以開始讀或寫該扇區的內容,一個扇區的傳送時間依賴于旋轉速度和每條磁道的扇區數目。
4、邏輯磁盤塊
現代磁盤構造復雜,有多個盤面,這些盤面上有不同的記錄區。為了對操作系統隱藏這樣的復雜性,現代磁盤將它們的構造呈現為一個簡單的視圖:一個B個扇區大小的邏輯塊的序列,編號為0,1,2,...,B-1。磁盤封裝中有一個小的硬件/固件設備,稱為磁盤控制器,維護著邏輯塊號和實際磁盤扇區之間的映射關系。
當操作系統想要執行一個I/O操作時,如讀一個磁盤扇區的數據到主存,操作系統會發送一個命令到磁盤控制面,讓它讀某個邏輯塊號。控制器上的固件執行一個快速表查找,將一個邏輯塊號翻譯成一個三元組(盤面,磁道,扇區),這個三元組唯一地標識了對應的物理扇區??刂破魃系挠布忉屵@個三元組,將讀/寫頭移到適當的柱面,等待扇區移動到讀/寫頭下,將讀/寫頭感知到的位放到控制器上的一個緩沖區中,然后將它們復制到主存中。