在看文章前可以先看下這個,
吳海波:專欄的序。
先有個大概的認識會對閱讀有所幫助。
這一章來介紹下常用的存儲設備:硬碟。我們有如下問題:
現代硬碟驅動器如何存儲數據?硬碟對外提供的介面是什麼?數據實際上是如何分布和訪問的?如何提高磁碟調度的性能?
讓我們從理解現代磁碟驅動器的介面開始。所有現代硬碟設備的介面都很簡單。驅動器由大量扇區(512位元組塊)組成,每個扇區都可以讀寫。在有n個扇區的磁碟上,扇區編號從0到n?1。因此,我們可以將磁碟看作扇區數組;0到n?1是驅動器的地址空間。多扇區操作是可以的;事實上,許多文件系統一次讀寫4KB大小的數據(或更多)。然而,在操作磁碟時,驅動器製造商做的唯一保證是,單個512位元組的寫入是原子性的(也就是說,它要麼全部完成,要麼根本不完成);因此,如果發生了意外的中斷,可能只有一小部分數據是真正完成的。
我們在使用磁碟的時候通常會有一些假設,但這些假設在設備的說明中其實並沒有直接規定;Schlosser和Ganger稱這是磁碟驅動器的「默認契約」。具體來說,人們通常可以假設訪問兩個相鄰塊的速度相對較快。通常還可以假設,連續的塊訪問速度比隨機訪問的速度要快。
下面我們一步一步的來說明磁碟的結構。我們從一個碟片開始,你可以想像它是一張cd的樣子,通過改變磁性來持久地存儲數據。磁碟可以有一個或多個碟片;每個盤有兩個面,每個面稱為表面(surface)。這些碟片通常由一些硬質材料(如鋁)製成,然後塗上一層薄薄的磁性層,使驅動器即使在電源關閉時也能持久地存儲信息(就像磁鐵的磁性可以保持很久一樣)。這些碟片都圍繞著主軸捆綁在一起,主軸連接到一個電機上,它以恆定(固定)的速度旋轉碟片。旋轉速度通常以每分鐘旋轉圈數(RPM)來衡量,現代磁碟的值在7,200 RPM到15,000 RPM範圍內。注意,我們通常會對單個旋轉的時間感興趣,例如,10,000 RPM的驅動器一次旋轉大約需要6毫秒。碟片上有一圈一圈的同心圓,我們把這樣的一個同心圓稱為磁軌。一個單一的表面(surface)包含成千上萬個磁軌,它們緊密的排列著,數百個磁軌才和人的頭髮一樣寬。為了從表面上讀和寫,我們需要一種機制,使我們能夠感知(即讀取)磁碟上的磁性,或者促使它們發生變化(即寫入)。這個讀寫過程是由磁碟磁頭完成的;驅動器的每個表面都有這樣的磁頭。磁碟頭連接到一個磁碟臂上,該臂在表面上移動以將磁頭定位於所需的軌道上。