当前位置:文档之家› 操作系统实验六磁盘调度算法正确C代码

操作系统实验六磁盘调度算法正确C代码

{
for(int i=n;i<N;i++)
{
MoveDistance[i-n]=abs(SortOrder[i]-temp);
temp=SortOrder[i];
FindOrder[i-n]=SortOrder[i];
}
for(int j=0;j<n;j++)
{
MoveDistance[N-n+j]=abs(SortOrder[j]-temp);
}
for(int j=n-1;j>=0;j--)
{
MoveDistance[N-1-j]=abs(SortOrder[j]-temp);
temp=SortOrder[j];
FindOrder[N-1-j]=SortOrder[j];
}
}
else
{
ห้องสมุดไป่ตู้for(int i=n-1;i>=0;i--)
{
MoveDistance[N-i-4]=abs(SortOrder[i]-temp);
}
for(int j=N-1;j>=n;j--)
{
MoveDistance[N-j+n-1]=abs(SortOrder[j]-temp);
temp=SortOrder[j];
FindOrder[N-j+n-1]=SortOrder[j];
}
}
}
//========计算平均寻道时间==============
{
int y=1;
int s;
Inith();
while(y)
{
cout<<"请选择寻道方式:1--FCFS; 2--SSTF; 3--SCAN;4--CSCSN: ";
cin>>s;
switch(s)
{
case 1:FCFS();Count();Show();break;
case 2:SSTF();Count();Show();break;
temp=SortOrder[j];
FindOrder[N-n+j]=SortOrder[j];
}
}
else
{
for(int i=n-1;i>=0;i--)
{
MoveDistance[n-1-i]=abs(SortOrder[i]-temp);
temp=SortOrder[i];
FindOrder[n-1-i]=SortOrder[i];
void Sort()
{
int temp;
for(int i=N-1;i>=0;i--)
for(int j=0;j<i;j++)
{
if(SortOrder[j]>SortOrder[j+1])
{
temp=SortOrder[j];
SortOrder[j]=SortOrder[j+1];
SortOrder[j+1]=temp;
MoveDistance[j]=0;
cout<<"请输入开始磁道号: ";
cin>>BeginNum;
for(int k=0;k<N;k++)
Finished[k]=false;
for(int l=0;l<N;l++)
SortOrder[l]=TrackOrder[l];
}
//=====================排序函数,将各进程申请的磁道按从小到大排列=================
4)输出:每种算法的平均寻道长度。
实验要求:
1)上机前认真复习磁盘调度算法,熟悉FCFS,SSTF,SCAN和循环SCAN算法的过程;
2)上机时独立编程、调试程序;
3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。
实验代码:
#include<iostream>
程序要求如下:
1)利用先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法模拟磁道访问过程。
2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。
3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。
}
}
}
//============FCFS,先来先服务=================================
void FCFS()
{
int temp;
temp=BeginNum;
for(int i=0;i<N;i++)
{
MoveDistance[i]=abs(TrackOrder[i]-temp);
temp=SortOrder[i];
FindOrder[N-i-4]=SortOrder[i];
}
for(int j=n;j<N;j++)
{
MoveDistance[j]=abs(SortOrder[j]-temp);
temp=TrackOrder[j];
FindOrder[j]=SortOrder[j];
bool Finished[MaxNumber];
void Inith()
{
cout<<"请输入提出磁盘I/O申请的进程数: ";
cin>>N;
cout<<"请依次输入要访问的磁道号: ";
for(int i=0;i<N;i++)
cin>>TrackOrder[i];
for(int j=0;j<N;j++)
void Count()
{
int Total=0;
for(int i=0;i<N;i++)
{
Total+=MoveDistance[i];
}
AverageDistance=((double)Total)/((double)N);
}
void Show()
{
cout<<setw(20)<<"被访问的下一个磁道号"<<setw(20)<<"移动距离(磁道数)"<<endl;
cout<<"请选择开始方向:1--向外;0---向里: ";
cin>>m;
if(m==1)
direction=true;
else if(m==0)
direction=false;
else
cout<<"输入错误!";
for(int i=0;i<N;i++)
{
if(SortOrder[i]<BeginNum)
case 3:SCAN();Count();Show();break;
case 4:CSCAN();Count();Show();break;
}
cout<<"是否继续选择寻道算法?1--是;0--否: ";
int p;
cin>>p;
y=p;
}
exit;
return 0;
}
结果截图:
continue;
else
{
n=i;
break;
}
}
if(direction==true)
{
for(int i=n;i<N;i++)
{
MoveDistance[i-n]=abs(SortOrder[i]-temp);
temp=SortOrder[i];
FindOrder[i-n]=SortOrder[i];
temp=TrackOrder[n];
A=M;
FindOrder[i]=TrackOrder[n];
}
}
//=====================SCAN,扫描算法==========================
void SCAN()
{
int m,n,temp;
temp=BeginNum;
Sort();
temp=TrackOrder[i];
FindOrder[i]=TrackOrder[i];
}
}
//========SSTF,最短寻道法=============================
void SSTF()
{
int temp,n;
int A=M;
temp=BeginNum;
for(int i=0;i<N;i++)
}
}
}
//=================CSCAN,循环扫描算法=======================
void CSCAN()
{
int m,n,temp;
temp=BeginNum;
Sort();
cout<<"请选择开始方向:1--向外;0---向里: ";
cin>>m;
if(m==1)
{
for(int j=0;j<N;j++)
{
if(abs(TrackOrder[j]-temp)<A&&Finished[j]==false)
相关主题