磁碟排程演算法設計與實現 C語言

2021-08-21 07:00:55 字數 2928 閱讀 4845

一、設計分析

尋道時間ts是磁頭從當前磁軌移動到目標磁軌所需要的時間;旋轉延遲時間tw是當磁頭停留在目標磁軌後,目標物理塊從當前位置旋轉到磁頭位置的時間;讀寫時間trw是目標物理塊內容與記憶體中對應交換的時間。磁碟排程的原則是公平和高吞吐量,衡量指標有訪問時間t和平均訪問時間ta:

t=ts+tw+trw

ta=tsa+twa+trwa

尋道時間和旋轉延遲時間成為排程演算法的主要考慮因素。減少訪問時間就是要減少尋道時間和旋轉延遲時間。

(1)先來先服務演算法(fcfs)first come first service

這是一種比較簡單的磁碟排程演算法。它根據程序請求訪問磁碟的先後次序進行排程。此演算法的優點是公平、簡單,且每個程序的請求都能依次得到處理,不會出現某一程序的請求長期得不到滿足的情況。此演算法由於未對尋道進行優化,在對磁碟的訪問請求比較多的情況下,此演算法將降低裝置服務的吞吐量,致使平均尋道時間可能較長,但各程序得到服務的響應時間的變化幅度較小。

(2)最短尋道時間優先演算法(sstf) shortest seek time first

該演算法選擇這樣的程序,其要求訪問的磁軌與當前磁頭所在的磁軌距離最近,以使每次的尋道時間最短,該演算法可以得到比較好的吞吐量,但卻不能保證平均尋道時間最短。其缺點是對使用者的服務請求的響應機會不是均等的,因而導致響應時間的變化幅度很大。在服務請求很多的情況下,對內外邊緣磁軌的請求將會無限期的被延遲,有些請求的響應時間將不可預期。

(3)掃瞄演算法(scan)電梯排程

掃瞄演算法不僅考慮到欲訪問的磁軌與當前磁軌的距離,更優先考慮的是磁頭的當前移動方向。例如,當磁頭正在自里向外移動時,掃瞄演算法所選擇的下乙個訪問物件應是其欲訪問的磁軌既在當前磁軌之外,又是距離最近的。這樣自里向外地訪問,直到再無更外的磁軌需要訪問才將磁臂換向,自外向裡移動。這時,同樣也是每次選擇這樣的程序來排程,即其要訪問的磁軌,在當前磁軌之內,從而避免了飢餓現象的出現。由於這種演算法中磁頭移動的規律頗似電梯的執行,故又稱為電梯排程演算法。此演算法基本上克服了最短尋道時間優先演算法的服務集中於中間磁軌和響應時間變化比較大的缺點,而具有最短尋道時間優先演算法的優點即吞吐量較大,平均響應時間較小,但由於是擺動式的掃瞄方法,兩側磁軌被訪問的頻率仍低於中間磁軌。

(4)迴圈掃瞄演算法(c-scan)

在掃瞄演算法的基礎上規定磁頭單向移動來提供服務,回返時直接快速移動至起始端而不服務任何請求。

二、設計及實現

(1)平台:linux

語言:c

(2)設計思路

(3)源程式

#includeint num,sum,kai,max;

int m=0;

int n=0;

int s[100];

int s1[100];

int c1[50];

int c2[50];

void creat()

for(int i=0;is[i])

c1[m++]=s[i];

else

c2[n++]=s[i];

for(int i=0;ic2[j])

}void fcfs()

switch(menuchoice)}}

int main()

三、測試資料及結果(1)  測試資料開始磁軌:125

磁軌個數:10

磁軌號:23,46,543,122,5,126,2,233,121,50

(2)執行結果

->執行程式,根據選單選擇操作。如圖,選擇1、建立磁軌

->當未建立磁軌而直接選擇其他選項時,提示「請先建立磁軌」

->建立磁軌後,選擇演算法,進行排序。並求出 被訪問磁軌順序,磁軌號移動距離,尋到長度。

四、結果分析

磁碟演算法排程的比較以及多次實驗得出了以下結果:

1、最短尋到sstf的尋道長度最短;但不能保證尋道時間最短,可能出現「飢餓現象」;

2、fcfs演算法具有公平性,但不適合大量程序的訪問;平均尋道距離大,僅應用在磁碟i/o較少的場合。

3、scan演算法對最近掃瞄過的區域不公平,它在訪問區域性性方面不如fcfs演算法和sstf演算法好,不利於遠離磁頭一端的訪問;

4、改進了scan演算法掃瞄區域不公平現象。

c語言實現磁碟排程演算法 C語言實現洗牌演算法

首先看一道題目 有乙個大小為100的陣列,裡面的元素是從 1 到 100,隨機從陣列中選擇50個不重複數。用math.random 100,就可以拿到乙個 0 到 99 的隨機數,是不是重複50次就可以了?當然不是,假如,第一次隨機到5,第二次如果再一次隨機到5的話,要求是選擇不重複的數,所以要選出...

磁碟排程演算法 java實現

磁碟排程在多道程式設計的計算機系統中,各個程序可能會不斷提出不同的對磁碟進行讀 寫操作的請求。由於有時候這些程序的傳送請求的速度比磁碟響應的還要快,因此我們有必要為每個磁碟裝置建立乙個等待佇列,常用的磁碟排程演算法有以下四種 先來先服務演算法 fcfs 最短尋道時間優先演算法 sstf 掃瞄演算法 ...

C語言 磁碟排程模擬

created by herbert on nov 24,2017 c語言 磁碟排程模擬 什麼是磁碟排程?磁碟排程指待的是訪問的磁軌時,當前磁頭訪問的方式 也指待是演算法 磁碟的訪問也是一種i o裝置的訪問,在資料訪問中需要知道如何去訪問從記憶體以及i o傳輸過來的資料。怎麼樣去儲存或者是讀取在磁碟...