一、設計目的:
加深對請求磁碟排程管理實現原理的理解,掌握磁碟排程演算法中的掃瞄尋道演算法。
二、設計內容
通過程式設計實現磁碟排程中掃瞄尋道演算法。
設定開始磁軌號尋道範圍,依據起始掃瞄磁軌號和最大磁軌號數,隨機產生要進行尋道的磁軌號序列。選擇磁碟排程演算法,顯示該演算法的磁軌訪問順序,計算出移動的磁軌總數和平均尋道總數。
掃瞄演算法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...