引言:在多道程式設計的計算機系統中,各個程序可能會不斷對磁碟提出讀/寫請求。有時候程序傳送請求的速度比磁碟響應的還要快,因此我們有必要為每個磁碟裝置建立乙個等待佇列,合理進行磁碟排程。本文將回顧影響磁碟讀寫時間的三個因素,並介紹幾種常見的排程演算法(fcfs、stf、ssf、 es、esla、owes)。
影響磁碟讀寫時間的主要因素有尋道時間、旋轉延遲和傳輸時間。總平均訪問時間ta可以表示為:ta = ts + tr + tt。
雖然這裡給出了平均訪問時間的公式,但是這個平均值是沒有太大實際意義的。因為在上述3個因素中,尋道時間居於支配地位,且其為軟體開發人員可控因素。為了提高磁碟的讀寫效率,需要降低磁碟的尋道時間,實現的手段則是磁碟排程。磁碟排程演算法主要有以下幾種:fcfs、stf、ssf、 es、esla、owes。
在《作業系統之哲學原理》這本書中,講尋道時間、旋轉延遲、資料傳輸這三個影響磁碟i/o操作的因素中,尋道耗費時間居於支配地位,故提高磁碟的讀寫效率,需要降低尋道時間,相關的磁碟排程演算法也是圍繞著降低尋道時間展開的。2.1、先來先服務fcfs原文如下:影響磁碟讀寫時間的因素有3個:尋道時間、旋轉延遲、資料傳輸時間。而在這三者中,前兩者為機械運動,資料傳輸主要為電子運動。顯然機械運動的速度遠低於電子執行的速度。前兩個機械運動部分,尋道時間又較長。因此,在上述3個因素中,尋道時間居於支配地位。為了提高磁碟的讀寫效率,需要降低磁碟的尋道時間,實現的手段則是磁碟排程。
但我個人認為,三者耗費時間考量只是一方面,最主要的原因是在這三個因素中,我們軟體開發人員可以控制的,只能是尋道時間。因為旋轉延遲依賴於磁碟驅動器的旋轉速度,在保證定位精度的前提下,已經達到其上限,這只能由硬體廠商去優化。同理傳輸時間依賴於旋轉的速度及磁軌容量。故軟體開發人員,能優化的部分,就在總尋道時間。
先來先服務fcfs (first come, first serve):是一種自然公平的排程策略。先來先到,無特權使用者。fcfs演算法根據程序請求訪問磁碟的先後順序進行排程,這是一種最簡單的排程演算法,如圖1所示。
圖1、先來先服務演算法示意圖
例如:,磁碟請求佇列中的請求順序分別為55、58、39、18、90、160、150、38、184,磁頭初始位置是100磁軌,釆用fcfs演算法磁頭的運動過程如圖1所示。磁頭共移動了 (45+3+19+21+72+70+10+112+146)=498 個磁軌,平均尋找長度=498/9=55.3。該演算法的優點是具有公平性。如果只有少量程序需要訪問,且大部分請求都是訪問塊聚的檔案扇區,則有望達到較好的效能;但如果有大量程序競爭使用磁碟,那麼這種演算法在效能上往往接近於隨機排程。所以,實際磁碟排程中往往對每個磁碟的讀寫任務進行區別對待。
2.2、短任務優先stf
短任務優先stf(shortest task first):就是誰的磁碟讀寫資料量少,誰就優先。由於磁碟的訪問時間主要取決於尋道和旋轉延遲,因此讀寫的資料量對整個磁碟讀寫的時間影響並不大。因此此種策略的意義不大。
2.3、短尋道優先ssf
短尋道優先ssf:(shortest seek first)則是考慮當前磁頭離誰的資料最近,誰就優先。由於尋道在磁碟訪問時間中佔得比重最大,此種策略似乎正中要害,能夠縮短磁碟訪問時間。
同樣使用圖1的例子,磁碟請求佇列中的請求順序分別為55、58、39、18、90、160、150、38、184,磁頭初始位置是100磁軌,釆用sstf演算法磁頭的訪問順序:90、58、55、39、38、18、150、160、184。運動過程如圖2所示。磁頭共移動了 (10+32+3+16+1+20+132+10+24)=248 個磁軌,平均尋找長度=248/9=27.5。圖2、ssf排程演算法示意圖
不過ssf排程演算法縮短並不是絕對的。例如,如果當前的磁碟讀寫如圖3所示,則磁碟讀寫請求的執行呈現的是一種左右搖擺的模式。這種情況下總尋道數大幅增加,系統花在尋道上的時間迅速增加。改進的辦法就是不要左右擺動,而令其單向運動,即電梯排程策略。
圖3、ssf排程演算法左右搖擺示意圖
2.4、電梯排程es
電梯排程策略es:(elevator scheduling),又稱掃瞄演算法(scan),先滿足乙個方向上所有請求,再滿足相反方向的所有請求,迴圈往復。磁頭向每個方向運動時(由里向外和由外向裡),皆掃瞄到頭。
圖4、es排程演算法示意圖
對該策略進行仔細分析發現,其執行模式與電梯執行模式並不完全相同,而是一掃到底。而乙個方向掃瞄到頭再反轉方向也許並不是最有效。如果乙個方向上已經沒有請求了,我們可以提前掉頭。而無需掃瞄到末端。這種改進後的演算法就是提前檢視電梯法。
2.5、提前檢視電梯排程esla
提前檢視電梯排程esla(elevator scheduling with look ahead),如果乙個方向的請求全部滿足後,立即進行反轉,無需掃瞄到底。這種演算法就是每次往某個方向移動時,必須確保該方向還有請求未被滿足。否則即刻調轉方向,這樣效率將得到提高。如圖5所示:
圖5、esla排程演算法示意圖
2.6、單向電梯排程owes
單向電梯排程owes(one way elevator scheduling)。對於提前檢視電梯法的改進,就是單向電梯排程,即只向乙個方向掃瞄。當該方向沒有剩餘請求時,則回到0道,再進行同樣的掃瞄。如果在磁碟請求與圖5同樣的情況下,使用單向電梯排程的總尋道數為:1 + 4 + 16 + 8 = 29,比提前檢視電梯法節省23個磁軌的尋道時間。
圖6、owes排程演算法示意圖
2.7、磁碟交替編號—降低旋轉時延
除減少尋找時間外,減少延遲時間也是提高磁碟傳輸效率的重要因素。可以對盤面扇區進行交替編號,對磁碟片組中的不同盤面錯位命名。假設每個盤面有8個扇區,磁碟片組共 8個盤面,則可以釆用如圖7所示的編號
圖7、磁碟交替編號示意圖
磁碟是連續自轉裝置,磁頭讀/寫乙個物理塊後,需要經過短暫的處理時間才能開始讀/ 寫下一塊。假設邏輯記錄資料連續存放在磁碟空間中,若在盤面上按扇區交替編號連續存放,則連續讀/寫多個記錄時能減少磁頭的延遲時間;同柱面不同盤面的扇區若能錯位編號,連續讀/寫相鄰兩個盤面的邏輯記錄時也能減少磁頭延遲時間。
——————————————————————————————————————
參考資料:
1、《作業系統之哲學原理》 鄒恒明著
2、磁碟排程演算法
檔案系統筆記三 磁碟塊
引言 扇面是磁碟中最小的物理儲存單位,而塊是作業系統最小的邏輯儲存單位。物理層面,乙個磁碟按層次分為 磁碟組合 單個磁碟 某一盤面 某一磁軌 某一扇區。回顧之前內容,每個磁碟有多條同心圓似的磁軌,磁軌被分割成多個部分。每部分的弧長加上到圓心的兩個半徑,恰好形成乙個扇形,所以叫做扇區。扇區是磁碟中最小...
磁碟及檔案系統
fdisk 對磁碟進行分割槽 fdisk l 列出指定裝置的分割槽表資訊 fdisk etc sda,建立新分割槽 partprobe 讓核心更新分割槽資訊 fisk對磁碟分割槽後,使用partprobe命令,可不重啟系統就能識別 cat proc partitions,檢視分割槽資訊 root l...
檢視磁碟檔案系統
fdisk l 檢視分割槽 df h 檢視已經掛載的檔案系統 parted print list 檢視檔案系統 磁碟如果是普通的分割槽,比如 ntfs ext3等,可以直接用 mount t 來制定檔案系統型別來掛載,但有時候磁碟是採用的lvm卷的分割槽,要掛載這類磁碟,就應該按照以下方式 a.掃瞄...