磁盘调度算法的实现.docx

上传人:大张伟 文档编号:11035762 上传时间:2021-06-19 格式:DOCX 页数:12 大小:97.24KB
返回 下载 相关 举报
磁盘调度算法的实现.docx_第1页
第1页 / 共12页
磁盘调度算法的实现.docx_第2页
第2页 / 共12页
磁盘调度算法的实现.docx_第3页
第3页 / 共12页
磁盘调度算法的实现.docx_第4页
第4页 / 共12页
磁盘调度算法的实现.docx_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《磁盘调度算法的实现.docx》由会员分享,可在线阅读,更多相关《磁盘调度算法的实现.docx(12页珍藏版)》请在三一文库上搜索。

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;wh

3、ile(1) coutendl;cout1cout2cout3cout4cout0、先来先服务算法( FCFS) endl;、最短寻道时间算法( SSTF)endl;、扫描算法( SCAN) endl;、循环扫描算法( CSCAN)endl;、退出 endl;coutendl;couts;if(s4)cout 输入有误! endl;elseswitch(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);br

4、eak;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()%100)+1;coutai ;co

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

6、e 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 ;/ 计算 sum for(i=0,j=1;jn;i+,j+)first+=abs(aj-ai);/外围磁道与最里面磁道的距离sum+=first+abs(now-a0);coutendl;cout 移动的总磁道数:sumendl;/ 最短寻道时间算法( S

7、STF)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 ;sum

8、=an-1-now;elsewhile(ak=0)&(rn)if(now-al)=(ar-now)/选择离磁头近的磁道coutal ;sum+=now-al;now=al;l=l-1;elsecoutar ;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,int n)int temp; in

9、t 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/磁头位置在最里侧磁道与最外侧磁道之间 int d; while(aknow)/确定当前磁

10、道在已排的序列中的位置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 CSCAN(int a,int n)int temp; int now,l,r; int i,j,sum=0;int k=1;for(i=0

11、;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=an-1-now;else /磁头位置在最里侧磁道与最外侧磁道之间 int d; while(aknow)k+;l=k-1;/在磁头位置的前一个欲访问磁道r

12、=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;elsecout请输入 0 或 1! ;coutendl;cout移动的总道数:sumendl;(3)测试结果:1. 先来先服务算法( FCFS)测试结果2. 最短寻道时间算法( SSTF)测试结果3. 循环扫描算法( SCAN)测试结果4. 循

13、环扫描算法( CSCAN)测试结果四、设计总结 :此次设计基本完成了本实验所规定的功能, 但是还不够完善, 很多东西 做的不够好,程序不够完善和严谨。 由于我的编程基础不是很好, 其中不免会 有些纰 漏,出错处理不够完善等多方面问题,这些都有进一步改善。在编程设计过程中,由于不知道怎产生不相等的随机数,以及后来的扫描算法和循环扫描算法计算移动总的磁道数都遇到了一点问题, 通过上网查询, 最后在老师以及同学的指导下很快完成了设计。此次课程设计中我学到了很多东西,无论在理论上还是实践中,都得到不少的提高,这对于我以后的工作和学习都是一种巨大的帮助!(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1