您好,欢迎访问三七文档
磁盘调度算法2学号:___姓名:班级:指导老师:2014年3月18日目录1.课设简介1.1课程设计目的1.2设计内容1.3设计要求2.实验原理2.1实验流程图2.2扫描算法和循环扫描算法3.程序主界面3.1开始界面3.2循环扫描算法界面3.3扫描算法(向内寻道)界面3.4扫描算法(向外寻道)界面4.程序代码5.课程设计总结及体会11.1课程设计目的:操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。(1)进一步巩固和复习操作系统的基础知识。(2)培养学生结构化程序、模块化程序设计的方法和能力。(3)提高学生调试程序的技巧和软件设计的能力。(4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。1.2设计内容:设计并实现一个本别利用下列磁盘调度算法进行磁盘调度的模拟程序。(1)扫描算法(2)循环扫描算法1.3设计要求:1.磁头初始磁道号,磁头初始运动方向,序列长度,磁道号序列等数据可从键盘输入,也可从文件读入。2.最好能实现磁道号序列中磁道号的动态增加。3.磁道访问序列以链表的形式存储。4.给出各磁盘调度算法的调度顺序和平均寻道长度。22.1设计流程图:2.2扫描算法和循环扫描算法1、扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。开始手动输入磁道选择调度算法SCAN算法CSCAN算法显示运行结果结束向内寻道向外寻道32、循环扫描算法(CSCAN)循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。3.1开始界面:3.2输入界面:3.3扫描算法43.3扫描算法(向内寻道):3.4扫描算法(向外寻道):53.5循环算法四程序代码:#includeiostream#includecmath6usingnamespacestd;voidSCAN1(intb[],intn,intk)//扫描算法{inti,j,s,sum=0,p,biaoji;inta[20];for(i=0;in;i++)a[i]=b[i];for(i=n-1;i=0;i--){biaoji=0;for(j=0;j=i;j++)if(a[j]-k0){biaoji=1;p=j;break;}if(biaoji==1){s=a[p];7for(j=0;j=i;j++)if(a[j]k&&k-a[j]k-s){s=a[j];p=j;}a[p]=a[i];cout第n-i次访问的磁道:sendl;sum+=k-s;k=s;}else{s=a[0];for(j=0;j=i;j++)if(a[j]-k=s-k){s=a[j];p=j;}a[p]=a[i];8cout第n-i次访问的磁道:sendl;sum+=abs(k-s);k=s;}}cout平均寻道长度:sum*1.0/nendl;}voidSCAN2(intb[],intn,intk)//循环算法{inti,j,s,sum=0,p,biaoji;inta[20];for(i=0;in;i++)a[i]=b[i];for(i=n-1;i=0;i--){biaoji=0;for(j=0;j=i;j++)if(a[j]-k0)9{biaoji=1;p=j;break;}if(biaoji==1){s=a[p];for(j=0;j=i;j++)if(a[j]k&&a[j]-ks-k){s=a[j];p=j;}a[p]=a[i];cout第n-i次访问的磁道:sendl;sum+=s-k;k=s;}else{10s=a[0];for(j=0;j=i;j++)if(k-a[j]=k-s){s=a[j];p=j;}a[p]=a[i];cout第n-i次访问的磁道:sendl;sum+=abs(k-s);k=s;}}cout平均寻道长度:sum*1.0/nendl;}voidC_SCAN(intb[],intn,intk)//循环算法{inti,j,s,sum=0,p,biaoji;inta[20];for(i=0;in;i++)a[i]=b[i];11for(i=n-1;i=0;i--){biaoji=0;for(j=0;j=i;j++)if(a[j]-k0){biaoji=1;p=j;break;}if(biaoji==1){s=a[p];for(j=0;j=i;j++)if(a[j]k&&a[j]-ks-k){s=a[j];p=j;}a[p]=a[i];cout第n-i次访问的磁道:sendl;sum+=s-k;12k=s;}if(biaoji==0)break;}s=a[0];for(j=0;j=i;j++)if(a[j]=s){s=a[j];p=j;}a[p]=a[i];cout第n-i次访问的磁道:sendl;sum+=k-s;k=s;i--;for(;i=0;i--){s=a[0];for(j=0;j=i;j++)13if(a[j]-ks-k){s=a[j];p=j;}a[p]=a[i];cout第n-i次访问的磁道:sendl;sum+=s-k;k=s;}cout平均寻道长度:sum*1.0/nendl;}voidmain(){inta[20];inti,n,k,k1,init;cout请输入需要访问的磁道总数:;cinn;14for(i=0;in;i++){cout需要访问的磁道i+1:;cina[i];}cout请输入当前所在的磁道:;cininit;k=1;while(k){cout----------------------------------endl;cout1.扫描算法(SCAN)endl;cout2.循环算法(CSCAN)endl;cout0.退出endl;cout----------------------------------endl;cout请在下面输入您的选择:endl;cink;switch(k){15case1:k1=1;while(k1){cout*********************************endl;cout1.由内向外(199-》0)endl;cout2.由外向内(0-》199)endl;cout0.返回上一层endl;cout*********************************endl;cout请在下面输入您的选择:;cink1;switch(k1){case1:SCAN1(a,n,init);break;case2:SCAN2(a,n,init);break;16}}break;case2:C_SCAN(a,n,init);break;}}}五.课程设计总结及体会:通过本次课设,我对操作系统磁盘调度扫描算法及循环扫描算法有了更深的理解,并且巩固了操作系统课程学习。通过对磁盘序列的手动输入实现对磁盘调度的优化,让我认识到扫描算法与循环算法的区别,更加深刻的理解这两个算法。六.参考文献《计算机操作系统》西安电子科技大学出版社《c++语言程序设计基础》电子工业出版社
本文标题:磁盘调度算法
链接地址:https://www.777doc.com/doc-2340386 .html