磁盤調度算法


目錄

一、    實驗目的    3

二、實驗內容    3

(1)、先來先服務(FCFS)算法    3

(2)、最短尋找時間優先(SSTF)算法    3

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

(4)、循環掃描(C-SCAN)算法    3

(5)、分步電梯調度(F-SCAN)算法    4

補充:磁壁粘着    4

三、實現思路    4

四、主要的數據結構    4

void request(vector<int>&m_vec,ofstream &outfile)    5

void compute_dis(vector<int>m_vec,int &dis,double &average_distance) //計算平均距離函數    5

void FCFS(vector<int>m_vec,int position)    5

void SSTF(vector<int>m_vec,int position)    5

void SCAN(vector<int>m_vec,int position)    5

void CSCAN(vector<int>m_vec,int position)    5

void FSCAN(vector<int>m_vec,int position)    5

void print()    5

int choose_algorithm(vector<int>m_vec)    5

int main()    5

五、算法流程圖    6

六、運行與測試    7

(1)FCFS算法    7

(2)SSTF算法    7

(3)SCAN算法    8

(4)CSCAN算法    8

(5)FSCAN算法    9

七、總結(各算法優缺點比較匯總)    9

 

 

 

Tips:建議打開word【導航視圖】與批注閱讀,數據結構部分的代碼編輯在【批注】內。

 

拓展實驗5:磁盤調度算法

  1. 實驗目的

分析操作系統的核心功能模塊,理解相關功能模塊實現的數據結構和算法,並加以實現,加深對操作系統原理和實現過程的理解。本次實驗:用c++模擬五種磁盤調度算法並比它們的優劣性。

二、實驗內容

目前常用的磁盤調度算法有以下幾種:

 

(1)、先來先服務(FCFS)算法

FCFS 算法根據進程請求訪問磁盤的先后順序進行調度,這是一種最簡單的調度算法。該算法的優點是具有公平性。如果只有少量進程需要訪問,且大部分

請求都是訪問簇聚的文件扇區,則有望達到較好的性能;如果有大量進程競爭使用磁盤,那么這種算法在性能上往往接近於隨機調度。所以,實際磁盤調度中考慮一些更為復雜的調度算法。 

(2)、最短尋找時間優先(SSTF)算法

SSTF算法選擇調度處理的磁道是與當前磁頭所在磁道距離最近的磁道,以使每次的尋找時間最短。當然,總是選擇最小尋找時間並不能保證平均尋找

時間最小,但是能提供比 FCFS 算法更好的性能。這種算法會產生"飢餓"現象。

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

SCAN算法在磁頭當前移動方向上選擇與當前磁頭所在磁道最近的請求作為下一次服務的對象,實際上就是在最短尋道時間優先算法的基礎上規定了磁頭 運動的方向。由於磁頭移動規律與電梯運行相似,又稱為電梯調度算法。SCAN 算法對最近掃描過的區域不公平,因此,它在訪問局部性方面不如 FCFS 算法和SSTF算法好。

補充:采用 SCAN 算法時,不但要知道磁頭的當前位置,還要知道磁頭的移動方向。

(4)、循環掃描(C-SCAN)算法

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

(5)、分步電梯調度(F-SCAN)算法

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

補充:磁壁粘着

在FCFS,SSTF、SCAN及CSCAN幾種調度算法中,都有可能出現磁臂停留在某個位置不動的情況。例如,有一個或幾個進程對某一磁道有着較高的訪問頻率,即他們反復地請求對一個磁道進行了I/O請求,從而壟斷了整個磁盤設備,這一現象稱為磁臂粘着。

三、實現思路

程序入口是main主函數,在程序一開始由request()函數產生隨機的要求服務的磁盤序列。然后由用戶選擇算法FCFS、SSTF、SCAN、CSCAN、FSCAN其中之一。

 

分別執行相應的算法。

 

1)FCFS算法實現思路:將vector內隨機產生的數依次讀出,相當於對於隊列數據結構中的出隊操作。

 

2)SSTF算法實現思路:在時間復雜度和空間復雜度上的綜合考慮,我首先將vector內的數據進行排序,然后確定當前磁道號在有序數據中的位置,然后在該位置的左右找到離它最近的數,並將當前位置進行刷新。

 

3)SCAN算法實現思路:首先將vector內的數據進行排序,然后同樣地確定當前磁道號在有序數據中的位置,然后在向內的方向上依次訪問,訪問完了之后,再輸出初始位置向外的服務序列。

 

4)CSCAN算法實現思路:開始和前面的算法一樣,也是先進行排序,定位,然后在向內的方向上依次訪問,訪問完了之后,再從最外層向內掃。

 

5)FSCAN算法實現思路:將初始的序列放在一個隊列中,將在掃描過程中新出現的服務序列放在另一個序列中,然后對兩個隊列中的數據依次進行SCAN算法的實現。

四、主要的數據結構

#include <iostream>

#include <time.h>

#include <vector>

#include <math.h>

#include <stdlib.h>

#include <algorithm>

#include <cstring>

#include <windows.h>

#include <fstream>

using namespace std;

void request(vector<int>&m_vec,ofstream &outfile)

//添加隨機數種子

void compute_dis(vector<int>m_vec,int &dis,double &average_distance) //計算平均距離函數

void FCFS(vector<int>m_vec,int position)

void SSTF(vector<int>m_vec,int position)

void SCAN(vector<int>m_vec,int position)

void CSCAN(vector<int>m_vec,int position)

void FSCAN(vector<int>m_vec,int position)

void print()

int choose_algorithm(vector<int>m_vec)

//選擇調度算法

int main()

//主函數

 

 

 

五、算法流程圖

 

 

 

 

 

 

 

六、運行與測試

(1)FCFS算法

(2)SSTF算法

(3)SCAN算法

(4)CSCAN算法

(5)FSCAN算法

七、總結(各算法優缺點比較匯總)
 

優點

缺點

適用

先來先服務

公平、簡單

平均尋道距離大效率不高磁壁粘着

僅應用在磁盤I/O較少的場合

最短尋道時間優先

性能比"先來先服務"好能保證平均尋道時間最短

可能出現"飢餓"現象, 磁壁粘着

 

掃描算法

尋道性能較好,可避免"飢餓"現象;既考慮了距離,同時又考慮了方向。

不利於遠離磁頭一端的訪問請求, 磁壁粘着

 

循環掃描算法

消除了對兩端磁道請求的不公平

   

分步電梯調度算法

有效防止磁壁粘着現象。

   


免責聲明!

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



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