操作系统课程设计--磁盘调度算法实践.docx

上传人:汽*** 文档编号:548425742 上传时间:2023-11-25 格式:DOCX 页数:17 大小:19.38KB
返回 下载 相关 举报
操作系统课程设计--磁盘调度算法实践.docx_第1页
第1页 / 共17页
操作系统课程设计--磁盘调度算法实践.docx_第2页
第2页 / 共17页
操作系统课程设计--磁盘调度算法实践.docx_第3页
第3页 / 共17页
操作系统课程设计--磁盘调度算法实践.docx_第4页
第4页 / 共17页
操作系统课程设计--磁盘调度算法实践.docx_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《操作系统课程设计--磁盘调度算法实践.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计--磁盘调度算法实践.docx(17页珍藏版)》请在金锄头文库上搜索。

1、操作系统课程设计-磁盘调度算法实践操作系统课程设计磁盘调度算法实践系院:信息工程学院学生姓名:耿万德学号:0934110135专业:计算机科学与技术年级:计科0901B完成日期:2011年12月指导教师:刘栓ave=(float)(sum)/(float)(m);5、实验运行图;算法首页1 先来先服务算法2最短寻道时间优先算法(1)当前磁道号大于磁道序列中的最大的磁道号时(2)当前磁道号小于磁道序列中的最小的磁道号时(3)当前磁道号大于磁道序列中的最小的磁道号且小于最大磁道号时3 扫描算法(1)当前磁道号大于磁道序列中的最大的磁道号时(2)当前磁道号小于磁道序列中的最小的磁道号时(3)当前磁道

2、号大于磁道序列中的最小的磁道号且小于最大磁道号(磁头向外)时(4)当前磁道号大于磁道序列中的最小的磁道号且小于最大磁道号(磁头向内)时4 循环扫描算法(1)当前磁道号大于磁道序列中的最大的磁道号时(2)当前磁道号小于磁道序列中的最小的磁道号时(3)当前磁道号大于磁道序列中的最小的磁道号且小于最大磁道号时6、实验结果分析;本系统具有很强的健壮性,当输入错误数据类型时,系统提示用户输入的数据类型错误,让用户重新输入,保证系统的稳定性,不会因为用户的误操作而致使系统瘫痪;虽然是在dos状态下,但是本系统界面还是设计的比较漂亮的,具有比较好的交互性;对于软件中的重用代码,设计成一个函数,实现代码重用。

3、本系统是在dos状态下进行编译执行的,没有图形化界面,可以设计出一个图形化界面,使用户操作更加简单,明了。用户使用时请注意:1、进入系统,用户根据提示依次输入磁道号,要结束时输入“0”,回车,输入磁盘号结束;2、系统输出你输入的磁道序列,用户核对输入数据3、系统显示系统算法菜单;4、用户选择相应算法,回车;5、系统要求输入当前磁道号,用户输入磁道号,回车;6、系统输出磁头的扫描序列和平均寻道长度;7、用户继续选择系统菜单中的算法;8、当用户选择扫描算法时,需要输入磁道的寻道方向(1表示扫描磁道号大的方向,0表示扫描磁道号小的方向);附:1、课程设计的填写请按格式要求做;2、文字内容宋体、五号、

4、1.5倍行距;3、程序代码字体Times New Roman,五号、1.5倍行距;附表:源程序代码#include#include#include#include#define maxsize 1000/*判断输入数据是否有效*/ int decide(char str) /判断输入数据是否有效int i=0;while(stri!=0)if(strireturn 0;break;i+;return i;/*将字符串转换成数字*/int trans(char str,int a) /将字符串转换成数字int i;int sum=0;for(i=0;isum=sum+(int)(stri-0)*

