操作系统课程设计5答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("4.循环扫描算法(CSCAN):\n");
printf("5.退出算法\n");
printf("*************************************************\n");
scanf("%d",&i);//用于选择磁盘调度的算法
printf("你的选择是:%d",i);
while(choose==1)
{
printf("请输入开始磁道:\n");
scanf("%d",&k);
printf("请输入要访问的磁道的上限\n");
scanf("%d",&lim);
if(lim>10000){
printf("超出磁盘界限");}
else{
Random(a);
while(m!=5)
}
}
else{
fx=0;//向内
printf("\n");
for(i=0,j=p;i<10,j>=0;i++,j--)
{
c[i]=b[j];
}
for(i=j=p+1;i<10,j<10;i++,j++)
{
c[i]=b[j];
}
for(i=0;i<10;i++)
{
printf("%d\t",c[i]);//扫描完的数组
if(b[h]>k)//判断第一个移动的方向向外
{
fx=1;
printf("\n");
for(i=0,j=q;i<10,j<10;i++,j++)
{
c[i]=b[j];
}
for(i=j=p;i<10,j>=0;i++,j--)
{
c[i]=b[j];
}
for(i=0;i<10;i++)
{
printf("%d\t",c[i]);//扫描完的数组
p++;
}else
q++;
if(m<min)
{
min=m;
h=j;//最小移动磁道的下标
}
}
for(i=0,j=p;i<10,j<10;i++,j++)
{
c[i]=b[j];
}
for(i=q,j=0;i<10,j<q;i++,j++)
{
c[i]=b[j];
}
for(i=0;i<10;i++)
{
printf("%d\t",c[i]);//扫描完的数组
printf("平均移道数是:%f\n",avg);
}
void main()//主函数
{
int a[10];//用于存放随机生成的数组,要访问的磁道个数为10
int i;//用于选择第几种磁盘调度方法
int choose=1;//判断是否进行调度
int k;//开始的磁道
int m;
printf("开始进行磁盘调度\n");
a[i]=rand()%lim;
printf("随机生成的磁道号:");
printf("%d\n",a[i]);
}
}
void Yidong(int b[],int num,int g) //对移除后的数组进行重组
{
int i;
for(i=num;i<g;i++)
{
b[num]=b[num+1];
num++;//只消除num位置的数,其他的不变
}
}
void FCFS(int k,int a[])//先来先计算方法
{
int b[10];//定义一个数组存放磁道数
int sum=0,i,j,m;
printf("随机产生的磁道数按FCFS顺序是:\n");
for(i=0;i<10;i++)//将随机生成的磁道存放到数组中
{
b[i]=a[i];
printf("%d\t",b[i]);
printf("\n");
switch(i){
case 1:
FCFS(k,a);
break;
case 2:
SSTF(k,a);
break;
case 3:
SCAN(k,a);
break;
case 4:
CSCAN(k,a);
break;
case 5:
m=5;
exit(0);
default:
break;
}
{
int b[10],c[10];
int min=10000;
int fx;
int i,j,n,h,m,t,p=0,q=0;
int num=2;//计算磁头扫描的次数
for(i=0;i<10;i++)
{
b[i]=a[i];
}
for(j=0;j<=9;j++)
{
for(n=0;n<=9-j;n++)
{
}
printf("\n");
printf("移动距离:\n");
for(j=0;j<10;j++)//求移道总数
{
m=b[j]-k;
if(m<0)//移道数为负是求相反数
{
m=-(m);
}
printf("%d\t",m);
sum=sum+m;
k=b[j];
}
avg=(float)sum/10;
printf("\n");
{
printf("*************************************************\n");
printf("请选择磁盘调度算法:\n");
printf("1.先来先服务算法(FCFS):\n");
printf("2.最短寻道时间优先算法(SSTF):\n");
printf("3.扫描算法(SCAN):\n");
printf("平均移道数是:%f\n",avg);
}
void CSCAN(int k,int a[])//循环扫描算法
{
int b[10],c[10];
int min=10000;
int i,j,n,h,m,t,p=0,q=0;
int num=2;//计算磁头扫描的次数
for(i=0;i<10;i++)
}
}
}
}
if(b[n]>b[n+1])
{
t=b[n];
b[n]=b[n+1];
b[n+1]=t;
}
}
}
for(j=0;j<10;j++)//找到当前最小移道距离的磁道
{
m=b[j]-k;
if(m<0)
{
m=-(m);
p++;
}else
q++;
if(m<min)
{
min=m;
h=j;//最小移动磁道的下标
}
}
{
b[i]=a[i];
}
printf("SSTF访问顺序为:\n");
for(j=0;j<10;j++)//对移道差数进行排序
{
int min=10000;
for(n=0;n<g;n++)
{
m=b[n]-k;
if(m<0)
m=-(m);
if(m<min)
{
min=m;
num=n;//最小移动磁道的下标
}
printf("移动距离是:\n");
for(i=0;i<10;i++)
{
m=c[i]-k;
if(m<0)
{
m=-(m);
}
k=c[i];
printf("%d\t",m);
sum=sum+m;
}
avg=(float)sum/10;
printf("\n");
printf("移道总数是:%d\n",sum);
for(j=0;j<10;j++)//输出移动距离
{
printf("%4d",c[j]);
}
avg=(float)sum/10;
printf("\n");
printf("移道总数是:%d\n",sum);
printf("平均移道数是:%f\n",avg);
}
void SCAN(int k,int a[])//扫描算法
}
}
sum=sum+min;//计算移道总数
printf("%4d",b[num]);//输出当前最短移道的磁道数
k=b[num];//改变磁道开始数
Yidong(b,num,g);//剩余磁道
g--;
c[j]=min;//定义数组记录移动距离
}
printf("\n");
printf("移动距离是:\n");
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int lim;//访问磁道上限
int sum=0;//移道总和
float avg=0;//平均信道数
void Random(int a[])//产生随机数
{
int i;
for(i=0;i<10;i++){
}
}
printf("移动距离是:\n");
for(i=0;i<10;i++)
{wenku.baidu.com
m=c[i]-k;
if(m<0)
{
m=-(m);
}
k=c[i];
printf("%d\t",m);
sum=sum+m;
}
avg=(float)sum/10;
printf("\n");
printf("移道总数是:%d\n",sum);
{
b[i]=a[i];
}
for(j=0;j<=9;j++)
{
for(n=0;n<=9-j;n++)
{
if(b[n]>b[n+1])
{
t=b[n];
b[n]=b[n+1];
b[n+1]=t;
}
}
}
for(j=0;j<10;j++)//找到当前最小移道距离的磁道
{
m=b[j]-k;
if(m<0)
{
m=-(m);
printf("移道总数是:%d\n",sum);
printf("平均移道数是:%f\n",avg);
}
void SSTF(int k,int a[])//最短寻道时间优先算法
{
int i,j,n,m,num,g=10;
int b[10],c[10];
for(i=0;i<10;i++)//将随机产生的磁道复制过来
相关文档
最新文档