网站大量收购独家精品文档,联系QQ:2885784924

磁臂调度—先来先服务算法.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
磁臂调度—先来先服务算法

磁臂调度—先来先服务算法 福州大学阳光学院 03-3 林飞鹏 240390742 指导老师:吕书龙 摘要: 磁臂调度是指当同时有多个访盘要求时在等待时,对这些要求的顺序的确定安排或调整,旨在减少平均磁盘服务时间.磁臂调度由操作系统中的磁盘设备驱动完成,相应的算法称为磁臂调度算法;磁臂调度算法包括两个方面的考虑:首先要根据这些要求所访问的磁道按照某种标准对这些要求排序,旨在减少寻道时间,称为磁臂调度,仅在移动头磁盘中采用;其次对同一磁道我多个要求扇区顺序排列,旨在减少延迟时间,称为扇区排队,仅在无控制器磁道缓冲的系统中采用; 关键词: 磁臂调度 先来先服务 一.设计的背景介绍 1.1先来先服务是指是指按申请扫描的先后顺序进行扫描.是最简单的磁臂调度算法,易于编程,而且公平,但平均而言却不能提供很好的服务.存在磁头疯狂移动,平均服务时间长,磁盘吞吐量小等问题. 1.2算法介绍:根据申请扫描的时间先后依次对其进行扫描.例如一个磁盘请求队列为:98,183,37,122,124,65,67,88,99,58,69 其最后扫描的序列也是: 98,183,37,122,124,65,67,88,99,58,69; 二.设计思路和总体流程图 2.1 基本思路 从文件中读入磁盘请求队列.根据先来先服务算法知道其既为最后磁头所扫描经过的路径;所以最后的扫描序列就是磁盘请求队列.磁头移动的总路程就是:当前磁头所在的磁道号和序列中第一个磁道号差的绝对值,加上第二个和第一个差的绝对值,以此类推加到倒数第一个和倒数第二个的差的绝对值. 2.4 总体流程图 * * 1.3实现环境:DOS/WINDOWS平台,TC2.0/3.0/VC++ LINUX平台,VI/EMACS等编辑器,CC/GCC编译器 2.2 数据文件格式说明 文件格试如下: tracknum:9 current:90 currents:98,183,37,122,124,65,67, 88,99,58,69 其中tracknum:是代表请求访问的磁道总数. current:是代表磁头最初所在的磁道号. currents:是代表申请访问的磁道序列; 2.3 数据结构定义 磁道访问结构: typedef struct { int tracknum,current;//申请访问的磁道数量,磁头最初所在的磁道号; int *currents;//一个动态的指针用来存放申请访问的磁道序列; }TRACK; 从文件中读入的一组数据已经放在动态数数comerow中,定义最后的位移用shift表示,并赋给其初值为0 用一个FOR语句把动态数组currents中的内容按currents+i输出 ,其中i从0到num-1,当输出一个时,并把相应的磁道号付给当前的磁头所在的磁道号,并且a=abs( current-*( currents+i)) shift+=a i tracknum Y 输出shift=多少并返回主函数 N 图一 总体流程图 (1):从文件中读入数据模块 i=0; *(Track.currents+i)=从文件中读入数据 Itrack.tracknum 输出currents的内容并进入下一个模块 图二 从文件中读入数据模块图 分为二个模块 i++ Y N (2)计算位移和最后磁头移动路线的模块 i=0; a=abs( current-*( currents+i)) shift+=a current=*(currents+i) Itrack.tracknum 输出shift 就是磁头移动的总距离,并返回 图三 计算位移和最后磁头移动路线的模块图 i++ Y N 三.算法的实现: 3.1 第一个模块算法实现: if (argc!=2) {printf(error\n); exit(0);} if((file=fopen(argv[1],r))==NULL) printf(read file failed\n); else fscanf(file,%9s%d,temp,track.tracknum); fscanf(file,%8s%d,temp,track.current); fscanf(file,%12s,temp); track.currents=(int*)malloc(sizeof(int) *track.tracknum); for(i=0;itrack.tracknum;i++) {fscanf(file,%d,track.currents+i); } pri

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档