磁盘调度实验报告_第1页
磁盘调度实验报告_第2页
磁盘调度实验报告_第3页
磁盘调度实验报告_第4页
磁盘调度实验报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统实验报告实验六:磁盘调度算法一.实验目的复习模拟实现一种磁盘调度算法,进一步加深对磁盘调度效率的理解。二.实验属性该实验为设计性实验。三.实验仪器设备及器材普通PC386以上微机四.实验要求本实验要求2学时完成。本实验要求完成如下任务:(1)建立相关的数据结构,作业控制块、已分配分区及未分配分区(2)实现一个分区分配算法,如最先适应分配算法、最优或最坏适应分配算法(3)实现一个分区回收算法(4)给定一批作业/进程,选择一个分配或回收算法,实现分区存储的模拟管理实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告、实验中认真调试所编代码并进行必要的测试、记

2、录并分析实验结果。实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。五.主要算法分析各个算法分析1 .先来先服务算法(FCFS)先来先服务(FCFS)调度:按先来后到次序服务,未作优化。最简单的移臂调度算法是“先来先服务”调度算法,这个算法实际上不考虑访问者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次序。例如,如果现在读写磁头正在50号柱面上执行输出操作,而等待访问者依次要访问的柱面为130、199、32、159、15、148、61、99,那么,当50号柱面上的操作结束后,移动臂将按请求的先后次序先移到130号柱面,最后到达99号

3、柱面。采用先来先服务算法决定等待访问者执行输入输出操作的次序时,移动臂来回地移动。先来先服务算法花费的寻找时间较长,所以执行输入输出操作的总时间也很长。2 .最短寻道时间优先算法(SSTF)最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个请求先执行的,而不管访问者到来的先后次序。现在仍利用同一个例子来讨论,现在当50号柱面的操作结束后,应该先处理61号柱面的请求,然后到达32号柱面执行操作,随后处理15号柱面请求,后继操作的次序应该是99、130、148、159、199。采用最短寻找时间优先算法决定等待访问者执行操作的次序时,读写磁头总共移动了200多个柱面的距离,与先来先服务

4、、算法比较,大幅度地减少了寻找时间,因而缩短了为各访问者请求服务的平均时间,也就提高了系统效率。但最短查找时间优先(SSTF)调度,FCFS会引起读写头在盘面上的大范围移动,SSTF查找距离磁头最短(也就是查找时间最短)的请求作为下一次服务的对象。SSTF查找模式有高度局部化的倾向,会推迟一些请求的服务,甚至引起无限拖延(又称饥饿)3 .扫描算法(SCAN)SCAN算法又称电梯调度算法。SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于对中间磁道的请求。“电梯调度”算法是从移动臂当前位置开

5、始沿着臂的移动方向去选择离当前移动臂最近的那个柱访问者,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。这好比乘电梯,如果电梯已向上运动到4层时,依次有3位乘客陈生、伍生、张生在等候乘电梯。他们的要求是:陈生在2层等彳f去10层;伍生在5层等待去底层;张生在8层等待15层。由于电梯目前运动方向是向上,所以电梯的形成是先把乘客张生从8层带到15层,然后电梯换成下行方向,把乘客伍生从5层带到底层,电梯最后再调换方向,把乘客陈生从2层送到10层。但是,“电梯调度”算法在实现时,不仅要记住读写磁头的当前位置,还必须记住移动臂的当前前进方向。六、程序代码#include<iostream

6、.h>#include<stdio.h>#include<stdlib.h>voidFCFS(intarray,intm)/先来先服务算法intj,i,now;floatsum=0,avg;cout<<"输入当前的磁道号:"/输入当前磁道号cin>>now;sum=abs(now-array0);cout<<"先来先服务算法(FCFS)调度后的序列为"<<array0<<""/输出磁盘调度序列for(i=0,j=1;j<m;i+,j+)(s

7、um=sum+abs(arrayj-arrayi);cout<<arrayj<<""/输出磁盘调度序列)avg=sum/(m);cout<<endl<<"平均寻道长度:"<<avg<<endl;/输出平均寻道长度/voidSSTF(intarray,intm)/最短寻道时间优先算法inttemp;intk=1;intnow,l,r;inti,j;floatsum=0,avg=0;for(i=0;i<m;i+)for(j=i+1;j<m;j+)if(arrayi>ar

8、rayj)/将磁道号从小到大排序temp=arrayi;arrayi=arrayj;arrayj=temp;cout<<"请输入当前的磁道号:”;输入当前磁道号cin>>now;cout<<"最短寻道时间优先算法(SSTF)调度后的序列为"/输出磁盘调度序列if(arraym-1<=now)/若被访问的下一最大的磁道号不大于当前的磁道号(for(i=m-1;i>=0;i-)cout<<arrayi<<""/输出磁盘调度序列sum=now-arrayi;now=arrayi;

9、elsef(array0>=now)/若被访问的下一最小的磁道号不小于当前的磁道号for(i=0;i<m;i+)cout<<arrayi<<""/输出磁盘调度序列sum=arrayi-now;now=arrayi;else/当前的磁道号的值在若所有被访问的下的磁道号之间while(arrayk<now)/确定当前磁道在已排的序列中的位置k+;l=k-1;r=k;if(now-arrayl)<=(arrayr-now)while(l>=0)先向磁道号减小方向访问cout<<arrayl<<"

