磁盘调度算法求平均寻道长度Word格式.docx

上传人:b****5 文档编号:21023889 上传时间:2023-01-27 格式:DOCX 页数:12 大小:17.38KB
下载 相关 举报
磁盘调度算法求平均寻道长度Word格式.docx_第1页
第1页 / 共12页
磁盘调度算法求平均寻道长度Word格式.docx_第2页
第2页 / 共12页
磁盘调度算法求平均寻道长度Word格式.docx_第3页
第3页 / 共12页
磁盘调度算法求平均寻道长度Word格式.docx_第4页
第4页 / 共12页
磁盘调度算法求平均寻道长度Word格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

磁盘调度算法求平均寻道长度Word格式.docx

《磁盘调度算法求平均寻道长度Word格式.docx》由会员分享,可在线阅读,更多相关《磁盘调度算法求平均寻道长度Word格式.docx(12页珍藏版)》请在冰豆网上搜索。

磁盘调度算法求平均寻道长度Word格式.docx

来回地移动。

先来先服务算法花费的寻找时间较长,所以执行输入输出操作的

总时间也很长。

它是从就绪队列中选择一个估计运行时间最短的进程,将处理器分配给该

进程,使之占有处理器并执行,直到该进程完成或因发生事件而阻塞,然后退

出处理器,再重新调度。

单项扫描调度算法的基本思想是,不考虑访问者等待的先后次序,总是从

0号柱面开始向里道扫描,按照各自所要访问的柱面位置的次序去选择访问

者。

在移动臂到达最后一个柱面后,立即快速返回到0号柱面,返回时不为任何的访问者等待服务。

在返回到0号柱面后,再次进行扫描。

对上述相同的例子采用单向扫描调度算法的执行次序

由于该例中已假定读写的当前位置在50号柱面,所以,指示了从50号柱面继续向里扫描,依次为61、99、130、148、159、199各柱面的访问者服务,此时移动臂已经是最内的柱面,于是立即返回到0号柱面,重新扫描,依次为15、32号柱面的访问者服务。

当磁头刚从里向外移动而越过了某一磁道进,恰好又有一进程请求访问此磁道,这时,该进程必须等待,待磁头继续从里向外,然后再从外向里扫描完所有要访问的磁道后,才处理该进程的请求,致使该进程的请求被大大地推迟。

减少这种延迟,CSCAN算法规定磁头单向移动。

#include"

stdio.h"

math.h"

FCFS()

{/**/

intnowtrack,totalnum,i;

/*totalnumnowtrack*/

int*Track;

intnum=0;

printf("

\nPleaseinputnowTracknum:

"

);

scanf("

%d"

&

nowtrack);

\nPleaseinputtotalnum:

totalnum);

Track=(int*)malloc(totalnum*sizeof(int));

/**/

\nPleaseinputtracknum:

\n"

for(i=0;

i<

totalnum;

i++)

{

Track[i]);

}

num=abs(nowtrack-Track[i])+num;

nowtrack=Track[i];

\nSearchTrackqueueis:

%d"

Track[i]);

\n\nTotalsearchdistanceis%d"

num);

\n\nAveragesearchdistanceis%f"

(float)num/(float)totalnum);

SSTF()

intnowtrack,totalnum,i,j,k,t=0,num=0;

/*Trackarray*/

int*ptrack;

/*Track*/

ptrack=(int*)malloc(totalnum*sizeof(int));

for(j=0;

j<

j++)

for(i=0;

totalnum-j-1;

if(Track[i]>

=Track[i+1])

{t=Track[i];

Track[i]=Track[i+1];

Track[i+1]=t;

if(Track[0]>

=nowtrack)

for(t=0;

t<

t++)

num=num+abs(nowtrack-Track[t]);

nowtrack=Track[t];

ptrack[t]=Track[t];

else

if(Track[totalnum-1]<

for(t=totalnum-1;

t>

=0;

t--)

if(Track[i]<

=nowtrack&

&

Track[i+1]>

if(abs(nowtrack-Track[i])>

=abs(nowtrack-Track[i+1]))

for(k=i+1;

k<

k++)

num=num+abs(nowtrack-Track[k]);

nowtrack=Track[k];

ptrack[k]=Track[k];

for(k=i;

k>

k--)

0;

ptrack[i]);

\ntotalsearchdistanceis%d"

SCAN()

intnowtrack,totalnum,i,num=0,j,t=0;

num=0;

Track[i+1])

/**/

if(nowtrack>

=Track[i]&

=nowtrack)

for(t=i+1;

for(t=i;

\nTotalsearchdistanceis%d"

CSCAN()

=i;

totalsearchdistanceis%d"

main()

intend;

while(end!

=NULL)

intAlgorithm;

***************************************program*************

*********************\n"

\nPleasechooseanalgorithm:

(1--4)\n"

\n0.EXIT1.FCFS2.SSTF3.SCAN4.CSCAN\n"

\nAlgorithm:

"

Algorithm);

switch(Algorithm)

case0:

exit();

case1:

YoualreadaychooseFCFSAlgorithm!

FCFS();

break;

case2:

YoualreadaychooseSSTFAlgorithm!

SSTF();

case3:

YoualreadaychooseSCANAlgorithm!

SCAN();

case4:

YoualreadaychooseCSCANAlgorithm!

CSCAN();

default:

break;

\n\nAreyoucontinue:

(Input0stopandinput1continue!

)\n"

end);

getch();

此结构图是以SCAN磁盘调度算法为例:

假设磁道数为0——199,我们申请调度的盘块儿分别在45,50,90,123,253磁道上。

当前硬盘磁头在第100号磁道。

输入总的磁道数

输入当前磁道数

分别输入各磁道数

寻找100以外的磁寻找100以内的磁

道,进行差运算道,进行差运算

将差值进行加法运算,然后除以磁道

个数,即得到平均寻道长度

在磁盘调度算法中,分别用到了这四种不理原理的调度方法,实现了不同

方式的运行结果,FCFS算法仅适用于请求磁盘I/O的进程数目少的场合。

SCAN算法的应用,避免了出现“饥饿”现象的发生。

对于FCFS算法,是先进来的数据先使用;

对于SSTF算法,是寻找离给定的磁道数最近的磁道,然

后做差运算,最后求平均得出平均寻道长度;

对于SCAN算法,是先找离第100磁道以外的磁道数,而后再去找离第100磁道以内的磁道数,分别做差运

行,最后求平均得出平均寻道长度。

对于CSCAN算法,则恰恰与SCAN算法是相反过程的,也能很好的求出平均得出平均寻道长度。

参考文献:

1、《计算机操作系统》汤子瀛哲凤屏汤小丹西安电子科技大学出版社2、《计算机操作系统教程》周长林左万历高等教育出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1