資源簡介
通過磁盤調度算法的模擬設計,了解磁盤調度的特點。
模擬實現(xiàn)FCFS、SSTF、SCAN、C-SCAN和LOOK算法,并計算及比較磁頭移動道數(shù)。
磁盤調度算法是根據(jù)訪問都指定的磁道(柱面)位置來決定執(zhí)行次序的調度。其目的是盡可能地減少操作中的尋道時間。在磁盤盤面上,0磁道在盤面的外圈;號數(shù)越大,磁道戛靠近盤片的中心。
模擬實現(xiàn)FCFS、SSTF、SCAN、C-SCAN和LOOK算法,并計算及比較磁頭移動道數(shù)。
磁盤調度算法是根據(jù)訪問都指定的磁道(柱面)位置來決定執(zhí)行次序的調度。其目的是盡可能地減少操作中的尋道時間。在磁盤盤面上,0磁道在盤面的外圈;號數(shù)越大,磁道戛靠近盤片的中心。
代碼片段和文件信息
#include
#include
#include
#include
#include
int?start=0;
long?FCFS(int?array[100])??????//先來先服務調度算法?
{
int?ij;
long?sum=0;
for(i=0j=1;i<99j<100;i++j++)
{
sum+=abs(array[j]-array[i]);
}
return?sum;
}
long?SSTF(int?array[100])???//最短尋道時間優(yōu)先調度算法
{
int?temp;
int?k=1;
int?now?leftright;
int?ijsum=0;
for?(i=0;i<100;i++)
for?(j=i+1;j<100;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}??????????????????????????????????//排序
now=start;
if(array[99]<=now)
{
sum=now-array[0];
}
else
{
if(array[0]>=now)
{
sum=array[99]-now;
}
else
{
while((array[k]<=now)&&(array[k+1] {
k++;
}
left=k-1;
right=k;//定位
while?((left>=0)&&(right<100))
{
if?((now-array[left])<=(array[right]-now))
{
sum+=now-array[left];
now=array[left];
left--;
}
else
{
sum+=array[right]-now;
now=array[right];
right++;
}
}
if(left==-1)
{
sum+=array[99]-array[0];
}
else?sum+=array[99]-array[0];
}
}
return?sum;
}
long?SCAN(int?array[100])??????????????????//掃描調度算法(電梯算法)
{
int?temp;
int?k=1;
int?nowleftright;
int?ijsum=0;
for?(i=0;i<100;i++)
for(j=i+1;j<100;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}?????????????????????????????????//排序
now=start;
if(array[99]<=now)
{
sum=now-array[0];
}
else
{
if(array[0]>=now)
{
sum=array[99]-now;
}
else
{
while((array[k]<=now)&&(array[k+1] {
k++;
}
left=k-1;
right=k;?????????????????//定位
if((now-array[left])<=(array[right]-now))?????//當前移動臂的移動的方向,表示向外
{
sum=now+array[99];
}
else??//表示向內????????????
{
sum=2*1499-now-array[0]+array[left];
}
}
}
return?sum;
}
long?CSCAN(int?array[100])???????????//單向掃描調度算法
{
int?temp;
int?k=1;
int?nowleftright;
int?ijsum=0;
for?(i=0;i<100;i++)
for(j=i+1;j<100;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}?????????????????????????????????//排序
now=start;
if(array[99]<=now)
{
sum=now-array[0];
}
else
{
if(array[0]>=now)
{
sum=array[99]-now;
}
else
{
while((array[k]<=now)&&(array[k+1] {
k++;
}
left=k-1;
right=k;?????????????????//定位
sum=2*1499-now+array[left];
}
}
return?sum;
}
long?LOOK(int?array[100])???????????????????????//
{
int?temp;
int?k=1;
int?nowleftright;
int?ijsum=0;
for?(i=0;i<100;i++)
for(j=i+1;j<100;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4336??2007-12-26?13:38??磁盤調度\cpdu.cpp
?????文件?????188472??2007-12-26?13:38??磁盤調度\cpdu.exe
?????文件??????43520??2009-04-02?22:25??磁盤調度\sybg.doc
?????目錄??????????0??2009-04-02?22:30??磁盤調度
-----------?---------??----------?-----??----
???????????????236328????????????????????4
- 上一篇:《編譯原理》清華大學版中的pl0擴充
- 下一篇:xm
l多個文件合并(delphi)
評論
共有 條評論