磁盘调度算法仿真.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
磁盘调度算法仿真

磁盘调度算法的模拟 实验要求: 请分别用SCAN和SSTF模拟磁盘调度,并打印出磁盘磁道的调度顺序。 磁头的方向可以动态的规定 磁道请求个数及序列可以动态地写入 总结收获体会及对该题解的改进意见和见解 (一)分析题意得模型 (一)分析题意得模型 利用数组相关知识 SCAN算法: 先将请求的磁道序列排序,以当前磁道号将该序列分界,根据当前磁道移动方向决定 先读左边的还是先读右边的 SSTF算法: 先将请求的磁道序列排序,以当前磁道号将该序列分界,然后当前磁道号分别与左边、右边磁道作差比较,选作差最小的,也即最短的。并修改当前磁道号及其访问位(1为已访问完,0为未访问)。(注:还要考虑左边或右边没有磁道的情况,如何确定所要与之比较的磁道) 利用数组相关知识 (二)写主要算法思路 (二)写主要算法思路 详见源程序及注释分类 详见源程序及注释分类 (三)调试运行(多种情况都要运行) (三)调试运行(多种情况都要运行) (图SSTF1. 当前磁道号在已排序的磁道请求序列 中间 的运行结果) (图SSTF2 当前磁道号在已排序的磁道请求序列 最右边 的运行结果) (图SSTF2 当前磁道号在已排序的磁道请求序列 最左边 的运行结果) (四) (四)体会 1.先找到问题思路,然后运用所学知识, 1.先找到问题思路,然后运用所学知识,SCAN算法用数组实现较为简单,问题不大。 2. SSTF算法的情况分类需花点脑子,只需让当前磁道号分别与左边、右边磁道作差比较,用数组实现还需再加一个数组设置该磁道是否被访问,若用双向链表实现,可把已访问的磁道号释放掉,只需让当前磁道号分别与前驱、后驱磁道作差比较,用链表实现可减少用数组实现时不断去判断该磁道是否访问的时间。在这一方面,双向链表实现应该会比数组实现更有效率。 SCAN源代码: #includestdio.h void main() { int m=0,n,Seek[100],SCurrent,t,i=0,j,k,option; printf(请输入当前的磁道号:); scanf(%d,SCurrent); printf(\n----1.向磁道号增加的方向访问\t2.向磁道号减少的方向访问----\n); printf(---请选择的当前磁头移动方向(1/2):); scanf(%d,option); printf(\n请输入磁道请求序列(以-999结束):\n); scanf(%d,n); while(n!=-999) { Seek[i]=n; m++;i++; scanf(%d,n); } /* 冒泡排序 使磁道请求序列从小到大排序 */ for(j=0;jm-1;j++) { for(i=0;im-1-j;i++) if(Seek[i]Seek[i+1]) { t=Seek[i]; Seek[i]=Seek[i+1]; Seek[i+1]=t; } } /* 找到当前磁道号在磁道请求序列中的排序位置 */ k=0; for(i=0;im;i++) { if(Seek[i]SCurrent) k++; else break; } printf(\n--------------扫描(SCAN)算法后的磁盘调度序列----------\n); /* 第一种: 当前磁道号先向外再向里读 */ if(option==1) { for(i=k;im;i++) printf(%5d,Seek[i]); for(i=k-1;i=0;i--) printf(%5d,Seek[i]); } /* 第二种: 当前磁道号先向里再向外读 */ if(option==2) { for(i=k-1;i=0;i--) printf(%d ,Seek[i]); for(i=k;im;i++) printf(%5d,Seek[i]); } printf(\n); } SSTF源代码: #includestdio.h void main() { int m=0,n,Seek[100],Flag[100],SCurrent,t,i=0,j,k,i0,j0; printf(请输入当前的磁道号:); scanf(%d,SCurrent); printf(\n请输入磁道请求序列(以-999结束):\n); scanf(%d,n); while(n!=-999) { Seek[i]=n; m++;i++; scanf(%d,n); } /* 初始化 置对应的磁道访问位为零 */ fo

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档