操作系统实验四磁盘调度算法实验报告.docx
- 文档编号:27976957
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:20
- 大小:195.12KB
操作系统实验四磁盘调度算法实验报告.docx
《操作系统实验四磁盘调度算法实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统实验四磁盘调度算法实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
操作系统实验四磁盘调度算法实验报告
实验四实验报告
实验源码:
#include"stdio.h"
#include
#include
inta[20];
inti,n,k,init,flag1=1;
//先来先服务
voidFCFS(inta[],intn,intinit)
{
inti,s,sum,temp=0;
intb[20];
for(i=0;i b[i]=a[i]; s=init; sum=0; printf("\nFCFS调度结果: \n"); for(i=0;i { //被访问的磁道号 printf("%3d\t",b[i]); //计算移动距离 temp=abs(s-b[i]); printf("%3d\n",temp); sum+=temp; s=b[i]; } printf("平均寻道长度: %.1f%%\n\n",sum*1.0/n); } //最短寻道法 voidSSTF(inta[],intn,intinit) { inti,j,s,sum=0,p,temp=0; intb[20]; for(i=0;i b[i]=a[i]; printf("\nSSTF调度结果: \n"); for(i=n-1;i>=0;i--) { s=b[0]; p=0; for(j=0;j<=i;j++) if(abs(b[j]-init) { s=b[j]; p=j; } b[p]=b[i]; //被访问的磁道号 printf("%3d\t",s); //计算移动距离 temp=abs(s-init); printf("%3d\n",temp); sum+=temp; init=s; } printf("平均寻道长度: %.1f%%\n\n",sum*1.0/n); } //扫描算法 voidSCAN(inta[],intn,intinit) { inti,j,s,sum=0,p,biaoji,temp=0,k1; intb[20]; for(i=0;i b[i]=a[i]; printf("\n*****************SCAN扫描算法******************\n"); printf("1.移动臂向磁道号减少的方向2.移动臂向磁道号增加的方向\n"); printf("*******************************************************\n"); printf("请在下面输入您的选择: "); scanf("%d",&k1); switch(k1) { case1: //磁道号减小方向 printf("\nSCAN(磁道号减少的方向)调度结果: \n"); for(i=n-1;i>=0;i--) { biaoji=0; for(j=0;j<=i;j++) if(b[j]-init<0) { biaoji=1; p=j; break; } if(biaoji==1) { s=b[p]; for(j=0;j<=i;j++) if(b[j] { s=b[j]; p=j; } b[p]=b[i]; //被访问的磁道号 printf("%3d\t",s); //计算移动距离 temp=init-s; printf("%3d\n",temp); sum+=temp; init=s; } else { s=b[0]; for(j=0;j<=i;j++) if(b[j]-init<=s-init) { s=b[j]; p=j; } b[p]=b[i]; //被访问的磁道号 printf("%3d\t",s); //计算移动距离 temp=abs(init-s); printf("%3d\n",temp); sum+=temp; init=s; } } break; case2: //磁道号增加方向 printf("\nSCAN(磁道号增加方向)调度结果: \n"); for(i=n-1;i>=0;i--) { biaoji=0; for(j=0;j<=i;j++) if(b[j]-init>0) { biaoji=1; p=j; break; } if(biaoji==1) { s=b[p]; for(j=0;j<=i;j++) if(b[j]>init&&b[j]-init { s=b[j]; p=j; } b[p]=b[i]; //被访问的磁道号 printf("%3d\t",s); //计算移动距离 temp=s-init; printf("%3d\n",temp); sum+=s-init; init=s; } else { s=b[0]; for(j=0;j<=i;j++) if(init-b[j]<=init-s) { s=b[j]; p=j; } b[p]=b[i]; //被访问的磁道号 printf("%3d\t",s); //计算移动距离 temp=abs(init-s); printf("%3d\n",temp); sum+=temp; init=s; } } break; default: printf("\n请输入1-2之间的整数! \n"); break; } printf("平均寻道长度: %.1f%%\n\n",sum*1.0/n); } //循环算法 voidCSCAN(inta[],intn,intinit) { inttemp; intk=1; intl,r,d; intb[20]; inti,j,sum=0; intinit_temp=init; for(i=0;i b[i]=a[i]; for(i=0;i { for(j=i+1;j { if(b[i]>b[j])//对磁道号进行从小到大排列 { temp=b[i]; b[i]=b[j]; b[j]=temp; } } } if(b[n-1]<=init)//判断整个数组里的数是否都小于当前磁道号 { printf("\nCSCAN调度结果: \n"); for(i=0;i { //被访问的磁道号 printf("%3d\t",b[i]); //计算移动距离 printf("%3d\n",abs(init_temp-b[i])); init_temp=b[i]; } sum=init-b[0]+b[n-1];//计算移动距离 } elseif(b[0]>=init)//判断整个数组里的数是否都大于当前磁道号 { printf("\nCSCAN调度结果: \n"); for(i=0;i { //被访问的磁道号 printf("%3d\t",b[i]); //计算移动距离 printf("%3d\n",abs(init_temp-b[i])); init_temp=b[i]; } sum=b[n-1]-init;//计算移动距离 } else { while(b[k] { k++; } l=k-1; r=k; printf("\n*************循环算法**************\n"); printf("1.移动臂向磁道号减少的方向2.移动臂向磁道号增加的方向\n"); printf("***********************************\n"); printf("请在下面输入您的选择: "); scanf("%d",&d); printf("\nCSCAN调度结果: \n"); switch(d) { case1: //磁道号减小方向 for(j=l;j>=0;j--) { //被访问的磁道号 printf("%3d\t",b[j]); //计算移动距离 printf("%3d\n",abs(init_temp-b[j])); init_temp=b[j]; } for(j=n-1;j>=r;j--) { //被访问的磁道号 printf("%3d\t",b[j]); //计算移动距离 printf("%3d\n",abs(init_temp-b[j])); init_temp=b[j]; } sum=2*(b[n-1]-b[0])-b[r]+init;//计算移动距离 break; case2: //磁道号增加方向 for(j=r;j { //被访问的磁道号 printf("%3d\t",b[j]); //计算移动距离 printf("%3d\n",abs(init_temp-b[j])); init_temp=b[j]; } for(j=0;j { //被访问的磁道号 printf("%3d\t",b[j]); //计算移动距离 printf("%3d\n",abs(init_temp-b[j])); init_temp=b[j]; } sum=2*(b[n-1]-b[0])+b[r-1]-init;//计算移动距离 break; default: printf("\n请输入1-2之间的整数! \n"); break; } printf("\n平均寻道长度: %.1f%%\n\n",sum*1.0/n); } } voidDataInput() { printf("请输入需要访问的磁道总数: "); scanf("%d",&n); printf("\n"); for(i=0;i { printf("需要访问的磁道%d: ",i+1); scanf("%d",&a[i]); } printf("\n"); printf("请输入指针所在磁道: "); scanf("%d",&init); printf("\n"); system("cls"); //显示需要访问的磁道 printf("需要访问的磁道序列为: "); for(i=0;i { printf("%d",a[i]); } printf("\n"); } voidmain() { DataInput(); intmenu=-1; while(true) { printf("\n*********************************************\n"); printf("磁盘调度算法\n"); printf("*********************************************\n"); printf("**\n"); printf("1.先来先服务(FCFS)2.最短寻道时间优先(SSTF)\n"); printf("3.扫描算法(SCAN)4.循环算法(CSCAN)\n"); printf("5.退出(EXIT)\n"); printf("0.返回上一层(RETURN)\n"); printf("**\n"); printf("*********************************************\n"); printf("请在下面输入您的选择: "); scanf("%d",&menu); switch(menu) { case1: FCFS(a,n,init); break; case2: SSTF(a,n,init); break; case3: SCAN(a,n,init); break; case4: CSCAN(a,n,init); break; case5: exit(0); break; case0: system("cls"); DataInput(); break; default: break; } if(menu! =1&&menu! =2&&menu! =3&&menu! =4&&menu! =5&&menu! =0){ system("cls"); printf("\n请输入0-5之间的整数! \n"); continue; } } } 实验结果截图: 程序运行: 输入相关数据: 进入选择算法界面: 先来先服务算法: 最短寻道时间优先算法: 扫描算法: 向磁道号减少的方向: 向磁道号增加的方向: 循环算法: 向磁道号减少的方向: 向磁道号增加的方向:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 磁盘 调度 算法 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)