广工操作系统课程设计.docx
- 文档编号:2366885
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:19
- 大小:416.46KB
广工操作系统课程设计.docx
《广工操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《广工操作系统课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
广工操作系统课程设计
操作系统课程设计
题目名称仿真各种磁盘调度算法
学院计算机学院
专业软件工程
班别12级4班
学号3112006291
姓名林炳城
指导教师丁国芳
2015年6月27日
仿真各种磁盘调度算法,并进行性能分析
一、设计目的
设计四个算法,分别是先来先服务算法,最短寻道时间优先算法,扫描(SCAN)算法,循环扫描(CSCAN)算法。
由人工输入当前的磁道数和要访问的磁道。
2、设计原理
先来先服务算法(FCFS):
公平,简单,每个进程的请求都能依次得到处理。
没有对寻道优化,平均寻道时间长。
最短寻道时间优先算法(SSTF):
要求访问的磁道是当前磁头所在的磁道最近,每次寻道时间最短,但不能保证平均寻道时间最短。
可能导致一些请求无限期推延,产生饥饿现象。
扫描算法(SCAN):
不仅考虑当前磁道的距离,优先考虑在磁道前进方向的最短时间,排除磁头在盘面上的往复运动,避免了出现“饥饿”现象。
电梯原理。
循环扫描算法(CSCAN):
是SCAN的改良。
磁头改变方向时,以到达请求服务的最短时间。
对中间请求服务更有利,同时消除了对两端请求的不公平。
三、实验环境与工具
(1)计算机及操作系统:
PC机,Win8.1
(2)程序设计语言:
java
(3)编译程序:
eclipse
四、算法流程图
先来先服务算法(FCFS):
最短寻道时间优先算法(SSTF)
五、测试程序结果:
测试数据:
访问磁道一
20
访问磁道二
50
访问磁道三
30
当前的磁道数
40
一次输入要访问的磁道数以及当前的磁道数
选择一:
先来先服务算法(FCFS):
得到的访问顺序以及平均寻道长度为
选择二:
最短寻道时间优先(SSTF)得到的访问顺序以及平均寻道长度为
选择三:
扫描算法(SCAN):
分别采用移动臂向里和移动臂向外,得到的访问顺序以及平均寻道长度为
选择四:
循环扫描算法(SCAN):
分别采用由里向外和由外向里都得到的结果。
由里向外
由外向里
6、性能分析:
从测试结果得到的访问顺序与预期的结果一致,并且经计算从中求出移动距离以及平均寻道长度都正确,符合要求。
这次课设我是用数组来实现的。
从实验的结果得到的数据中也可以看出,光是访问三次磁道,得到的平均磁道数就各不相同,当用户访问的磁道次数频繁且不一致时,好的磁道访问算法才能加快磁道访问的速度。
7、课设感想
从这次课程设计中学到了磁盘的调度算法,以及如何利用各个算法来各种需求的功能,锻炼了自己的编码能力,觉得自己受益良多
8、附录:
(源码以及详细注释)
/**
*先来先服务算法
*@authorLinBingcheng
*
*/
publicclassFCFS{
publicstaticvoidexecate(inta[],intn,intk)//
{
inti,s,sum=0;
intb[]=newint[100];
for(i=0;i //将数组a[]内容复制到另一个数组存放 b[i]=a[i]; s=k;//k表示当前的磁道 for(i=0;i System.out.println("第"+i+1+"次访问的道数: "+b[i]+"====移动距离: " +Math.abs(s-b[i])); sum+=Math.abs(s-b[i]);//Math.abs函数取绝对值,再求和 s=a[i]; } System.out.println("平均寻道长度为: "+sum*1.0/n); System.out.println(); System.out.println("==================================="); System.out.println(); } } /** *最短寻道优先算法 *@authorLinBingcheng * */ publicclassSSTF{ publicstaticvoidexecate(inta[],intn,intk){// inti,j,sum=0,p,s; intb[]=newint[100]; for(i=0;i //将数组a[]内容复制到另一个数组存放 b[i]=a[i]; for(i=n-1;i>=0;i--)//找出与磁头最近的磁道号 { s=b[0]; p=0; for(j=0;j<=i;j++) if(Math.abs(k-b[j]) { s=b[j]; p=j; } b[p]=b[i];//将入已被访问的磁道号的位置转存为未被访问的磁道数 System.out.println("第"+newInteger(n-i)+"次访问的道数: "+s +"====移动距离: "+Math.abs(k-s)); sum+=Math.abs(k-s); k=s;//记录新的当前磁道的位置 } System.out.println("平均寻道长度: "+sum*1.0/n); System.out.println(""); System.out.println("==================================="); } } /** *扫描算法--磁道由里向外 *@authorLinBingcheng * */ publicclassSCAN1{ publicstaticvoidexecate(inta[],intn,intk){// inti,j,sum=0,flag,s,p=0; intb[]=newint[100]; for(i=0;i //将数组a[]内容复制到另一个数组存放 b[i]=a[i]; for(i=n-1;i>=0;i--){ flag=0; for(j=0;j<=i;j++) //找到比当前磁头所在磁道大的磁道号 if(b[j]-k>0){ flag=1; p=j; break; } if(flag==1)//找到比当前磁头所在磁道大且又是距离最近的磁道号,磁臂由里向外移动访问磁道 { s=b[p]; for(j=0;j<=i;j++) if(b[j]>k&&b[j]-k s=b[j]; p=j; } b[p]=b[i]; System.out.println("第"+newInteger(n-i)+"次访问的道数: "+s +"====移动距离: "+Math.abs(k-s)); sum+=Math.abs(s-k); k=s; }//if else//磁头由里向外访问直至再无更外磁道需要访问,磁臂换向为由外向里移动 { s=b[0]; for(j=0;j<=i;j++) if(k-b[j]<=k-s){ s=b[j]; p=j; }//if b[p]=b[i];//将未被访问的磁道号移入已被访问的磁道号的位置 System.out.println("第"+newInteger(n-i)+"次访问的道数: "+s +"====移动距离: "+Math.abs(k-s)); sum+=Math.abs(s-k); k=s; }//else } System.out.println("平均寻道长度: "+sum*1.0/n); System.out.println(""); System.out.println("==================================="); } } /** *扫描算法--磁道由外向里 *@authorLinBingcheng * */ publicclassSCAN2{ publicstaticvoidexecate(inta[],intn,intk){// inti,j,sum=0,p=0,s,flag; intb[]=newint[100]; for(i=0;i //将数组a[]内容复制到另一个数组存放 b[i]=a[i]; for(i=n-1;i>=0;i--){ flag=0; for(j=0;j<=i;j++) //找到比当前磁头所在磁道小的磁道号 if(k-b[j]>0){ flag=1; p=j; break; } if(flag==1)//找到比当前磁头所在磁道小且又是距离最近的磁道号,磁臂由外向里移动访问磁道 { s=b[p]; for(j=0;j<=i;j++) if(b[j] s=b[j]; p=j; } b[p]=b[i]; System.out.println("第"+newInteger(n-i)+"次访问的道数: "+s +"====移动距离: "+Math.abs(k-s)); sum+=Math.abs(s-k); k=s; } else//磁臂有外向里访问直至再无更内磁道需要访问,磁臂换向为由里向外移动 { s=b[0]; for(j=0;j<=i;j++) if(b[j]-k<=s-k){ s=b[j]; p=j; } b[p]=b[i];//将未被访问的磁道号移入已被访问的磁道
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计