磁盘调度算法 mysql_磁盘调度算法

// 磁盘调度算法.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include

using namespace std;

#include

const int MaxNumber=100;

int  TrackOrder[MaxNumber];//磁道访问序列

int  MoveDistance[MaxNumber];//移动的磁道数

double  AverageDistance;//平均寻道长度

bool direction;//移动方向;若为1时是想磁道号增加的方向访问,否者,反方向访问。

int visit[MaxNumber];

int n;//磁道个数

int m;//开始磁道号

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 初始化 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

void initial(){

//cout<

cin>>n;

//cout<

cin>>m;

//cout<

for(int i=0;i>TrackOrder[i++]);

for(int i=0;i

cout<

}

void display(){

int i=0;

for(int i=0;i

cout<

}

void average_dis(){

int sum=0;

for(int i=0;i

AverageDistance=(sum*1.0)/n;

}

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ FCFS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

void FCFS(){

int i=0;

int now=m;

for(i=0;i

{MoveDistance[i]=(int)fabs(double(now-TrackOrder[i]));now=TrackOrder[i];}

average_dis();

}

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SSTF @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

void SSTF(){

int now=m;//当前磁道序号

memset(visit,0,MaxNumber*sizeof(int));

int loop_time=n;

int index=0;

int distance=now-TrackOrder[index];

int i=0;

while(loop_time--)

{

for(i=0;i

if(!visit[i])

{index=i;distance=(int)fabs(double(now-TrackOrder[i]));break;}

for(i=0;i

if(!visit[i])

if((int)fabs(double(now-TrackOrder[i]))

{index=i;distance=(int)fabs(double(now-TrackOrder[i]));}

MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));

now=TrackOrder[index];

visit[index]=true;

}

average_dis();

}

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SCAN @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

void SCAN(){

int now=m;//当前磁道序号

memset(visit,0,MaxNumber*sizeof(int));

int index=0;int distance=0;

int i=0,j=0;

bool jmp=false;

//先由里向外;

while(1)

{

jmp=true;

for(j=0;j

{

if(!visit[j] && TrackOrder[j]>m )

{

jmp=false;

index=j;

distance=TrackOrder[index];

for(i=0;i

if(!visit[i] && TrackOrder[i]>m)

if(TrackOrder[i]

{index=i;distance=TrackOrder[i];}

MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));

now=TrackOrder[index];

visit[index]=true;

}

}

if(jmp)break;

}

//再由外到里;

while(1)

{

jmp=true;

for(j=0;j

{

if(!visit[j] && TrackOrder[j]

{

jmp=false;

index=j;

distance=TrackOrder[index];

for(i=0;i

if(!visit[i] && TrackOrder[i]

if(TrackOrder[i]>distance)

{index=i;distance=TrackOrder[i];}

MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));

now=TrackOrder[index];

visit[index]=true;

}

}

if(jmp)break;

}

average_dis();

}

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 循环SCAN @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

void loop_SCAN(){

fclose(stdin);

freopen("CON","r",stdin);

cout<

direction=1;

cin>>direction;

int now=m;//当前磁道序号

memset(visit,0,MaxNumber*sizeof(int));

int index=0;int distance=0;

int i=0,j=0;

bool jmp=false;

if(direction==1){

//始终想增加方向

while(1)

{

jmp=true;

for(j=0;j

{

if(!visit[j] && TrackOrder[j]>m )

{

jmp=false;

index=j;

distance=TrackOrder[index];

for(i=0;i

if(!visit[i] && TrackOrder[i]>m)

if(TrackOrder[i]

{index=i;distance=TrackOrder[i];}

MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));

now=TrackOrder[index];

visit[index]=true;

}

}

if(jmp)break;

}

//再由外到里;

while(1)

{

jmp=true;

for(j=0;j

{

if(!visit[j] && TrackOrder[j]

{

jmp=false;

index=j;

distance=TrackOrder[index];

for(i=0;i

if(!visit[i] && TrackOrder[i]

if(TrackOrder[i]

{index=i;distance=TrackOrder[i];}

MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));

now=TrackOrder[index];

visit[index]=true;

}

}

if(jmp)break;

}

}

else

{

while(1)

{

jmp=true;

for(j=0;j

{

if(!visit[j] && TrackOrder[j]>m )

{

jmp=false;

index=j;

distance=TrackOrder[index];

for(i=0;i

if(!visit[i] && TrackOrder[i]>m)

if(TrackOrder[i]>distance)

{index=i;distance=TrackOrder[i];}

MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));

now=TrackOrder[index];

visit[index]=true;

}

}

if(jmp)break;

}

//再由外到里;

while(1)

{

jmp=true;

for(j=0;j

{

if(!visit[j] && TrackOrder[j]

{

jmp=false;

index=j;

distance=TrackOrder[index];

for(i=0;i

if(!visit[i] && TrackOrder[i]

if( TrackOrder[i]>distance)

{index=i;distance=TrackOrder[i];}

MoveDistance[index]=(int)fabs(double(now-TrackOrder[index]));

now=TrackOrder[index];

visit[index]=true;

}

}

if(jmp)break;

}

}

average_dis();

}

//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 主函数 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

int _tmain(int argc, _TCHAR* argv[])

{

freopen("text.txt","rt",stdin);

int choice=0;

initial();

display();

cout<

while(cin>>choice)

{

if(choice==1){cout<

else if(choice==2){cout<

else if(choice==3){cout<

else if(choice==4){cout<

else cout<

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值