磁盘调度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目8 磁盘调度
一、实验目的
1、对磁盘调度的相关知识作进一步的了解,明确磁盘调度的原理。
2、加深理解磁盘调度的主要任务。
3、通过编程,掌握磁盘调度的主要算法。
二、实验内容和要求
1、对于如下给定的一组磁盘访问进行调度:
2、要求分别采用先来先服务、最短寻道优先以及电梯调度方法进行调度。
3、要求给出每种算法中磁盘访问的顺序,计算出平均移动道数。
4、假定当前读写头在90号,向磁道号增加的方向移动。
三、实验报告
1、程序中使用的数据结构及符号说明。
2、给出主要算法的流程图。
3、给出程序清单并附上注释。
4、给出测试数据和运行结果。
程序:
#include
#include
void main()
{
//请求服务到达 A B C D E F G H I J K //访问的磁道号30 50 100 180 20 90 150 70 80 10 160
//要求给出每种算法中磁盘访问的顺序,计算出平均移动道数。
//假定当前读写头在号,向磁道号增加的方向移动。
//初始化
int track[N],track2[N+1];
int i ;
printf("请输入访问磁道序列:\n");
for (i=0;i { scanf("%d",&track[i]); track2[i] = track[i] ; } //先来先服务 printf("先来先服务:"); for (i=0;i { printf("%d ",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); //最短寻道优先 s = 0 ; printf("最短寻道优先:"); int temp[N]; track2[N] = 90 ; int k = N ; //当前磁道 int flag ; //标志 int min; //最小差值 int t ; //最小差值的数组下标 int j; for (j=0 ; j { flag = 0; for (i=0;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 printf("%d ",track[temp[i]]); printf("\n平均移动磁道数:%0.1lf\n\n",s/N); //电梯调度方法 s = 0 ; printf("电梯调度:"); for (i=0;i { for (j=0;j { if (track[j]>track[j+1]) { t=track[j];track[j]= track[j+1];track[j+1]=t; } } } for (i=0;i { if (track[i]>90) break; } for (j=i;j printf("%d ",track[j]); for(j=i-1;j>=0;j--) printf("%d ",track[j]); s = (track[N-1]-90)+(track[N-1]-track[0]); printf("\n平均移动磁道数:%0.1lf",s/N); printf("\n"); } 运行结果: