前言
??上文介紹了磁盤的結構汞窗,本文介紹磁盤的調度算法相關的內容硕糊。
??本文內容
1 一次磁盤讀/寫操作需要的時間
??尋找時間(尋道時間)Ts:在讀/寫數(shù)據(jù)前院水,需要將磁頭移動到指定磁道所花費的時間性昭。
??尋道時間分兩步:
(1) 啟動磁頭臂消耗的時間:s土全。
(2) 移動磁頭消耗的時間:假設磁頭勻速移動谱仪,每跨越一個磁道消耗時間為m掸读,共跨越n條磁道串远。
??則尋道時間 Ts = s + m * n。
??磁頭移動到指定的磁道儿惫,但是不一定正好在所需要讀/寫的扇區(qū)澡罚,所以需要通過磁盤旋轉使磁頭定位到目標扇區(qū)。
??延遲時間TR:通過旋轉磁盤肾请,使磁頭定位到目標扇區(qū)所需要的時間留搔。設磁盤轉速為r(單位:轉/秒,或轉/分)筐喳,則平均所需延遲時間TR = (1/2)*(1/r) = 1/2r催式。
1/r就是轉一圈所需的時間函喉。找到目標扇區(qū)平均需要轉半圈,因此再乘以1/2荣月。
??傳輸時間TR:從磁盤讀出或向磁盤中寫入數(shù)據(jù)所經歷的時間管呵,假設磁盤轉速為r,此次讀/寫的字節(jié)數(shù)為b哺窄,每個磁道上的字節(jié)數(shù)為N捐下,則傳輸時間TR = (b/N) * (1/r) = b/(rN)。
每個磁道可存N字節(jié)數(shù)據(jù)萌业,因此b字節(jié)數(shù)據(jù)需要b/N個磁道才能存儲坷襟。而讀/寫一個磁道所需的時間剛好是轉一圈的時間1/r。
??總的平均時間Ta = Ts + 1/2r + b/(rN)生年,由于延遲時間和傳輸時間都是與磁盤轉速有關的婴程,且是線性相關。而轉速又是磁盤的固有屬性抱婉,因此無法通過操作系統(tǒng)優(yōu)化延遲時間和傳輸時間档叔。所以只能優(yōu)化尋找時間。
2 磁盤調度算法
??2.1 先來先服務算法(FCFS)
??算法思想:根據(jù)進程請求訪問磁盤的先后順序進行調度蒸绩。
??假設磁頭的初始位置是100號磁道衙四,有多個進程先后陸續(xù)地請求訪問55、58患亿、39传蹈、18、90步藕、160惦界、150、38漱抓、184號磁道表锻。
??按照先來先服務算法規(guī)則恕齐,按照請求到達的順序乞娄,磁頭需要一次移動到55、58显歧、39仪或、18、90士骤、160范删、150、38拷肌、184號磁道到旦。
??磁頭共移動了 45 + 3 + 19 + 21 + 72 + 70 + 10 + 112 + 146 = 498個磁道旨巷。響應一個請求平均需要移動498 / 9 = 55.3個磁道(平均尋找長度)。
??優(yōu)點:公平添忘;如果請求訪問的磁道比較集中的話采呐,算法性能還算可以。
??缺點:如果大量進程競爭使用磁盤搁骑,請求訪問的磁道很分散斧吐,F(xiàn)CFS在性能上很差,尋道時間長仲器。
??2.2 最短尋找時間優(yōu)先(SSTF)
??算法思想:優(yōu)先處理的磁道是與當前磁頭最近的磁道煤率。可以保證每次尋道時間最短乏冀,但是不能保證總的尋道時間最短蝶糯。(其實是貪心算法的思想,只是選擇眼前最優(yōu)辆沦,但是總體未必最優(yōu))裳涛。
??假設磁頭的初始位置是100號磁道,有多個進程先后陸續(xù)地請求訪問55众辨、58端三、39、18鹃彻、90郊闯、160、150蛛株、38团赁、184號磁道。
??磁頭總共移動了(100 -18)+ (184 -18) = 248個磁道谨履。響應一個請求平均需要移動248 / 9 = 27.5個磁道(平均尋找長度)欢摄。
??缺點:可能產生饑餓現(xiàn)象。
??本例中笋粟,如果在處理18號磁道的訪問請求時又來了一個38號磁道的訪問請求怀挠,處理38號磁道的訪問請求又來了一個18號磁道訪問請求。如果有源源不斷的18號害捕、38號磁道訪問請求绿淋,那么150、160尝盼、184號磁道請求的訪問就永遠得不到滿足吞滞,從而產生饑餓現(xiàn)象。這里產生饑餓的原因是磁頭在一小塊區(qū)域來回移動盾沫。
??2.3 掃描算法(SCAN)
??SSTF算法會產生饑餓的原因在于:磁頭有可能再一個小區(qū)域內來回得移動裁赠。為了防止這個問題殿漠,可以規(guī)定:磁頭只有移動到請求最外側磁道或最內側磁道才可以反向移動,如果在磁頭移動的方向上已經沒有請求佩捞,就可以立即改變磁頭移動凸舵,不必移動到最內/外側的磁道。這就是掃描算法的思想失尖。由于磁頭移動的方式很像電梯啊奄,因此也叫電梯算法。
??假設某磁盤的磁道為0~200號掀潮,磁頭的初始位置是100號磁道菇夸,且此時磁頭正在往磁道號增大的方向移動,有多個進程先后陸續(xù)的訪問55仪吧、58庄新、39、18薯鼠、90择诈、160、150出皇、38羞芍、184號磁道。
??磁頭共移動了(184 - 100)+ (184 -18) = 250個磁道郊艘。響應一個請求平均需要移動 250 / 9 = 27.5個磁道(平均尋找長度)荷科。
??優(yōu)點:性能較好,尋道時間較短纱注,不會產生饑餓現(xiàn)象畏浆。
??缺點:SCAN算法對于各個位置磁道的響應頻率不平均。(假設此時磁頭正在往右移動狞贱,且剛處理過90號磁道刻获,那么下次處理90號磁道的請求就需要等待低頭移動很長一段距離;而響應了184號磁道的請求之后瞎嬉,很快又可以再次響應184號磁道請求了蝎毡。)
??2.4 循環(huán)掃描算法(C-SCAN)
??SCAN算法對各個位置磁道的響應頻率不平均,而C-SCAN算法就是為了解決這個問題佑颇。規(guī)定只有磁頭朝某個特定方向移動時才處理磁道訪問請求顶掉,而返回時直接快速移動至最靠邊緣的并且需要訪問的磁道上而不處理任何請求草娜。
??通俗理解就是SCAN算在改變磁頭方向時不處理磁盤訪問請求而是直接移動到另一端最靠邊的磁盤訪問請求的磁道上挑胸。
??假設某磁盤的磁道為0~200號,磁頭的初始位置是100號磁道宰闰,且此時磁頭正在往磁道號增大的方向移動茬贵,有多個進程先后陸續(xù)的訪問55簿透、58、39解藻、18老充、90、160螟左、150啡浊、38、184號磁道胶背。
??磁頭共移動了(184 -100)+ (184 - 18)+(90 - 18)=322個磁道巷嚣。響應一個請求平均需要移動322 / 9 = 35.8個磁道(平均尋找長度)。
??優(yōu)點:相比于SCAN算法钳吟,對于各個位置磁道響應頻率很平均廷粒。
??缺點:相比于SCAN算法,平均尋道時間更長红且。