




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
移臂调度算法一、实验目的作为操作系统的辅助存储器,用来存放文件的磁盘是一类高速大容量旋转型存储设备,在繁重的I/O设备负载下,同时会有若干传输请求来到并等待处理,系统必须采用一种调度策略,能够按最佳次序执行要求访问的诸多请求,这叫做驱动调度,所使用的算法叫做驱动调度算法。驱动调度算法能减少为若干I/O请求服务所需消耗的总时间,从而提高系统效率。对于磁盘设备,在启动之前按驱动调度策略对访问的请求优化其排序十分必要。除了使旋转圈数达到最少的调度策略外,还应考虑使移动臂的移动时间最短的调度策略。二、实验要求书写实验报告,应该包括以下几项内容:(1) 实验题目;(2) 程序中使用的数据结构及主要符号说明;(3) 程序流程图和带有注释的源程序;(4) 执行程序名,并打印程序运行时的初值和运行结果;(5) 通过实验后的收获与体会及对实验的改进意见和见解。三、程序及主要符号说明(1)先来先服务(FCFS) 这是一种简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。但此算法由于未对寻道进行优化,致使平均寻道时间可能较长。(2)最短寻道时间优先(SSTF) 该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但这种调度算法却不能保证平均寻道时间最短。(3)扫描算法(SCAN) SCAN算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,SCAN算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。四、实验结果1、先来先服务调度(FCFS)2、最短寻道时间优先调度(SSTF)3、扫描调度算法(SCAN)五、实验体会通过这次的实验,更加深入的了解了移臂调度算法的具体过程,运用起来也更加熟练,将课堂上的理论知识得到更好的体现。平时课堂上有些概念理解不清楚,导致在做实验时有点茫然,不知从何下手。 因为知识掌握的不够好,在本次实验中出现了很多问题,不过通过看书和同学的帮助也得以解决。在本次实验中,我收获了很多,做出实验时有种前所未有的成就感。附录:实验源程序#include using namespace std; void CopyL(int Sour,int Dist ,int x); /数组Sour复制到数组Dist,复制到x个数void SetDI(int DiscL); /随机生成磁道数void Print(int Pri,int x); /打印输出数组Pri void DelInq(int Sour,int x,int y); /数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y) void FCFS(int Han,int DiscL); /先来先服务算法(FCFS) void SSTF(int Han,int DiscL); /最短寻道时间优先算法(SSTF)int SCAN(int Han,int DiscL,int x,int y); /扫描算法(SCAN)void CSCAN(int Han,int DiscL); /循环扫描算法(CSCAN) void PaiXu(); /寻道长度由低到高排序void Pri(); int NAll=0; int Best52; /用作寻道长度由低到高排序时存放的数组int Limit=0; /输入寻找的范围磁道数i int Jage; float Aver=0; int main() int i; int DiscLine10; /声明准备要生成的随机磁道号的数组int Hand; /磁道数int Con=1; int n; while(Con=1) Jage=0; cout “请输入初始的磁道数:; int Hand; cout65536) cout超出磁道范围!; elsecout1.先来先服务算法(FCFS )n; cout2.最短寻道时间优先算法(SSTF)n; cout3.扫描算法(SCAN) n; int n;if(n=0) exit(0); coutn; switch(n) case 1: SetDI(DiscLine); /随机生成磁道数FCFS(Hand,DiscLine); /先来先服务算法(FCFS) break; case 2: SetDI(DiscLine); /随机生成磁道数SSTF(Hand,DiscLine); /最短寻道时间优先算法(SSTF) break; case 3: SetDI(DiscLine); /随机生成磁道数SCAN(Hand,DiscLine,0,9); /扫描算法(SCAN) break; SetDI(DiscLine); /随机生成磁道数FCFS(Hand,DiscLine); /先来先服务算法(FCFS) SSTF(Hand,DiscLine); /最短寻道时间优先算法(SSTF) SCAN(Hand,DiscLine,0,9); /扫描算法(SCAN) cout “是否继续(按0结束,按1继续)?; scanf(%5d,&Con); /数组Sour复制到数组Dist,复制到x个数void CopyL(int Sour,int Dist ,int x) int i; for(i=0;i=x;i+) Disti=Souri; /打印输出数组Pri void Print(int Pri,int x) int i; for(i=0;i=x;i+) printf(%5d,Prii); /随机生成磁道数void SetDI(int DiscL) int i;for(i=0;i=9;i+) DiscLi=rand()%Limit;/随机生成10个磁道号 cout 需要寻找的磁道号:; Print(DiscL,9); /输出随机生成的磁道号coutn; /数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y) void DelInq(int Sour,int x,int y) int i; for(i=x;iy;i+) Souri=Souri+1; x+; /先来先服务算法(FCFS) void FCFS(int Han,int DiscL) int RLine10; /将随机生成的磁道数数组Discl复制给数组RLine int i,k,All,Temp; /Temp是计算移动的磁道距离的临时变量All=0; /统计全部的磁道数变量k=9; /限定10个的磁道数CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine coutFCFS访问顺序为:; All=Han-RLine0; for(i=0;i=9;i+) Temp=RLine0-RLine1;/求出移动磁道数前一个磁道数减去后一个磁道数得出临时的移动距离if(Temp0) Temp=(-Temp);/移动磁道数为负数时算出相反数作为移动磁道数printf(%5d,RLine0); All=Temp+All;/求全部磁道数的总和DelInq(RLine,0,k);/每个磁道数向前移动一位k-; BestJage1=All;/Best1存放移动磁道数BestJage0=1; /Best0存放算法的序号为:1 Jage+;/排序的序号加1 Aver=(float) All)/10;/求平均寻道次数cout 移动磁道数: All; cout 平均寻道长度:*%0.2f* Aver; /最短寻道时间优先算法(SSTF) void SSTF(int Han,int DiscL) int i,j,k,h,All; int Temp; /Temp是计算移动的磁道距离的临时变量int RLine10; /将随机生成的磁道数数组Discl复制给数组RLine int Min; All=0; /统计全部的磁道数变量k=9; /限定10个的磁道数CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine cout SSTF访问顺序为:; for(i=0;i=9;i+) Min=64000; for(j=0;jHan) /如果第一个随机生成的磁道号大于当前的磁道号,执行下一句Temp=RLinej-Han; /求出临时的移动距离else Temp=Han-RLinej; /求出临时的移动距离if(TempMin) /如果每求出一次的移动距离小于Min,执行下一句 Min=Temp; /Temp临时值赋予Min h=j; /把最近当前磁道号的数组下标赋予h All=All+Min; /统计一共移动的距离printf(%5d,RLineh); Han=RLineh; DelInq(RLine,h,k); /每个磁道数向前移动一位k-; BestJage1=All;/Best1存放移动磁道数BestJage0=2;/Best0存放算法的序号为:2 Jage+;/排序序号加1 Aver=(float)All)/10;/求平均寻道次数printf(n+ 移动磁道数: ,All); printf(n+ 平均寻道长度:*%0.2f* ,Aver); /扫描算法(SCAN) int SCAN(int Han,int DiscL,int x,int y) int j,n,k,h,m,All; int t=0; int Temp; int Min; int RLine10; /将随机生成的磁道数数组Discl复制给数组RLine int Order; Order=1; k=y; m=2; /控制while语句的执行,即是一定要使当前磁道向内向外都要扫描到All=0; /统计全部的磁道数变量CopyL(DiscL,RLine,9);/复制磁道号到临时数组RLine coutSCAN访问顺序为:; Min=64000; for(j=x;jHan)/如果第一个随机生成的磁道号大于当前的磁道号,执行下一句Temp=RLinej-Han; /求出临时的移动距离else Temp=Han-RLinej; /求出临时的移动距离if(Temp=Han) /判动方向,即是由里向外还是由外向里断磁道的移Order=0; t=1; Han=RLineh; DelInq(RLine,h,k); /每个磁道数向前移动一位k-; while(m0) if(Order=1) /order是判断磁盘扫描的方向标签,order是1的话,磁道向内移动 for(j=x;j=y;j+) h=-1; Min=64000; for(n=x;n=k;n+) /判断离当前磁道最近的磁道号 if(RLinen=Han) Temp=Han-RLinen; if(TempMin) Min=Temp; /Temp临时值赋予Min h=n; /把最近当前磁道号的数组下标赋予h if(h!=-1) All=All+Min; /叠加移动距离printf(%5d,RLineh); Han=RLineh; /最近的磁道号作为当前磁道DelInq(RLine,h,k); k-; Order=0; /当完成向内的移动,order赋予0,执行else语句,使磁道向外移动m-; /向内完成一次,m减一次,保证while循环执行两次 else /order0的话,磁道向外移动 for(j=x;j=y;j+) h=-1; Min=64000; for(n=x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设计公司工资管理制度
- 2025年中国激光导航扫地机器人行业市场全景分析及前景机遇研判报告
- 评审医疗废物管理制度
- 诊所排污登记管理制度
- 诊断试剂购进管理制度
- 财务租赁合同管理制度
- 财政所应收款管理制度
- 货代公司收款管理制度
- 货物内部流转管理制度
- 货站装卸安全管理制度
- lcd制造工艺流程
- 2024届北京市石景山区七年级生物第二学期期末学业水平测试模拟试题含解析
- 《数据中心液冷系统技术规程》
- 人教版八年级日语单词表
- 射波刀技术的质量保证课件
- 建筑施工安全管理及扬尘治理检查投标方案(技术方案)
- 医院耗材SPD解决方案(技术方案)
- 09X700 智能建筑弱电工程设计与施工(上册)
- 【语文】浙江省杭州市西湖小学小学二年级下册期末试卷(含答案)
- 公安院校公安专业招生政治考察表(双面打印)
- 全国高中青年数学教师优质课大赛一等奖《导数的概念》课件
评论
0/150
提交评论