1. 程式人生 > >作業系統知識點總結(十六)磁碟的結構,磁碟排程演算法

作業系統知識點總結(十六)磁碟的結構,磁碟排程演算法

(一)磁碟結構

磁碟(Disk)是由表面塗有磁性物質的金屬或塑料構成的圓形碟片,通過一個稱為磁頭 的導體線圈從磁碟中存取資料。在讀/寫操作期間,磁頭固定,磁碟在下面高速旋轉。如圖 4-23所示,磁碟的盤面上的資料儲存在一組同心圓中,稱為磁軌。每個磁軌與磁頭一樣寬, 一個盤面有上千個磁軌。磁軌又劃分為幾百個扇區,每個扇區固定儲存大小(通常為512B), 一個扇區稱為一個盤塊。相鄰磁軌及相鄰扇區間通過一定的間隙分隔開,以避免精度錯誤。

注意,由於扇區按固定圓心角度劃分,所以密度從最外道向裡道增加,磁碟的儲存能力受限於最內道的最大記錄密度。

磁碟安裝在一個磁碟驅動器中,它由磁頭臂、用於旋轉磁碟的主軸和用於資料輸入/輸 出的電子裝置組成。如圖4-24所示,多個碟片垂直堆疊,組成磁碟組,每個盤面對應一個 磁頭,所有磁頭固定在一起,與磁碟中心的距離相同且一起移動。所有碟片上相對位置相同 的磁軌組成柱面。按照這種物理結構組織,扇區就是磁碟可定址的最小儲存單位,磁碟地址 用“柱面號 • 盤面號 • 扇區號(或塊號)”表示。
 


磁碟按不同方式可以分為若干型別:磁頭相對於碟片的徑向方向固定的稱為固定頭磁 盤,每個磁軌一個磁頭;磁頭可移動的稱為活動頭磁碟,磁頭臂可以來回伸縮定位磁軌。磁 盤永久固定在磁碟驅動器內的稱為固定盤磁碟;可移動和替換的稱為可換盤磁碟。

 

(二)磁碟排程演算法

一次磁碟讀寫操作的時間由尋找(尋道)時間、延遲時間和傳輸時間決定:

1) 尋找時間Ts:活動頭磁碟在讀寫資訊前,將磁頭移動到指定磁軌所需要的時間。這個時間除跨越n條磁軌的時間外,還包括啟動磁臂的時間s,即:

式中,m是與磁碟驅動器速度有關的常數,約為0.2ms,磁臂的啟動時間約為2ms。

2)延遲時間Tr:磁頭定位到某一磁軌的扇區(塊號)所需要的時間,設磁碟的旋轉速度為r,則:

對於硬碟,典型的旋轉速度為5400r/m,相當於一週11.1ms,則Tr為5.55ms;對於軟盤,其旋轉速度在300~600r/m之間,則Tr為50~100ms。

3) 傳輸時間Tt:從磁碟讀出或向磁碟寫入資料所經歷的時間,這個時間取決於每次所讀/寫的位元組數b和磁碟的旋轉速度:

式中,r為磁碟每秒鐘的轉數;N為一個磁軌上的位元組數。

在磁碟存取時間的計算中,尋道時間與磁碟排程演算法相關,下面將會介紹分析幾種演算法,而延遲時間和傳輸時間都與磁碟旋轉速度相關,且為線性相關,所以在硬體上,轉速是磁碟效能的一個非常重要的引數。

總平均存取時間Ta可以表示為:


雖然這裡給出了總平均存取時間的公式,但是這個平均值是沒有太大實際意義的,因為在實際的磁碟I/O操作中,存取時間與磁碟排程演算法密切相關。排程演算法直接決定尋找時間,從而決定了總的存取時間。

目前常用的磁碟排程演算法有以下幾種:

1) 先來先服務(First Come First Served, FCFS)演算法

FCFS演算法根據程序請求訪問磁碟的先後順序進行排程,這是一種最簡單的排程演算法,如圖4-25所示。該演算法的優點是具有公平性。如果只有少量程序需要訪問,且大部分請求都是訪問簇聚的檔案扇區,則有望達到較好的效能;但如果有大量程序競爭使用磁碟,那麼這種演算法在效能上往往接近於隨機排程。所以,實際磁碟排程中考慮一些更為複雜的排程演算法。
 


圖4-25 FCFS磁碟排程演算法


例如,磁碟請求佇列中的請求順序分別為55、58、39、18、90、160、150、38、184,磁頭初始位置是100磁軌,釆用FCFS演算法磁頭的運動過程如圖4-25所示。磁頭共移動了 (45+3+19+21+72+70+10+112+146)=498 個磁軌,平均尋找長度=498/9=55.3。

2) 最短尋找時間優先(Shortest  Seek  Time  First, SSTF)演算法

SSTF演算法選擇排程處理的磁軌是與當前磁頭所在磁軌距離最近的磁軌,以使每次的尋找時間最短。當然,總是選擇最小尋找時間並不能保證平均尋找時間最小,但是能提供比 FCFS演算法更好的效能。這種演算法會產生“飢餓”現象。如圖4-26所示,若某時刻磁頭正在 18號磁軌,而在18號磁軌附近頻繁地增加新的請求,那麼SSTF演算法使得磁頭長時間在18 號磁軌附近工作,將使184號磁軌的訪問被無限期地延遲,即被“餓死”。
 