10、;"/输出磁盘调度序列sum=sum+now-arrayl;l=l-1;now=array0;for(j=r;j<m;j+)再向磁道号增加方向访问cout<<arrayj<<""/输出磁盘调度序列sum+=arrayj-now;now=arrayelse/先向磁道号增加方向访问while(r<m)cout<<arrayr<<""/输出磁盘调度序列sum+=arrayr-now;now=arrayr;r=r+1;now=arraym-1;for(j=l;j>=0;j-)再向磁道号减

11、小方向访问cout<<arrayj<<""/输出磁盘调度序列sum+=now-arrayj;now=arrayj;avg=sum/(m);cout<<endl<<"平均寻道长度:"<<avg<<endl;输出平均寻道长度/voidSCAN(intarray,intm)/扫描算法inttemp;intk=1;intnow,d,l,r;inti,j;floatsum=0,avg=0;for(i=0;i<m;i+)for(j=i+1;j<m;j+)if(arrayi>ar

12、rayj)/将磁道号从小到大排序temp=arrayi;arrayi=arrayj;arrayj=temp;cout<<"请输入当前的磁道号:"/输入当前磁道号cin>>now;cout<<"请输入当前移动臂的移动的方向(1表示向磁道号增加方向,0表示向磁道号减小方向):"cin>>d;/先要给出当前磁道号和移动臂的移动方向cout<<"扫描算法(SCAN)调度后的序列为"if(arraym-1<=now)/若被访问的下一最大的磁道号不大于当前的磁道号for(i=m-1

13、;i>=0;i-)cout<<arrayi<<""/输出磁盘调度序列sum=now-arrayi;now=arrayi;elseif(array0>=now)/若被访问的下一最小的磁道号不小于当前的磁道号for(i=0;i<m;i+)cout<<arrayi<<""/输出磁盘调度序列sum=arrayi-now;now=arrayi;else/当前的磁道号的值在若所有被访问的下的磁道号之间while(arrayk<now)/确定当前磁道在已排的序列中的位置k+;l=k-1;r=k;s

14、witch(d)case0:/先向磁道号减小方向访问while(l>=0)cout<<arrayl<<""/输出磁盘调度序列sum=sum+now-arrayl;l=l-1;)now=array0;for(j=r;j<m;j+)cout<<arrayj<<""/输出磁盘调度序列sum+=arrayj-now;now=arrayj;break;)case1:/先向磁道号增加方向访问while(r<m)cout<<arrayr<<""/输出磁盘调度序

15、列sum+=arrayr-now;now=arrayr;r=r+1;now=arraym-1;for(j=l;j>=0;j-)cout<<arrayj<<""/输出磁盘调度序列now=arrayj;break;)default:cout<<"输入有误"<<endl;avg=sum/(m);cout<<endl<<"平均寻道长度:"<<avg<<endl;输出平均寻道长度/voidmain()inti,m,n,flag=1,array1

16、00;cout<<"输入磁盘调度序列的个数:";cin>>m;cout<<"分别输入磁盘调度序列:";for(i=0;i<m;i+)cin>>arrayi;do终止"<<endl;先来先服务算法(FCFS)"<<endl;最短寻道时间优先算法(SSTF)"<<endl;最短寻道时间优先算法(SCAN)"<<endl;选择以上的算法:"cout<<"0cout<<"

17、;1cout<<"2cout<<"3cout<<"cin>>n;switch(n)(case0:flag=0;break;/case1:FCFS(array,m);break;/case2:SSTF(array,m);break;/case3:SCAN(array,m);break;/default:cout<<"输入有误,终止程序先来先服务算法(FCFS)最短寻道时间优先算法(SSTF)最短寻道时间优先算法(SCAN)请重新输入:"<<endl;while(flag!=0

18、);七、各算法的流程图.先来先服务算法流程图3,扫描算法流程图八.课程设计运行结果一.运行后的开始界面如下:件的个数:7周度序列二居1429171G:DebuVCppl.ezeFZTftsCsSs>-&sWJnyJ.先.wso?服道道的度盘调酒要先寻寻上磁短以71别终先日E蕈择W分BlZ工选、运行各个算法结果如下八G二yDcbucXCpp1.eie口I*1.运行先来先服务(FCFS)算法调度后程序结果如下:44:>去去s¥nvCF曼CFS小先先1度输止采短期以当先京来短短以别终先曰警取择A膏终先日警军择53<F先先法;照道道的先寻寻上盘磁A道法:服道道的的务长先寻寻上一揣道;号皿53为分电123迈辅,Mi23选71I58924的后度2.运行最短寻道时间优先(SSTF)算法调度程序结果如下:度盘r蔓=LI4B11VIN5lbNSY1<7FT0s0£入利纥先r最均终先最最择1715&?241605屠:篦<F先先2号算,2一.道先33-间度服酒道的一部长在寻寻上当道世苦<F先先一stt,.服道酒的先m上的表布间建道号减小方向、表小回读运

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论