磁盘调算法的实现_第1页
磁盘调算法的实现_第2页
磁盘调算法的实现_第3页
磁盘调算法的实现_第4页
磁盘调算法的实现_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、1、 实验目的: 通过模拟设计磁盘驱动调度程序,观察驱动调度程序的动态运行过程,理解和掌握磁盘驱动调度的职能,并比较各种算法的调度结果。 二、实验内容: 要求设计主界面能灵活选择某算法,且以下算法都要实现。 (1)先来先服务算法(FCFS) (2)最短寻道时间优先算法(SSTF) (3)扫描算法(SCAN) (4)循环扫描算法(CSCAN) 三、实验步骤(1) 需求分析: 本设计中可在运行时随机产生一个请求序列,先把序列排序,以方便找 到下一个要寻找的磁道。要求用户选择磁头移动方向,向里和向外移动用1和0表示,若输入值不为0或1,则报错。选择某种调度算法后,要求显示调度顺序和移动的总磁道数。(

2、2)详细设计: void FCFS(int a,int n);/先来先服务算法void SSTF(int a,int n);/最短寻道时间算法void SCAN(int a,int n);/扫描算法void CSCAN(int a,int n);/循环扫描算法int main() int n;/磁道的个数 int s;/功能号 cout请输入磁道的个数:n; int *a=new intn; cout生成随机磁道号.endl; srand(unsigned)time(NULL); for(int i=0;in;i+) ai=(rand()%100)+1; coutai ; coutendl;

3、while(1) coutendl; cout1、先来先服务算法(FCFS)endl; cout2、最短寻道时间算法(SSTF)endl; cout3、扫描算法(SCAN)endl; cout4、循环扫描算法(CSCAN)endl; cout0、退出endl; coutendl; couts; if(s4) cout输入有误!endl; else switch(s) case 0: exit(0);break ; case 1:FCFS(a,n); break; case 2:SSTF(a, n);break; case 3:SCAN(a, n);break; case 4:CSCAN(a,n

4、);break; return 0; 实验源代码 #include#includeusing namespace std; void FCFS(int a,int n);void SSTF(int a,int n);void SCAN(int a,int n);void CSCAN(int a,int n);int main() int n;/磁道的个数 int s;/功能号 cout请输入磁道的个数:n; int *a=new intn; cout生成随机磁道号.endl; srand(unsigned)time(NULL); for(int i=0;in;i+) ai=(rand()%10

5、0)+1; coutai ; coutendl; while(1) coutendl; cout1、先来先服务算法(FCFS)endl; cout2、最短寻道时间算法(SSTF)endl; cout3、扫描算法(SCAN)endl; cout4、循环扫描算法(CSCAN)endl; cout0、退出endl; coutendl; couts; if(s4) cout输入有误!endl; else switch(s) case 0: exit(0);break ; case 1:FCFS(a,n); break; case 2:SSTF(a, n);break; case 3:SCAN(a, n

6、);break; case 4:CSCAN(a,n);break; return 0; /先来先服务调度算法(FCFS)void FCFS(int a,int n)int sum=0,j,i,first=0,now;coutnow;/确定当前磁头所在位置cout磁盘调度顺序为:endl;for( i=0;in;i+)/按访问顺序输出磁道号coutai ;/计算sumfor(i=0,j=1;jn;i+,j+) first+=abs(aj-ai);/外围磁道与最里面磁道的距离 sum+=first+abs(now-a0);coutendl;cout移动的总磁道数: sumendl;/最短寻道时间算

7、法(SSTF)void SSTF(int a,int n)int temp;int k=1;int now,l,r;int i,j,sum=0;/将磁道号按递增排序for(i=0;in;i+)for(j=i+1;jaj) temp=ai; ai=aj; aj=temp; cout按递增顺序排好的磁道:endl;for( i=0;in;i+)coutai ;/输出排好的磁道顺序coutendl;coutnow;/确定当前磁头所在位置cout磁盘调度顺序为:endl;if(an-1=0;i-) coutai=now)/当前磁头位置小于最里欲访问磁道 for(i=0;in;i+) coutai ;

8、sum=an-1-now; else while(ak=0)&(rn) if(now-al)=(ar-now)/选择离磁头近的磁道 coutal ; sum+=now-al; now=al; l=l-1; else coutar ; sum+=ar-now; now=ar; r=r+1; if(l=-1)/磁头位置里侧的磁道已访问完 for(j=r;jn;j+)/访问磁头位置外侧的磁道 coutaj-1;j-) /访问磁头位置里侧的磁道 coutaj ; sum+=an-1-a0; coutendl; cout移动的总道数:sumendl;/扫描算法(SCAN)void SCAN(int a,

9、int n)int temp;int k=1;int now,l,r;int i,j,sum=0;for(i=0;in;i+)/对访问磁道按由小到大顺序排列输出 for(j=i+1;jaj) temp=ai; ai=aj; aj=temp; cout按递增顺序排好的磁道:endl;for( i=0;in;i+)coutai ;coutendl;coutnow;/以下算法确定磁道访问顺序 if(an-1=0;i-) coutai=now) /磁头位置小于最里欲访问磁道 for(i=0;in;i+) coutai ; sum=an-1-now; else /磁头位置在最里侧磁道与最外侧磁道之间 i

10、nt d; while(aknow) /确定当前磁道在已排的序列中的位置 k+; l=k-1;/在磁头位置的前一个欲访问磁道 r=k; /磁头欲访问磁道 coutd; /确定磁头访问的方向 cout=0;j-) coutaj ; for(j=r;jn;j+) coutaj ; sum=now-2*a0+an-1; if(d=1) /磁头向外 for(j=r;jn;j+) coutaj=0;j-) coutaj ; sum=2*an-1-now-a0; elsecout请输入0或1!endl; coutendl; cout移动的总道数: sumendl;/循环扫描算法(CSCAN)void CS

11、CAN(int a,int n)int temp;int now,l,r;int i,j,sum=0;int k=1;for(i=0;in;i+)/对访问磁道按由小到大顺序排列输出 for(j=i+1;jaj) temp=ai; ai=aj; aj=temp; cout按递增顺序排好的磁道:endl; for( i=0;in;i+) coutai ; coutendl;coutnow;/确定当前磁道号if(an-1=now)/磁头位置大于最外围欲访问磁道 for(i=0;in;i+) coutai=now)/磁头位置小于最里欲访问磁道 for(i=0;in;i+) coutai ; sum=a

12、n-1-now; else /磁头位置在最里侧磁道与最外侧磁道之间 int d; while(aknow) k+; l=k-1;/在磁头位置的前一个欲访问磁道 r=k; /磁头欲访问磁道 coutd; /确定磁头访问的方向 cout磁盘调度顺序为:; if(d=0|d=1) if(d=1) /磁头向外侧访问 for(j=r;jn;j+)/先访问外侧磁道再转向最里欲访问磁道 coutaj ; for(j=0;jr;j+) coutaj=0;j-) coutaj=r;j-)/ coutaj ; sum=2*an-1-2*a0+now-ar; else cout请输入0或1!; coutendl; cout移动的总道数: sumendl;(3)测试结果:1.先来先服务算法(FCFS)测试结果2.最短寻道时间算法(SSTF)测试结果3.循环扫描算法(SCAN)测试结果4.循环扫描算法(CSCAN)测试结果四、设计总结: 此次设计基本完成了本实验所规定的功能,但是还不够完善,很多东西 做的不够好,程序不够完善和严谨。

温馨提示

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

评论

0/150

提交评论