ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:229.39KB ,
资源ID:22743657      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22743657.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统实验磁盘调度扫描算法循环扫描算法Word格式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统实验磁盘调度扫描算法循环扫描算法Word格式.docx

1、2.循环扫描算法(CSCAN算法)CSCAN算法,循环扫描算法,它的思想是,访问完最里面一个要求服务的序列之后,从最外层的序号开始往里走。也就是始终保持一个方向,故称为循环扫描算法。【数据结构和符号说明】(1)数据结构和符号说明编译语言:C+数据结构:结构体数组符号定义: typedef struct Track/磁道结构体 int id;/磁道序列 int state=0;/是否访问过,未被访问置状态为0 Track;Track trackN;/最大磁道数为100Track track1N;/复制的磁道数组用于输出int stepN;/移动距离int num,i,current_track,

2、num1; /当前磁道即部分中间变量函数说明:void init()/初始化程序void input()/输入函数void sort1()/从小到大排序int abs(int a,int b)/相减的绝对值int find_first_bignum()/寻找第一个最大值int find_first_smallnum()/寻找第一个最小值void SCAN(int up_or_down) /扫描算法void CSCAN(int up_or_down) /循环扫描算法void output(Track a)/输出函数void output_average_track()/输出平均寻道时间int s

3、how()/显示用户界面/返回值为输入的选择项流程图:SCAN算法:CSCAN算法(与SCAN算法基本类似):代码:#include#define N 100typedef struct Track int id; int state=0; num=0; for (i=0; inum; i+) tracki.state=-1;/id置为1 track1i.state=-1; stepi=-1;/移动距离为-1 printf(输入当前磁道n); scanf(%d,¤t_track); num1=current_track;输入要访问的磁道数目nnum);输入要访问磁道序列n for(

4、i=0;tracki.id);void FCFS()/先来先服务 if(current_track-tracki.id)0?a-b:b-a;int Serch_min_pos()/寻找到当前磁道最短的需求磁道 int min=45536;/最小距离标志 int pos; for(int i=0; if(tracki.state=1) continue; else if(minabs(tracki.id,current_track)/寻找最小距离 min=abs(tracki.id,current_track); pos=i; trackpos.state=1; return pos;/返回在数

5、组中的位置void SSTF()/最短寻道优先 i+)/计数器 track1i=trackSerch_min_pos();/更新到要输出的数组中 stepi=abs(track1i.id,current_track); current_track= track1i.id;/标志nn n,num1);=n/排班被访问的下一个磁道tt移动距离(磁道数)nt%4dtt|t%4dn,ai.id,stepi); double sum=0;/和 sum+=stepi; 平均寻道长度%3.2fnnn,sum/num);/输出int show()/显示用户界面 int choose;/选择n*早期的磁盘调度算

6、法*ntt1、先来先服务(FCFS)ntt2、最短寻道时间优先(SSTF)ntt3、退出(EXIT)nchoose); return choose;int main() do init(); switch(show()/返回值是选择 case 1:/FCFS input(); FCFS(); output(track); output_average_track(); break; case 2:/最短寻道 SSTF(); output(track1); case 3:/退出 return 0; default: while(1);截图:主界面开始,输入选择先来先服务还是最短寻道优先,输入当前

7、磁道,输入要访问的磁道,输入要访问的磁道序列。SCAN算法输入 当前磁道100 ,9个磁道,分别为55 58 39 18 90 160 150 38 184,此时选择方向向上结果正确。输入 当前磁道100 ,9个磁道,分别为55 58 39 18 90 160 150 38 184,此时选择方向向下CSCAN算法 【小结与讨论】1、扫描算法又称为电梯算法,其原理与电梯运行情况相似,即运行方向上的请求优先,若是访问方向向上,则先依次访问较大的磁道号至顶,再向下访问娇小的磁道号;若是访问方向向下,则先依次访问较小的磁道号至底,再向上访问娇大的磁道号。2、循环扫描算法又称为单向电梯算法,若是访问方向

8、向上,则向上依次访问完较大的磁道号后,返回最低端,依次向上访问较小的磁道号;若是访问方向向下,则向下依次访问完较小的磁道号后,返回最顶端,依次向下访问较大的磁道号。3、此次实验我用两个数组分别存放了一个磁道表和复制的磁道表,根据两个算法的原理,只要将其进行排序,然后分别对两个数组进行正向和逆向的访问即可。4、具体实现时,我将两种算法的两种初始扫描方向写在了一个函数之中,调用时通过参数scan和参数up_or_down设置。并设置了寻找大于当前数组的最近最小值和最近的大值进行选择结果,这是因为初始磁道号将磁道数组分成上下(高低地址)两块,这两块根据不同的扫描方向重新选择高低地址,又结合不同的算法决定正序排列还是反序排列。实现起来还是比较简单的。5、由于CSCAN算法的思想是,访问完最里面一个要求服务的序列之后,从最外层的序号开始往里走。也就是始终保持一个方向。所以如果用循环队列实现,时间复杂度会更低,效率更高。6、此次实验虽然较为简单,但还是发现了自己知识点有些方面的不足,让我更好的了解了磁盘调度的原理,使我收获颇多。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1