磁盘调度算法代码 2Word文档格式.docx

上传人:b****8 文档编号:22743879 上传时间:2023-02-05 格式:DOCX 页数:19 大小:129.52KB
下载 相关 举报
磁盘调度算法代码 2Word文档格式.docx_第1页
第1页 / 共19页
磁盘调度算法代码 2Word文档格式.docx_第2页
第2页 / 共19页
磁盘调度算法代码 2Word文档格式.docx_第3页
第3页 / 共19页
磁盘调度算法代码 2Word文档格式.docx_第4页
第4页 / 共19页
磁盘调度算法代码 2Word文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

磁盘调度算法代码 2Word文档格式.docx

《磁盘调度算法代码 2Word文档格式.docx》由会员分享,可在线阅读,更多相关《磁盘调度算法代码 2Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

磁盘调度算法代码 2Word文档格式.docx

三.目的

1.熟悉并掌握磁盘管理系统的设计方法,加深对所学各种磁盘调度算法及其算法的特点的了解。

2.掌握磁盘调度的基本概念,比较各种磁盘调度算法的优劣

四.要求

从课程设计的目的出发,通过设计工作的各个环节,达到以下设计要求:

1.对系统进行功能模块分析、控制模块分析正确;

2.系统设计要实用;

3.编程简练,可用,功能全面,具有较好的健壮性;

4.说明书、流程图要清楚。

五.详细设计及算法流程图

1.总流程图

2.先来先服务(FCFS)算法流程图

3.最短寻道时间优先(SSTF)算法流程图

4.扫描调度(SCAN)算法流程图

5.循环扫描(C-SCAN)算法流程图

附录:

修改后的程序:

#include<

iostream>

ctime>

usingnamespacestd;

voidFCFS(inta[],intn);

voidSSTF(inta[],intn);

voidSCAN(inta[],intn);

voidCSCAN(inta[],intn);

intmain()

{

intn;

//磁道的个数

ints;

//功能号

cout<

<

"

请输入当前磁道的个数:

endl;

cin>

>

n;

int*a=newint[n];

输入磁道号为:

;

for(inti=0;

i<

i++)

{

a[i];

a[i]<

"

}

while

(1)

{cout<

┏━━━━━━━━━━━━━━━━━━━━━━━┓"

┃     磁盘调度算法功能列表   ┃"

┠───────────────────────┨"

┃1、先来先服务算法(FCFS)┃"

┃2、最短寻道时间算法(SSTF)┃"

┃3、扫描算法(SCAN)┃"

┃4、循环扫描算法(CSCAN)┃"

┃0、退出┃"

┗━━━━━━━━━━━━━━━━━━━━━━━┛"

请选择所需功能的前置编号:

s;

if(s>

4)

数据输入有误!

请重新输入:

}

else

switch(s)

{case0:

exit(0);

break;

case1:

FCFS(a,n);

break;

case2:

SSTF(a,n);

break;

case3:

SCAN(a,n);

case4:

CSCAN(a,n);

}

return0;

//先来先服务调度算法(FCFS)

voidFCFS(inta[],intn)

{

intj,i,first=0,now;

floatsum=0,m;

cout<

请输入当前磁道号:

cin>

now;

//确定当前磁头所在位置

磁盘调度顺序为:

for(i=0;

i++)//按访问顺序输出磁道号

//计算sum

for(i=0,j=1;

j<

i++,j++)

first+=abs(a[j]-a[i]);

//外围磁道与最里面磁道的距离

sum+=first+abs(now-a[0]);

移动的总磁道数为:

sum<

m=sum/n;

平均寻道长度为:

m<

//最短寻道时间算法(SSTF)

voidSSTF(inta[],intn)

inttemp;

intk=1;

intnow,l,r;

inti,j;

floatm,sum=0;

//将磁道号按递增排序

for(i=0;

for(j=i+1;

j++)

if(a[i]>

a[j])

temp=a[i];

a[i]=a[j];

a[j]=temp;

按递增顺序排好的磁道显示为:

//输出排好的磁道顺序

请输入当前的磁道号:

if(a[n-1]<

=now)//当前磁头位置大于最外围欲访问磁道

for(i=n-1;

i>

=0;

i--)

sum=now-a[0];

else

if(a[0]>

=now)//当前磁头位置小于最里欲访问磁道

for(i=0;

sum=a[n-1]-now;

while(a[k]<

now)//确定当前磁道在已排的序列中的位置

k++;

l=k-1;

//在磁头位置的前一个欲访问磁道

r=k;

//磁头欲访问磁道

while((l>

=0)&

&

(r<

n))

if((now-a[l])<

=(a[r]-now))//选择离磁头近的磁道

a[l]<

sum+=now-a[l];

now=a[l];

l=l-1;

a[r]<

sum+=a[r]-now;

now=a[r];

r=r+1;

if(l=-1)//磁头位置里侧的磁道已访问完

for(j=r;

j++)//访问磁头位置外侧的磁道

a[j]<

sum+=a[n-1]-a[0];

if(r==n)//磁头位置外侧的磁道已访问完

for(j=k-1;

j>

-1;

j--)//访问磁头位置里侧的磁道

移动的总道数为:

m=sum/n;

//扫描算法(SCAN)

voidSCAN(inta[],intn)

i++)//对访问磁道按由小到大顺序排列输出

for(j=i+1;

按递增顺序排好的磁道为:

//以下算法确定磁道访问顺序

if(a[n-1]<

=now)//磁头位置大于最外围欲访问磁道

=now)//磁头位置小于最里欲访问磁道

else//磁头位置在最里侧磁道与最外侧磁道之间

{intd;

now)

{//确定当前磁道在已排的序列中的位置

//磁头欲访问磁道

请输入当前磁头移动的方向(0表示向内,1表示向外):

d;

//确定磁头访问的方向

if(d==0||d==1)

{

if(d==0)//磁头向内

{

for(j=l;

j--)

{

}

sum=now-2*a[0]+a[n-1];

}

if(d==1)//磁头向外

{

for(j=r;

{

}

sum=2*a[n-1]-now-a[0];

}

cout<

请输入0或1!

移动的总道数为:

//循环扫描算法(CSCAN)

voidCSCAN(inta[],intn)

for(i=0;

//确定当前磁道号

=now)//磁头位置大于最外围欲访问磁道

=now)//磁头位置小于最里欲访问磁道

cout<

if(d==1)//磁头向外侧访问

{

j++)//先访问外侧磁道再转向最里欲访问磁道

for(j=0;

r;

sum=2*a[n-1]-now-2*a[0]+a[l];

}

if(d==0)//磁头向内侧访问

{

for(j=r-1;

for(j=n-1;

=r;

sum=2*a[n-1]-2*a[0]+now-a[r];

else

请输入0或1!

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

当前位置:首页 > PPT模板 > 其它模板

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

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