5、pow(10,a-i-1);return sum;/*冒泡排序算法*/int *bubble(int cidao,int m)int i,j;int temp;for(i=0;ifor(j=i+1;jif(cidaoicidaoj)temp=cidaoi;cidaoi=cidaoj;cidaoj=temp;coutfor( i=0;icoutcoutreturn cidao;/*先来先服务调度算法*/ void FCFS(int cidao,int m) /磁道号数组,个数为mint now;/当前磁道号int sum=0; /总寻道长度int j,i;int a;char str100;fl

6、oat ave; /平均寻道长度coutfor( i=0;icoutcoutcoutB: cinstr; /对输入数据进行有效性判断a=decide(str);if(a=0)coutgoto B;elsenow=trans(str,a); /输入当前磁道号sum+=abs(cidao0-now);coutfor( i=0;icoutfor(i=0,j=1;jsum+=abs(cidaoj-cidaoi);ave=(float)(sum)/(float)(m);coutcout/*最短寻道时间优先调度算法*/void SSTF(int cidao,int m)int k=1;int now,l,

7、r;int i,j,sum=0;int a;char str100;float ave;cidao=bubble(cidao,m); /调用冒泡排序算法排序coutC: cinstr; /对输入数据进行有效性判断a=decide(str);if(a=0)coutgoto C;elsenow=trans(str,a); /输入当前磁道号if(cidaom-1coutfor(i=m-1;i=0;i-)coutsum=now-cidao0;if(cidao0=now) /若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务coutfor(i=0;icoutsum=cidaom-1-no

8、w;if(nowcidao0&nowcoutwhile(cidaokk+;l=k-1;r=k;while(l=0)&(rif(now-cidaol)coutsum+=now-cidaol;now=cidaol;l=l-1;elsecoutsum+=cidaor-now;now=cidaor;r=r+1;if(l=-1) /磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道for(j=r;jcoutsum+=cidaom-1-cidao0;else /磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道for(j=l;j=0;j-)coutsum+=cidaom-1-cidao0;ave=(flo

9、at)(sum)/(float)(m);coutcout/*扫描调度算法*/ void SCAN(int cidao,int m) /先要给出当前磁道号和移动臂的移动方向int k=1;int now,l,r,d;int i,j,sum=0;int a;char str100;float ave;cidao=bubble(cidao,m); /调用冒泡排序算法排序coutD: cinstr; /对输入数据进行有效性判断a=decide(str);if(a=0)coutgoto D;elsenow=trans(str,a); /输入当前磁道号if(cidaom-1coutfor(i=m-1;i=

10、0;i-)coutsum=now-cidao0;if(cidao0=now) /若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先coutfor(i=0;icoutsum=cidaom-1-now;if(nowcidao0&nowwhile(cidaokk+;l=k-1;r=k;coutcind;if(d=0) /选择移动臂方向向内,则先向内扫描coutfor(j=l;j=0;j-)coutfor(j=r;jcoutsum=now-2*cidao0+cidaom-1;else /选择移动臂方向向外,则先向外扫描coutfor(j=r;jcoutfor(j=

11、l;j=0;j-) /磁头移动到最大号,则改变方向向内扫描未扫描的磁道coutsum=-now-cidao0+2*cidaom-1;ave=(float)(sum)/(float)(m);coutcout/*循环扫描调度算法*/void CSCAN(int cidao,int m)int k=1;int now,l,r;int i,j,sum=0;int a;char str100;float ave;cidao=bubble(cidao,m); /调用冒泡排序算法排序coutE: cinstr; /对输入数据进行有效性判断a=decide(str);if(a=0)coutgoto E;els

12、enow=trans(str,a); /输入当前磁道号if(cidaom-1coutfor(i=0;icoutsum=now-2*cidao0+cidaom-1;if(cidao0=now) /若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先coutfor(i=0;icoutsum=cidaom-1-now;if(nowcidao0&nowcoutwhile(cidaokk+;l=k-1;r=k;for(j=r;jcoutfor(j=0;jcoutsum=2*cidaom-1+cidaol-now-2*cidao0;ave=(float)(sum)/(float)(m);coutcoutvoid main()int a;int c; /菜单项int cidaomaxsize;int i=0,count;char str100;coutA:cinstr; /对输入数据进行有效性判断a=decide(str);if(a=0)coutgoto A;/输入错误,跳转到A,重新输入elsecidaoi=trans(str,a);i+;while(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号