(一)磁盤硬件
磁盤相對于内存有如下3個主要優點:容量很大;每位的價格非常低;當關掉電源後,存儲的信息不丢失。然而,磁盤的動作是機械運動,無論盤片轉動還是磁頭移動,都不可能無限快。所以,磁盤讀寫往往是系統I/O的瓶頸,為改善系統性能,合理地調度磁盤是必要的。
磁盤有很多種類型,最常見的是硬磁盤和軟磁盤。磁盤讀與寫的速度相同,因而用做輔助存儲器。為了提供高存儲器可靠性,可将若幹磁盤組成陣列。從外部看,一個硬盤的組成結構(如圖6-8所示)為:磁頭(Header)、柱面(Cylinder)和扇區(Sector)。
圖6-8 硬盤結構示意圖
· 磁頭
通常看到的硬盤都是封裝好的,看不到内部的構成情況。事實上,在同一個硬盤中存在好幾張硬盤盤片(通常為9片),每片硬盤盤片與雙面軟盤一樣,每面有一個讀/寫頭。最上面和最下面兩張盤片的外存儲面分别與硬盤頂部和底座接觸,所以通常這兩個存儲面不存放數據,也沒有對應的磁頭。硬盤所包含的盤片數可以用如下公式計算出來:
硬盤盤片數=(磁頭數 2)/2
例如常見的16個磁頭的硬盤,通常有(16 2)/2=9個存儲盤片。
· 柱面
通常,把磁盤存儲面上的存儲介質同心圓圓環稱作磁道。對于硬盤來說,由于有多個盤片,這些盤片中同一位置上的磁道不僅存儲密度相同,而且其幾何形狀就像一個存儲介質組成的圓柱一樣,所以,将硬盤上的多個盤片上的同一磁道稱作柱面。
· 扇區
從幾何特性來說,扇區是将磁道按照相同角度等分的扇形。每個磁道上的等分段,都是一個扇區。一個扇區所對應的數據存儲量就是數據塊大小。通常,一個硬盤扇區的大小在512 ~2 048 B之間。
在現代磁盤技術中,将盤面分為若幹區,在外邊的區中每個磁道包含的扇區數比裡邊區中的扇區數多,例如,劃分為兩個區,外區中每個磁道有32個扇區,而内區中每個磁道有16個扇區。實際磁盤,如WD 18300,有16個區。
為了隐藏每個磁道有多少扇區的細節,現代磁盤驅動器提供給操作系統的是虛拟的幾何參數,如有x個柱面、y個磁頭,每個磁道z個扇區。當操作系統提出尋道請求時,再由磁盤控制器把請求的參數重新映射成實際的磁道地址。就是說,磁盤的邏輯地址是由邏輯塊構成的一維數組,邏輯塊是傳送的最小單位,其大小一般為512 B。當然,某些磁盤可以低級格式化,此時可以選擇另外的邏輯塊大小。當文件系統讀/寫某個文件時,就要由邏輯塊号映像成物理塊号,由磁盤驅動程序把它轉換成磁盤地址,再由磁盤控制器把它映像成具體的磁盤地址。
(二)磁盤調度算法
存取盤塊中的信息一般要用3部分時間:首先,系統要把磁頭移到相應的磁道或柱面上,這個時間叫做尋道時間;一旦磁頭到達指定磁道,必須等待所需要的扇區轉到讀寫頭下,這個延遲時間叫做旋轉延遲時間;最後,信息實際在盤和内存之間進行傳送也要花費時間,這部分時間叫做傳輸時間。一次磁盤服務的總時間就是這三者之和。
操作系統的一項職責就是有效地利用硬件。對于磁盤驅動器來說,就是盡量加快存取速度和增加磁盤帶寬(即所傳送的總字節數除以第1個服務請求至最後傳送完成所用去的總時間)。通過調度磁盤I/O服務的順序可以改進存取時間和帶寬。對于大多數磁盤來說,尋道時間遠大于旋轉延遲時間與傳輸時間之和。所以,減少平均尋道時間就可以顯著地改善系統性能。
· 先來先服務法
先來先服務(FCFS)調度算法最簡單,也最容易實現。但它并沒有提供最佳的服務(平均來說)。例如,有一個請求磁盤服務的隊列,要訪問的磁道分别是:
98,183,37,122,14,124,65,67
最早來的請求是訪問98道,最後一個是訪問67道。設磁頭最初在53道上,它要從53道移到98道,然後依次移到183,37,122,14,124,65道,最後移到67道,總共移動了640個磁道。其調度方式如圖6-9所示。
圖6-9 先來先服務調度算法示例
可見,這種調度算法産生的磁頭移動幅度太大:從122道到14道,然後又回到124道。如果把鄰近磁道的請求放在一起服務(如37和14道,122和124道),那麼,磁頭移動總量将明顯減少,對每個請求的服務時間也減少,從而可改善磁盤的吞吐量。此外,磁頭頻繁大幅度移動,容易産生機械振動和誤差,對使用壽命也有損害。
· 最短尋道時間優先法
在把磁頭移到遠處、為另外的請求服務之前,應該先把靠近磁頭當前位置的所有請求都服務完。這種假定的根據是最短尋道時間優先(Shortest Seek Time First, SSTF)調度算法。SSTF選擇的下一個請求距當前磁頭所在位置有最小的尋道時間。由于尋道時間通常正比于兩個請求的磁道差值,所以,磁頭移動總是移到距當前道最近的磁道上去。
例如,用SSTF算法處理上面的請求隊列。當前磁頭在53道上,最接近的磁道是65。一旦移到65道,則下一個最接近的是67道。在此點,到37道的距離是30,而到98道的距離是31,所以,37道距67道最近,被選為下一個服務對象。接下去的服務順序是14,98,122,124道,最後是183道,如圖6-10所示。
圖6-10 最短尋道時間優先調度
采用這種方法,磁頭共移動了236個磁道,是FCFS算法的1/3多一點。很明顯,它改善了磁盤服務。
SSTF從本質上講是SJF (短作業優先法) 調度的形式,它可能導緻某些請求長期得不到服務(即出現“饑餓”問題)。在實際系統中,請求可在任何時候到達。假設隊列中有兩個請求,14和186道。當正在為14道服務時,一個靠近它的請求到來,那麼,它将在下面得到服務,而186道的請求必須等待。從理論上講,這種彼此接近的請求流可能接連不斷地到達,那麼,186道的請求将無限期地等待下去。
SSTF算法與FCFS算法相比有顯著改進,但并不是最優的。例如,若把磁頭從53道移到37道(盡管它不是靠得最近的),然後移到14道,接下去是65,67,98,122,124和183道,則磁頭總移動量降為208個磁道。
· 電梯法
由于到來的請求隊列具有動态性質,所以可采用掃描法。磁頭從磁盤的一端出發,向另一端移動,遇到所需的磁道時就進行服務,磁頭僅移到每個方向上有服務請求的最遠的道上。即:一旦在當前方向上沒有請求了,磁頭的移動方向就反過來,繼續下面的服務。這種算法調度磁頭的移動過程與調度電梯的移動過程相似,因而稱作電梯(Elevator)法。
采用前面的例子,但要知道磁頭移動方向和它最近的位置。如果磁頭正向0道方向移動,那麼,它先為37道服務,接着是14道;到達14道後,因在這個方向上沒有請求了,所以磁頭移動方向反過來,移向盤的另一端,服務序列分别是65, 67, 98, 122, 124和183道。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!