预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第页共NUMPAGES10页 实验报告 学院(系)名称:计算机与通信工程学院 姓名侯超俊学号20091984专业计算机科学与技术班级2009级3班实验项目实验二:磁盘调度算法的实现课程名称操作系统课程代码0668036实验时间2011年12月8日第3、4节 2011年12月12日第7、8节 2011年12月15日第3、4节 2011年12月19日第7、8节实验地点软件实验室7-219 软件实验室7-219 软件实验室7-219 软件实验室7-215批改意见成绩 教师签字: 实验内容: 本实验是模拟操作系统的磁盘寻道方式,运用磁盘访问顺序的不同来设计磁盘的调度算法。 实现的磁盘调度算法有FCFS,SSTF,SCAN,CSCAN和NStepSCAN算法。 设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序列。 选择磁盘调度算法,显示该算法的磁道访问顺序,计算出移动的磁道总数和平均寻道总数。 按算法的寻道效率进行排序,并对各算法的性能进行分析比较。 实验要求: 1.详细描述实验设计思想、程序结构及各模块设计思路; 详细描述程序所用数据结构及算法; 明确给出测试用例和实验结果; 为增加程序可读性,在程序中进行适当注释说明; 认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等; 实验报告撰写要求结构清晰、描述准确逻辑性强; 实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。 【实验过程记录(源程序、测试用例、测试结果及心得体会等)】 实验思想: Sort函数实现对数组的排序功能; 随机函数Rand()实现随机产生要进行寻道的磁道号序列; FCFS算法,根据进程请求访问磁盘的先后次序进行调度; SSTF算法,每次访问的磁道与当前磁头所在的磁道距离最近; SCAN算法,磁头自里向外移动,下一个访问的对象在磁道之外,又满足距离最近直至更外的磁盘需要访问时,将磁鼻换为自外向里移动; CSCAN算法同上,磁头单向移动; NStepSCAN算法,将请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次处理这些子队列。而每处理一个队列时有时按SCAN算法,对一个队列处理完后,再处理其他队列。 为磁道访问的平均时间再分配一个数列,从中选取效率最高和最低的算法; 实验代码: #include<stdio.h> #include<stdlib.h> #include<math.h> #defineStart10 #defineEnd100 #defineN2 inta[10]; voidinit() { inti; for(i=0;i<10;i++) { a[i]=rand()%End; printf("随机产生要进行寻道的磁道号序列号为:%d\n",a[i]); } printf("------------------------------------------------------------------------------\n\n\n"); } voidsort() { inti,j,temp; for(i=0;i<10;i++) { for(intj=0;j<9-i;j++) if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1];//大的沉底,小的上浮 a[j+1]=temp; } } } floatFCFS() { inti,c[10],sum=0; intstart=Start; floatavg; for(i=0;i<10;i++) { c[i]=abs(start-a[i]); start=a[i]; sum+=c[i]; //printf("第%d次后磁盘移动的磁道总数为%d:\n",i+1,sum); } printf("FCFS算法移动的磁道总数为:%d\n",sum); avg=float(sum/10.0); returnavg; } floatSSTF() { inti,sum=0,c[10],start=Start,temp,min; floatavg; for(i=0;i<10;i++) { for(intj=0;j<10;j++) { min=abs(a[0]-start); if(abs(a[j]-start)<min) { min=abs(a[j]-start); } temp=j; } i=temp; c[i]=abs(start-a[i]); start=a[i]; sum+=c[i]; } printf("SSTF算法移动的磁道总数为:%d\n",sum); avg=float(sum/10