操作系统的磁盘调度算法C语言
2021/10/6 9:11:17
本文主要是介绍操作系统的磁盘调度算法C语言,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
磁盘调度算法通常有FCFS、SSTF、SCAN、CSAN这四种算法,以下是这种四种方法的总和:
#include<iostream>
using namespace std;
#include<math.h>
#include<iomanip>
int FF[10]={55,58,39,18,90,160,150,38,184};
int F[10];
int z[10]={100};
int Y[9];
float a_l=0;
void FCFS()
{
int i=0;
int temp=100;
while(i<9)
{
Y[i]=fabs(temp-F[i]);
temp=F[i];
i++;
}
cout<<"从100#磁道开始"<<endl;
cout<<"访问到的磁道号"<<setw(10)<<"移动距离"<<endl;
for(i=0;i<9;i++)
{
cout<<setw(10)<<F[i]<<setw(10)<<Y[i]<<endl;
a_l+=Y[i];
}
cout<<"平均寻道距离:"<<setw(10)<<a_l/9<<endl;}
void SSTF()
{
int temp,temp1,k,w;
int j=9;
int a=0;
int i;
while(j>0)
{
temp=fabs(z[a]-F[0]);
k=temp;
int c=0;
for(i=0;i<j;i++)
{
temp1=fabs(z[a]-F[i]);
if((k-temp1)<0)
{k=k;w=c;}
else
{k=temp1;w=i;c=i;}
}
Y[a]=k;
a++;
z[a]=F[w];
for(w;w<9;w++)
{
F[w]=F[w+1];
}
j--;
}
int zz[9];
for(a=0;a<9;a++)
{zz[a]=z[a+1];}
cout<<"从100#磁道开始"<<endl;
cout<<"访问到的磁道号"<<setw(10)<<"移动距离"<<endl;
a_l=0;
for(a=0;a<9;a++)
{cout<<setw(10)<<zz[a]<<setw(10)<<Y[a]<<endl;a_l+=Y[a];}
cout<<"平均寻道距离:"<<setw(10)<<a_l/9<<endl;}
void SCAN()
{
int aa[9],bb[9];
int start=z[0];
int i=0,j=0;
int ii=0,jj=0;
int temp;
int FF[9];while(i<9)
{
if((F[i]-start)>0)
{aa[ii]=F[i];ii++;i++;}
else {bb[jj]=F[i];jj++;i++;}
}
for(i=0;i<(ii-1);i++)
{ for(j=i;j<ii;j++)
{
if(aa[i]>aa[j])
{
temp=aa[i];
aa[i]=aa[j];
aa[j]=temp;}
}
}
for(i=0;i<(jj-1);i++)
{
for(j=i;j<jj;j++)
{ if(bb[i]<bb[j])
{temp=bb[i];
bb[i]=bb[j];
bb[j]=temp;}
}
}
temp=z[0];
for(i=0;i<ii;i++)
{
Y[i]=aa[i]-temp;
temp=aa[i];
FF[i]=aa[i];}
for(j=0;j<jj;j++)
{
Y[i]=fabs(bb[j]-temp);
temp=bb[j];
FF[i]=bb[j];
i++;
}
cout<<"从100#磁道开始,磁头方向为自外向里"<<endl;
cout<<"访问到的磁道号"<<setw(10)<<"移动距离"<<endl;
a_l=0;
for(i=0;i<9;i++)
{
cout<<setw(10)<<FF[i]<<setw(10)<<Y[i]<<endl;
a_l+=Y[i];
}
cout<<"平均寻道距离:"<<setw(10)<<a_l/9<<endl;}
void CSCAN()
{
int aa[9],bb[9];
int start=z[0];
int i=0,j=0;
int ii=0,jj=0;
int temp;
int FF[9];
while(i<9)
{
if((F[i]-start)>0)
{aa[ii]=F[i];ii++;i++;}
else {bb[jj]=F[i];jj++;i++;}
}
for(i=0;i<(ii-1);i++)
{ for(j=i;j<ii;j++)
{
if(aa[i]>aa[j])
{
temp=aa[i];
aa[i]=aa[j];
aa[j]=temp;}
}
}
for(i=0;i<(jj-1);i++)
{
for(j=i;j<jj;j++)
{ if(bb[i]>bb[j])
{temp=bb[i];
bb[i]=bb[j];
bb[j]=temp;}
}
}
temp=z[0];
for(i=0;i<ii;i++)
{
Y[i]=aa[i]-temp;
temp=aa[i];
FF[i]=aa[i];}
for(j=0;j<jj;j++)
{
Y[i]=fabs(bb[j]-temp);
temp=bb[j];
FF[i]=bb[j];
i++;
}
cout<<"从100#磁道开始,磁头方向为自外向里"<<endl;
cout<<"访问到的磁道号"<<setw(10)<<"移动距离"<<endl;
a_l=0;
for(i=0;i<9;i++)
{
cout<<setw(10)<<FF[i]<<setw(10)<<Y[i]<<endl;
a_l+=Y[i];
}
cout<<"平均寻道距离:"<<setw(10)<<a_l/9<<endl;}
void main()
{
int n,i;
do
{
for(i=0;i<9;i++)
F[i]=FF[i];
cout<<"请求访问的磁道号依次为:";
for(i=0;i<9;i++)
cout<<F[i]<<" ";
cout<<endl;
cout<<"请选择算法"<<endl;
cout<<" 1-FCFS "<<endl;
cout<<" 2-SSTF "<<endl;
cout<<" 3-SCAN "<<endl;
cout<<" 4-CSCAN "<<endl;
cout<<" 0-exit "<<endl;
cin>>n;
switch(n)
{
case 1:{FCFS();break;}
case 2:{SSTF();break;}
case 3:{SCAN();break;}
case 4:{CSCAN();break;}
//case 0:exit;
}
}while(n!=0);
}
这篇关于操作系统的磁盘调度算法C语言的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法