寫在前面 本系列的文章是博主邊學邊記錄的,可能不是特別的正確,因為會加上博主自己的理解,僅供參考。 正文: 1.磁碟的訪問時間 為了讀或者寫,磁頭必須能移動到所指定的磁軌上,並等待所指定的扇區的開始位置旋轉到磁頭下,然後開始讀取或者寫入數據。那麼可以把對磁碟的訪問時間分為以下三個部分: 1.尋道時間 ...
寫在前面
本系列的文章是博主邊學邊記錄的,可能不是特別的正確,因為會加上博主自己的理解,僅供參考。
正文:
1.磁碟的訪問時間
為了讀或者寫,磁頭必須能移動到所指定的磁軌上,並等待所指定的扇區的開始位置旋轉到磁頭下,然後開始讀取或者寫入數據。那麼可以把對磁碟的訪問時間分為以下三個部分:
1.尋道時間
磁頭移動到要操作的磁軌的時間
2.旋轉延遲時間
指定扇區移動到磁頭下麵所經歷的時間。
3.傳輸時間
讀取或者寫入數據的時間。
補充下,磁碟上有很多磁軌,將磁軌在邏輯上分為若幹個扇區。讀取數據的時候,邏輯上去扇區讀取數據。
2. 磁碟調度演算法
由於在訪問磁碟的時間中主要是尋道時間,因此,磁碟調度的目標是使次磁碟的平均尋道時間最少。下麵介紹一些磁碟調度演算法:
1.先來先服務【FCFS】
顧名思義,這種演算法根據請求訪問磁碟的先後次序進行調度。
優點:
1.公平、簡單。
2.每個進程的請求都能依次地得到處理,不會出現某一進程地請求長期得不到滿足地情況。
缺點:
平均尋道時間可能較長。
適用場景:
請求磁碟IO地進程數目較少的場合。
2.最短尋道時間優先 【SSTF】
SSTF:要求訪問的磁軌與當前磁頭所在的磁軌距離最近,以使得每次的尋道時間最短。同樣該演算法不能保證平均尋道時間最短。
缺點
因為是針對距離磁頭最近的磁軌方式移動,可能會造成距離較遠的磁軌一直得不到訪問,造成饑餓現象。
補充:
饑餓現象:系統不能保證某個進程的等待時間上限,從而使得該進程長時間等待,當等待時間給進程推進和響應帶來明顯的影響的時候,稱為發生了饑餓現象。當饑餓到一定程式的進程所賦予的任務即使完成也不再具有實際意義時,稱為該進程被餓死。
看下書上的圖
根據圖能夠看到,當從100號磁軌開始的時候,首先選擇距離其最近的磁軌去訪問,也就是90號磁軌,這個時候,移動距離為10.這樣執行完所有進程,可以算出平均尋道長度。
3.掃描演算法 【SCAN】
SCAN演算法關註的是磁頭當前移動的方向。一般是按照磁軌遞增的次序去訪問。首先是以當前磁頭處於的磁軌為中心,先向地址遞增的方向去訪問,訪問完畢後,再由內到外訪問遞減的方向。
看圖,大家應給能夠更好的理解該掃描演算法。這種演算法保證了每個請求都能訪問的到,從而避免了饑餓現象。
4.迴圈掃描演算法 【CSCAN】
該演算法也是關註磁頭的移動方向,和SCAN不同的是,它是單向移動的。所以稱為迴圈掃描演算法。那麼為什麼是單向移動呢?
使用SCAN演算法的時候,在執行過程中,恰好又有一個進程請求訪問磁軌。這個時候進程必須等待,等待磁頭改變方向的時候才能繼續訪問。這樣造成了較大的延遲。(因為SCAN方向是雙向的,當掃描完一頭,突然在這頭又來個請求,只能等待另外一頭掃描後,才能回到插入 的這頭,繼續執行)
而使用CSCAN解決了這個問題。下麵看一下圖:
可以看到,該演算法是迴圈尋道的~
好了,本文簡單的複習了磁碟的演算法,希望對大家有所幫助!!
不驕不躁,保持學習