磁盘调度算法(4)

2019-04-21 19:55

}

i=0;//遍历完再从第一个元素开始遍历 while(i

MoveDistance[k]=TrackOrder[VisitOrder[k-1]]-TrackOrder[i];

++i; ++k; } }

else{//若向磁道号减小方向访问 for(i=0;i

if(TrackOrder[i+1]>100){//找到最后一个小于磁道号的元素

temp=i;

VisitOrder[0]=i;

MoveDistance[0]=TrackOrder[i]-100; break; } }

--i;//向前遍历

while(i>-1){ VisitOrder[k]=i;

MoveDistance[k]=TrackOrder[VisitOrder[k-1]]-TrackOrder[i];

--i; ++k; }

i=n-1;//遍历完后从最后一个元素向前遍历 while(i>temp){ VisitOrder[k]=i;

MoveDistance[k]=TrackOrder[VisitOrder[k-1]]-TrackOrder[i];

--i; ++k; } } }

void output(){

int sum=0;//求磁道数总和 for(int i=0;i

访

\移动距离(磁道数)\

sum=sum+abs(MoveDistance[i]); }

cout<<\平均寻道长度:\输出平均寻道长度

}

void main(){ init(); int a;

cout<<\选择算法,1-FCFS,2-SSTF,3-SCAN,4-循环SCAN\

cin>>a; switch(a){ case(1):

fcfs();break; case(2):

sstf();break; case(3):

scan();break; case(4):

cscan();break;

}//根据用户选择的算法进行磁盘调度算法 output(); } 调试分析

1、 执行算法前,要先申请变量。

2、 执行后面三种算法时,要注意先将磁道序列从小到大排序。 3、 执行SSTF算法时,先找到小于开始磁道号的最后一个元素,

以此元素为分割点,向前和向后遍历序列,每次移动一个,比较出离前一个访问的磁道号近的访问。

4、 执行SCAN和CSCAN算法时,要先判断用户输入的是向磁道

号增加的方向执行还是向磁道号减少的方向执行。 5、 时间的复杂度是O(n). 用户使用说明

按提示输入磁道个数,不得大于MaxNum;依次输入磁盘访问序列;按提示输入开始磁道号,磁头移动方向(1为磁道号增加方向,0为磁道号减少方向);根据提示输入要进行的算法类型,1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。

测试结果

输入数据分别为:9

55 58 39 18 90 160 150 38 184 100 1 输入:1

输出:被访问的下一个磁道号55 移动距离(磁道数)45

被访问的下一个磁道号58 移动距离(磁道数)3 被访问的下一个磁道号39 移动距离(磁道数)19 被访问的下一个磁道号18 移动距离(磁道数)21 被访问的下一个磁道号90 移动距离(磁道数)72 被访问的下一个磁道号160 移动距离(磁道数)70 被访问的下一个磁道号150 移动距离(磁道数)10 被访问的下一个磁道号38 移动距离(磁道数)112 被访问的下一个磁道号184 移动距离(磁道数)146 平均寻道长度:55.3333


磁盘调度算法(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2013广东省县级以上公务员面试真题解析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: