#include<iostream>
#include<stdio.h>
#include<math.h>
#define N 11
using namespace std;
//初始化
void init(int track[],int track2[]){
int i ;
cout<<"请输入访问磁道序列:\n";
for (i=0;i<N;i++){
cin>>track[i];
track2[i] = track[i] ;
}
}
//先来先服务
void FCFS(int track[]){
int i;
cout<<"\n先来先服务:"<<endl;
for (i=0;i<N;i++){
cout<<track[i]<<" ";
}
double s = abs(90-track[0]) ;
for (i=0;i<=N-2;i++){
s += abs(track[i]-track[i+1]) ;
}
printf("\n平均移动磁道数:%0.1lf\n\n",s/N);
}
//最短寻道优先
void SJF(int track[],int track2[]){
int i;
double s = 0 ;
cout<<"最短寻道优先:"<<endl;
int temp[N];
track2[N] = 90 ;
int k = N ;//当前磁道
int flag ;//标志
int min;//最小差值
int t ;//最小差值的数组下标
int j;
for (j=0 ; j<N ;j++ ){
flag = 0;
for (i=0;i<N;i++){
if((i!=k)&&flag==0&& track2[i]!=-1){
min = abs(track2[i]- track2[k]);
t = i;
flag++;
}if((i!=k)&&(track2[i]!=-1)&&(abs(track2[i]-track2[k]) < min ) ){
min =abs(track2[i]-track2[k]);
t = i;
}
}
s += min ;
temp[j] = t ;
track2[k] = -1 ;
k = t;
}
for(i=0;i<N;i++)
cout<<track[temp[i]]<<" ";
printf("\n平均移动磁道数:%0.1lf\n",s/N);
cout<<endl;
}
int main(){
int track[N],track2[N+1];
init(track,track2);//初始化
FCFS(track);//调用先来先服务函数
SJF(track,track2);//调用最短寻道优先函数
system("pause");
return 0;
}
基于c++实现磁盘调度的模拟算法
于 2021-08-12 09:09:18 首次发布