- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
福州大学阳光学院计算机科学与技术系 240492157 04计(1) 谢微 指导老师:吕书龙 2007年1月22号 摘要: 磁臂调度是指当同时有多个访盘要求时在等待时(每个要求访问一个扇区或一块),对些要求的顺序的确定安排或调整,旨在减少平均磁盘服务时间.磁臂调度由操作系统中的磁盘设备驱动完成,相应的算法称为磁臂调度算法;磁臂调度算法包括两个方面的考虑:首先要根据这些要求所访问的磁道按照某种标准对这些要求排序,旨在减少寻道时间,称为磁臂调度,仅在移动头磁盘中采用;其次对同一磁道我多个要求扇区顺序排列,旨在减少延迟时间,称为扇区排队,仅在无控制器磁道缓冲的系统中采用; 关键词:扫描算法(电梯算法),磁道调度序列,移动磁道数,先向右后向左 一.设计的背景介绍 扫描调度(SCAN Scheduling)算法介绍: 磁头总是 单向移动的,但到达盘边缘则改变方向,磁头移动中为途中的所有请求服务。在下例中,磁头最初向右移动,则SCAN算法产生的顺序是65,67,98,122,124,183,37,14。如果一个请求到达时其要访问的磁道刚好在磁头移动前方,则该请求立即得到服务,反之如果刚好在磁头后,则要等到磁头返回以后再得到响应。 例如:队列=98,183,37,122,14,124,65,67 读写头起始位置:53 实现环境: DOS/WINDOWS2000(XP)平台, VC++编译器 二.设计思路和流程图 2.1 基本思路 本程序的前提是:先向右扫描,再向左扫描; 首先,定义一个有关待访序列的结构体node,包含数据和标志两个成员。且各数据的标志初始为0,表示未被访问过; 第二,将待访序列按从小到大进行排序; 第三,申请一个node型的动态的指针数组空间serial用来存放排序后的序列; 第四,从左向右扫描,输出比当前磁头大且标志为0的磁道号,并将该磁道的标志置1;当扫描到最后一个磁道后,再从右向左扫描,输出比当前磁头小且标志为0的磁道号; 第五,计算移动磁道数:移动的总磁道数为当前磁头与最大的磁道号之间的磁道数加上最大磁道与最小磁道之间的磁道数; 最后,释放serial指针。 2.2数据文件格式说明 (1)输入文件格式如下: track_numbers:18 current_location:53 track_serial: 19 35 25 65………… (2)其中,track_numbers表示待访问的磁道数;current_location 表示磁头当前位置;track_serial表示磁道序列 2.3数据结构定义 typedef struct {//定义序列的结构体,其中data为磁道号,flag为访问状态标志 int data;//磁道号 int flag;//标志 }node; 2.4 流程图向右扫描子流程图 从文件中读入申请访盘要求的磁道总数.并把它放track_numbers,中,读入最初磁头所在的磁道号,读入申请访盘的数组,并存入动态数组serial中.将磁道序列复制到数组queue中,在调用排序子函数。 先定义一个结构体node,定义磁道相关信息 queue[i].datacl N 不访问,i++,移动到下个磁道处,直到 Y queue[i].flag==0 输出该磁道号,并令queue[i].flag=1 Y N 说明该磁道已经被访问过了,i++,访问下个磁道。当访问完最后一个磁道后,计算移动磁道数为当前磁头与最大的磁道号差的绝对值即t=abs(cl-queue[num-1].data)。 向左扫描子流程图 当向右扫描到最后一个磁道后,再从当前位置向左扫描 queue[i].datacl N 不访问,i++,移动到下个磁道处 Y queue[i].flag==0 说明该磁道已被访问过,故不访问,移动到下个磁道处 N Y 说明该磁道未被访问,故对它进行访问,即输出该磁道号,之后将当前磁头移动到下个磁道处。直到所有左边所有待访问的磁道均已被访问。计算整个放盘过程中移动的总磁道数为:t=t+queue[num-1].data-queue[0].data。并将其输出。 三.算法思想 第一,根据磁盘磁道从内到外磁道号由小到大排列的特点,要进行扫描调度,只须把待访问的磁道序列按从小到大的顺序排列,并存入数组serial中; 第二,先定扫描方向为先向右扫描,再向左扫描,故只要进行如下两个两个循环便可实现: ①从最小的磁道号处开始扫描,先判断serial[i].data是否大于当前词磁头cl,若是,再判断serial[i].flag是否为1,是则说明访问过,i++,继
文档评论(0)