(C語言實現)磁碟排程 掃瞄尋道演算法(SCAN)

2021-08-21 07:04:29 字數 1392 閱讀 4613

一、設計目的:

加深對請求磁碟排程管理實現原理的理解,掌握磁碟排程演算法中的掃瞄尋道演算法。

二、設計內容

通過程式設計實現磁碟排程中掃瞄尋道演算法。

設定開始磁軌號尋道範圍,依據起始掃瞄磁軌號和最大磁軌號數,隨機產生要進行尋道的磁軌號序列。選擇磁碟排程演算法,顯示該演算法的磁軌訪問順序,計算出移動的磁軌總數和平均尋道總數。

掃瞄演算法scan:該演算法不僅考慮到欲訪問的磁軌與當前磁軌間的距離,更優先考慮的是磁頭當前的移動方向。例如,當磁頭正在自里向外移動時,scan演算法所考慮的下乙個訪問物件,應是其欲訪問的磁軌既在當前磁軌之外,又是距離最近的。這樣自里向外地訪問,直至再無更外的磁軌需要訪問時,才將磁臂換向為自外向裡移動。

三、程式結構:

首先,用srand()和rand()函式分別進行初始化、隨機數定義和產生互不相同的磁軌號序列;

接著,對所有磁軌序列降序排序;

然後,找到訪問的第乙個磁軌,必一一訪問所有的磁軌;

最後,顯示該演算法的磁軌訪問順序,計算出移動的磁軌總數和平均尋道總數。

源程式:

#include#include#include#define n 51

struct tcb //track control block

track[n];

int randomnumber(int n,int max,int min) //各磁軌互不相同

if(present<=track[1].tn) start=1; //找分斷點和訪問開始位置

else if(present>=track[n].tn) start=n;

else

if(track[start].tn==present) start=i;

else if(track[start].tn<=present)

else if(track[start].tn>=present)

}//找到磁頭訪問開始位置後,就是掃瞄訪問各磁軌

printf("\n\n\n磁軌訪問順序:");

if(start==1||start==n)

else if(start==n)

for(j=n;j>=1;j--)

} else

for(j=start-1;j>=1;j--)

} else if(option==2) //自高向低走

for(j=start+1;j<=n;j++)

} printf("\n\n磁軌移動總數sum=%d\n",sum);

printf("平均尋道總數=%lf\n",sum/(float)n); }}

int main()

磁碟尋道排程演算法

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

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

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

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

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