圖4-26  SSTF磁碟排程演算法


例如,磁碟請求佇列中的請求順序分別為55、58、39、18、90、160、150、38、184,磁頭初始位置是100磁軌,釆用SSTF演算法磁頭的運動過程如圖4-26所示。磁頭共移動了 (10+32+3+16+1+20+132+10+24)=248 個磁軌,平均尋找長度=248/9=27.5。

3) 掃描(SCAN)演算法(又稱電梯演算法)

SCAN演算法在磁頭當前移動方向上選擇與當前磁頭所在磁軌距離最近的請求作為下一次服務的物件,如圖4-27所示。由於磁頭移動規律與電梯執行相似,故又稱為電梯排程演算法。SCAN演算法對最近掃描過的區域不公平,因此,它在訪問區域性性方面不如FCFS演算法和 SSTF演算法好。
 


圖4-27  SCAN磁碟排程演算法


例如,磁碟請求佇列中的請求順序分別為55、58、39、18、90、160、150、38、184,磁頭初始位置是100 磁軌。釆用SCAN演算法時,不但要知道磁頭的當前位置,還要知道磁頭的移動方向,假設磁頭沿磁軌號增大的順序移動,則磁頭的運動過程如圖4-27所示。磁頭共移動了(50+10+24+94+32+3+16+1+20)=250 個磁軌,平均尋找長度=250/9=27.8。

4) 迴圈掃描(Circulair SCAN, C-SCAN)演算法

在掃描演算法的基礎上規定磁頭單向移動來提供服務,回返時直接快速移動至起始端而不服務任何請求。由於SCAN演算法偏向於處理那些接近最裡或最外的磁軌的訪問請求,所以使用改進型的C-SCAN演算法來避免這個問題。

釆用SCAN演算法和C-SCAN演算法時磁頭總是嚴格地遵循從盤面的一端到另一端,顯然,在實際使用時還可以改進,即磁頭移動只需要到達最遠端的一個請求即可返回,不需要到達磁碟端點。這種形式的SCAN演算法和C-SCAN演算法稱為LOOK和C-LOOK排程。這是因為它們在朝一個給定方向移動前會檢視是否有請求。注意,若無特別說明,也可以預設SCAN 演算法和C-SCAN演算法為LOOK和C-LOOK排程。
 


圖4-28  C-SCAN磁碟排程演算法


例如,磁碟請求佇列中的請求順序分別為55、58、39、18、90、160、150、38、184,磁頭初始位置是100磁軌。釆用C-SCAN演算法時,假設磁頭沿磁軌號增大的順序移動,則磁頭的運動過程如圖4-28所示。磁頭共移動了(50+10+24+166+20+1+16+3+32)=322個磁軌,平均尋道長度=322/9=35.8。

對比以上幾種磁碟排程演算法,FCFS演算法太過簡單,效能較差,僅在請求佇列長度接近於1時才較為理想;SSTF演算法較為通用和自然;SCAN演算法和C-SCAN演算法在磁碟負載較大時比較佔優勢。它們之間的比較見表4-4。
 

表4-4  磁碟排程演算法比較
  優  點 缺  點
FCFS演算法 公平、簡單 平均尋道距離大,僅應用在磁碟I/O較少的場合
SSTF演算法 效能比“先來先服務”好 不能保證平均尋道時間最短,可能出現“飢餓”現象
SCAN演算法 尋道效能較好,可避免“飢餓”現象 不利於遠離磁頭一端的訪問請求
C-SCAN演算法 消除了對兩端磁軌請求的不公平 --


除減少尋找時間外,減少延遲時間也是提高磁碟傳輸效率的重要因素。可以對盤面扇區進行交替編號,對磁碟片組中的不同盤面錯位命名。假設每個盤面有8個扇區,磁碟片組共 8個盤面,則可以釆用如圖4-29所示的編號。
 


圖4-29磁碟片組扇區編號


磁碟是連續自轉裝置,磁頭讀/寫一個物理塊後,需要經過短暫的處理時間才能開始讀/ 寫下一塊。假設邏輯記錄資料連續存放在磁碟空間中,若在盤面上按扇區交替編號連續存放,則連續讀/寫多個記錄時能減少磁頭的延遲時間;同柱面不同盤面的扇區若能錯位編號,連續讀/寫相鄰兩個盤面的邏輯記錄時也能減少磁頭延遲時間。

由於傳輸時間由磁碟轉速決定,所以無法通過其他方法減少傳輸時間。以圖4-29為例,在隨機扇區訪問情況下,定位磁軌中的一個扇區平均需要轉過4個扇區,這時,延遲時間是傳輸時間的4倍,這是一種非常低效的存取方式。理想化的情況是不需要定位而直接連續讀取扇區,沒有延遲時間,這樣磁碟資料存取效率可以成倍提高。但是由於讀取扇區的順序是不可預測的,所以延遲時間不可避免。圖4-29中的編號方式是讀取連續編號扇區時的一種方法。