磁盘调度Word格式文档下载.docx

上传人:b****1 文档编号:5227082 上传时间:2023-05-04 格式:DOCX 页数:13 大小:58.59KB
下载 相关 举报
磁盘调度Word格式文档下载.docx_第1页
第1页 / 共13页
磁盘调度Word格式文档下载.docx_第2页
第2页 / 共13页
磁盘调度Word格式文档下载.docx_第3页
第3页 / 共13页
磁盘调度Word格式文档下载.docx_第4页
第4页 / 共13页
磁盘调度Word格式文档下载.docx_第5页
第5页 / 共13页
磁盘调度Word格式文档下载.docx_第6页
第6页 / 共13页
磁盘调度Word格式文档下载.docx_第7页
第7页 / 共13页
磁盘调度Word格式文档下载.docx_第8页
第8页 / 共13页
磁盘调度Word格式文档下载.docx_第9页
第9页 / 共13页
磁盘调度Word格式文档下载.docx_第10页
第10页 / 共13页
磁盘调度Word格式文档下载.docx_第11页
第11页 / 共13页
磁盘调度Word格式文档下载.docx_第12页
第12页 / 共13页
磁盘调度Word格式文档下载.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

磁盘调度Word格式文档下载.docx

《磁盘调度Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《磁盘调度Word格式文档下载.docx(13页珍藏版)》请在冰点文库上搜索。

磁盘调度Word格式文档下载.docx

"

DISKMAX);

scanf("

%d"

base_num);

if(*base_num<

=0||*base_num>

DISKMAX)

{

printf("

ERROR!

);

exit(0);

}

\n"

\n基本磁道数如下:

for(i=0;

i<

*base_num;

i++)

%d"

i);

}

//设置请求访问磁道数

voidSetRequestDisk(int*R,int*request_num,intbase_num)

inti;

srand(time(NULL));

\n输入请求的磁道数(1~%d)"

DISKTOTAL);

scanf("

request_num);

if(*request_num<

=0||*request_num>

DISKTOTAL)

{

}

\n系统随机产生的磁道请求位置:

for(i=0;

*request_num;

R[i]=rand()%(base_num-1);

//生成随机数

R[i]);

//设置当前磁道

voidSetPresentDisk(int*present_disk,int*base_num)

\n请输入磁头的开始位置(0~%d):

*base_num-1);

scanf("

present_disk);

if(*present_disk<

0||*present_disk>

=*base_num)

3.3先来先服务算法(FCFS)模块

3.3.1功能

根据磁盘信息,模拟实现先来先服务磁盘调度算法。

3.3.2算法

voidFCFS(int*R,intpresent_disk,intrequest_num)

intcount=0;

//磁头移动总次数

intstep;

//访问下一个磁道磁头移动次数

\n移动序号移动路径移动距离"

step=abs(present_disk-R[0]);

//绝对值,求距离最近

count+=step;

\n1%d---->

%d%d"

present_disk,R[0],step);

//输出访问轨迹

request_num-1;

{//遍历数组

step=abs(R[i]-R[i+1]);

count+=step;

\n%d%d---->

i+2,R[i],R[i+1],step);

\n总的磁头移动距离:

count);

//输出磁头总移动次数

\n磁头的平均移动距离:

count/request_num);

//平均移动次数

3.4最短寻道时间优先算法(SSTF)模块

3.4.1功能

3.4.2算法

voidSSTF(int*R,intpresent_disk,intrequest_num)

inti=0;

inttemp,key;

intcount=0,step=0;

intup=0,down=0;

intup_step=0,down_step=0;

key=SearchPresent(R,request_num,present_disk);

//查找当前磁道

while(key!

=0&

&

key!

=request_num)

{//磁道没有到头或尾

i++;

if((R[key]-R[key-1-down])<

(R[key+1+up]-R[key]))

{//左边的磁道比右边的磁道近

temp=key-1-down;

//记录下一个磁道

down_step++;

down=0;

up=down_step+up_step;

else

{//右边的磁道比左边的磁道近

temp=key+1+up;

up_step++;

up=0;

down=up_step+down_step;

step=abs(R[key]-R[temp]);

\n%d%d-->

i,R[key],R[temp],step);

key=temp;

if(key==0)

{//当前磁头在头

temp=key+1+up;

//记录下一个将要访问的磁道

step=abs(R[key]-R[temp]);

\n%d%d-->

%d%d"

i,R[key],R[temp],step);

i++;

step=R[key+1]-R[key];

count+=step;

i,R[key],R[key+1],step);

key++;

else

{//当前磁头在尾

temp=key-1-down;

%d%d"

=0)

step=R[key]-R[key-1];

i,R[key],R[key-1],step);

key--;

3.5扫描算法(SCAN)模块

根据磁盘信息,模拟实现扫描算法。

voidSCAN(int*R,intpresent_disk,intrequest_num)

key=SearchPresent(R,request_num,present_disk);

temp=key;

if(key==request_num)

{//当前磁头在磁道头

{//向内移动

i+1,R[key],R[key-1],step);

i++;

elseif(key==0)

{//当前磁头在磁道尾

i+1,R[key],R[key+1],step);

{//当前磁头不在头或尾

{//向内移动

i+1,R[key],R[key-1],step);

step=R[temp+1]-R[key];

i,R[key],R[temp+1],step);

key=temp+1;

step=R[key+1]-R[key];

i+1,R[key],R[key+1],step);

}

4、实验结果及分析

4.1实验结果

4.2结果分析

由用户输入磁盘磁道数,然后随机生成请求的磁道数,根据用户的选择,按照不同的方法进行磁道的调度,记录磁头的移动过程,并记录磁头移动的距离,由结果可以比较出不同方法的磁头移动距离不同,因此,可以通过比较选择最优的调度算法。

5、附录

#include<

stdio.h>

stdlib.h>

time.h>

math.h>

#defineDISKMAX1000

#defineDISKTOTAL30

#defineOK1

#defineERROR-1

intmain()

intR[DISKTOTAL];

intbase_num,request_num,present_disk;

intchoose;

intflag=0;

\n********欢迎使用磁盘调度算法**********"

\n\n1.先来先服务算法FCFS"

\n\n2.扫描算法SCAN"

\n\n3.最短寻道时间优先算法SSTF"

\n\n4.退出."

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

SetBaseDisk(&

base_num);

SetRequestDisk(R,&

request_num,base_num);

SetPresentDisk(&

present_disk,&

do

\n\n请输入您的选择(不可重复输入!

!

):

(1,2,3,4)"

&

choose);

//输入选择

switch(choose)

case1:

{

FCFS(R,present_disk,request_num);

}break;

case2:

if(flag==0)

flag=Sort(R,request_num,present_disk);

//排序

SCAN(R,present_disk,request_num);

case3:

if(flag==0)

//排序

SSTF(R,present_disk,request_num);

}//switch

回车键继续......"

getchar();

}while(choose>

=1&

choose<

4);

\n谢谢使用....\n"

return0;

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

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2