磁盤調度算法簡述


 

一 丶意義:良好的調度算法,能減少IO讀取時間(磁盤讀取(最慢)+讀取+傳輸)  磁盤訪問時間=尋道時間+旋轉延遲時間+數據傳輸時間,

                  磁盤讀寫順序:由上直下(柱面磁道),由外到里(柱面排序,外磁道速度最快),依次訪問對應扇區(512bytes)

                   計算機中,各存儲區域訪問速度為  寄存器約等號≈cache>內存>>磁盤>其他外接物理設備

                   系統每進行一次IO中斷,進行數據讀寫,首先要進行命中測試,若不在register,cache,memory中,則進行磁盤讀取,先尋址,再進行io讀入內存,讀入后才能被cpu使用。

                   由磁盤中讀寫數據占用時間公式可知,其最主要的是尋道時間,旋轉延遲時間,良好的磁盤調度算法,能減少IO讀寫時間,從而減少進程等待io時間,增加cpu利用率,防止磁臂黏着現象的發生。

 

參考資料:https://blog.csdn.net/hguisu/article/details/7408047

 

二丶名詞解釋: 

1)磁臂粘着--------程序對某些磁道頻繁訪問,如多次訪問同一磁道,則io隊列中,多次對同一磁道進行頻繁的讀取,導致其他磁道的請求被擱置,即為磁臂黏着現象(類似於進程餓死)

2)尋道時間:移動磁臂到對應磁道(一般全部磁臂同時移動,部分可以分別移動),最慢

3)旋轉延遲時間:磁盤旋轉到對應扇區,對應磁柱進行讀寫

4)數據傳輸時間:讀取數據,使用IO總線傳入內存供cpu使用

 

 

三丶算法簡述

1.先來先服務算法(FCFS)----FirstComeFirstServer

   可使用鏈表(若有數量上限則單設頭結點記錄請求數,超出則拒絕)和數組(數組長度限制為請求數量,防止越界),依據請求時間先后,對io請求進行隊列排列,依次出隊

   優劣:公平、簡單;平均尋道時間可能較長

 


2.最短尋道算法(SSTF)

  其訪問規則為距離當前磁頭最近的io請求進行服務,由“最近”一詞和磁盤讀寫順序可知,其可能會返回對一個柱面的磁道進行多次讀寫,造成磁盤黏着現象

  基本實現:動態處理IO請求,可使用鏈表(雙向鏈表,避免越界和前置判空操作)或者數組(內存允許則最好用數組,減少尋址時間)實現,使用插入排序算法,對IO請求進行動態排序,

                    指針p指向磁頭的當前磁道和扇區對應的線形距離數字,對前置后驅元素進行判定,以距離較短者作為下次磁盤訪問對象。

  優劣:平均尋道時間比FCFS算法短,但可能會出現“飢餓現象”和“磁臂粘着”現象。

 


3.掃描算法(電梯算法SCAN)

  原理:將各磁道請求映射為線形地址,進行單向線形掃描,一方為空,則反向,直至該磁道請求為空,切換下一磁道

  算法實現:外嵌for對各柱面請求進行掃描,內嵌while包含倆個for循環,對選擇的柱面進行來回掃描(一個增,一個減,雙向),請求空則break。

  優劣:消除了“飢餓”現象,但可能會出現“磁臂粘着”現象

 


4.循環掃描算法(CSCAN)

  原理:改進SCAN,不改變方向,單方向掃描,若無則返回到最外層需要訪問的磁道(沒就0)

  算法實現:參考SCAN,while去除內置為單個for,設為單向

  優劣: 改進了對於邊緣區磁道訪問的不公平,但可能會出現“磁臂粘着”現象。

 

 

5.NStepScan

  原理:為避免磁臂黏着現象發生,算法將磁盤請求隊列分成若干個長度為N的子隊列,磁盤調度按FCFS算法依次處理這些子隊列。而每處理一個子隊列時又是按照SCAN算法。

             當處理某子隊列時,又有新的磁盤I/O請求,便將新請求進程放入其他隊列中,從而避免了粘臂現象。(邏輯上依然為SCAN算法,但是限制了隊列數量,強制跳出某一柱面,減少了頻繁訪問同一磁道帶來的黏着現象)

   算法實現:依據原理,設置大小為N的指針數組(取余訪問,實現循環),循環訪問各個隊列

 

6.FSCAN算法,

  算法思想是,在掃描的過程中所有新產生的序列放在另外的一個隊列中,當訪問完當前隊列之后,再訪問新產生的一個隊列。這種算法可以有效防止磁壁粘着現象。

  實現:略

 

四丶其他策略

     緩沖區策略:緩解高速讀寫設備與低速io設備帶來的長時間數據等待,設立多緩沖,雙緩沖等策略進行處理。

                           https://product.pconline.com.cn/itbk/software/dnyw/1707/9613894.html

 

   算法處理策略:盡量減少IO中斷次數,對可批量請求讀寫的數據進行批量請求,而不是一個個數據進行請求讀寫

(如在大數據排序處理中,使用分治策略,分批處理數據,在內存允許的情況下,直接讀一批數據進行處理(多文件IO讀入),處理后在緩沖區保存,滿后才寫入,減少中斷次數)

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM