模拟实现磁盘调度算法_第1页
模拟实现磁盘调度算法_第2页
模拟实现磁盘调度算法_第3页
模拟实现磁盘调度算法_第4页
模拟实现磁盘调度算法_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实用标准文案操作系统课程实验实验课题:模拟实现磁盘调度算法姓 名: *号:年级班级: 08 级信息与计算科学教学班级:操作系统专业方向: 08 信本软件方向精彩文档实用标准文案指导教师:实验时间: 2010-12-9一、实验名称 :模拟实现磁盘调度算法1 实验目的 : a 、观察、体会操作系统的磁盘调度方法,并通过一个简单的磁 盘调度模拟程序的实现,加深对磁盘调度的理解。 b 、提高实际动手编程能力, 为日后从事软件开发工作打下坚实基础。2 实验要求 : a、使用模块化设计思想来设计。 b 、给出主函数和各个算法函 数的流程图。 c、学生可按照自身条件,随意选择采用的算法。二、实验算法分析 总

2、流程图精彩文档实用标准文案三、实验内容及实验步骤1 实验内容a、模拟实现磁盘调度算法: FCFS,最短寻道优先,电梯算法(实现其中之 一种以上)。b 、磁道请求服务顺序由用户输入(可通过从指定的文本文件( TXT 文件)中取出)。2 实验步骤1) 打开 microsoft vasual C+ 6.0“开始”菜单 所有程序单击“ microsoft vasual C+ 6.0 ”,进入创建页面。2)单击标题栏“文件”选择“新建”进入界面如下:选择工程, win32 console application 编辑工程名称 zhuxuemin4 存储在 d 盘,创建创建新工作区确定。3)创建文件:单击

3、标题栏“文件”选择“新建”进入界面类似于上面的界面。4)在建好的文件中加入附件中的源程序,并进行编译。四、实验原始记录及结果分析精彩文档实用标准文案1 先来先服务调度算法2 最短寻道优先调度算法3 电梯调度算法精彩文档实用标准文案精彩文档实用标准文案五、参考代码#include#include#include#includeconst int MAXQUEUE=200; / 定义请求队列最大长度 / 磁道号请求结构体定义 typedef struct TRACK_Node int iGo; / 要访问的磁道号int iVisited; / 磁道是否已经访问标志( 1 :已访问; 0 :末访问)

4、 TRACK;TRACK queueMAXQUEUE; / 磁道号请求队列数组int iReqNum=0;/ 磁道访问请求数int iStart=0; / 磁头初始位置int iNow=0;/ 磁头当前位置int iSum=0;/ 总移动磁道数int iInput;/ 用户当前输入的整数char sFileName20; / 文件名void Init() / 初始化函数精彩文档实用标准文案int i;for(i=0;iMAXQUEUE;i+) queuei.iGo=-1;/ 设置要访问的磁道号为不可能的数 -1 ,以区别正常请求磁道号 queuei.iVisited=0; / 设置磁道是否已经

5、访问标志为 0 :末访问 /void Init() void Reset() / 重置访问标志、磁头当前位置、总移动磁道数 int i;for(i=0;iiReqNum;i+) queuei.iVisited=0; / 设置磁道是否已经访问标志为 0 :末访问 printf( n请输入磁头的初始磁道号(整数) : );scanf(%d,&iStart); / 从标准输入获取用户当前输入的磁头初始位置iNow=iStart;/ 磁头当前位置iSum=0;/ 总移动磁道数 /void Reset()int ReadTrackFile() /读入磁道号流文件 FILE *fp;int iTemp;c

6、outsFileName;/ 从标准输入获取用户当前输入的文件名if(fp=fopen(sFileName,r)=NULL) coutendl错误: 磁道号流文件 sFileName 打不开, 请检查文件名和路径 !endl;return -1; else while(!feof(fp) /将文件中输入的磁道号依次存入磁道号请求队列数组 fscanf(fp,%d ,&iTemp);精彩文档实用标准文案queueiReqNum.iGo=iTemp;iReqNum+; / 磁道访问请求数 /if(fp=fopen(sFileName,r)=NULL)return 0; /void ReadTrac

7、kFile()void FCFS() / 先来先服务调度算法int i;Reset(); / 重置访问标志、磁头当前位置、总移动磁道数coutendlendl;cout先来先服务调度算法的调度结果 : endlendl;cout 初始磁道号 : iStartendl;cout序号 下一磁道号 移动的磁道数 endl;for(i=0;iiReqNum;i+) cout i+1 queuei.iGo abs(queuei.iGo-iNow)endl;iSum+=abs(queuei.iGo-iNow);/ 累加总移动磁道数iNow=queuei.iGo;/ 设置磁头当前位置为当前访问磁道号 cou

8、tendl总调度次数 : iReqNumendl;coutendl总移动磁道数 : iSumendl;printf(n平 均 移 动 磁 道 数 : %.2fnn,(float)iSum / (float)iReqNum); /voidFCFS() void SSTF() / 最短寻道优先调度算法 int i,j;精彩文档实用标准文案int iNext;/ 下一磁道号Reset(); / 重 置 访 问 标 志 、 磁 头 当 前 位 置 、 总 移 动 磁 道 数 coutendlendl;coutendlendl;cout最短寻道优先调度算法的调度结果 : endlendl;cout 初始

9、磁道号 : iStartendl;cout序号 下一磁道号 移动的磁道数 endl;for(i=0;iiReqNum;i+) iNext=0;while(queueiNext.iVisited!=0) / 跳过已访问的磁道号 iNext+; /whilefor(j=iNext;jabs(iNow-queuej.iGo) iNext=j; /for(j=iNext;jiReqNum;j+)cout i+1 queueiNext.iGo abs(queueiNext.iGo-iNow)endl;iSum+=abs(queueiNext.iGo-iNow); / 累加总移动磁道数queueiNext

10、.iVisited=1;/ 设置磁道是否已经访问标志为 1 :已访问iNow=queueiNext.iGo;/ 设置磁头当前位置为当前访问磁道号精彩文档实用标准文案 /for(i=0;iiReqNum;i+)coutendl总调度次数 : iReqNumendl;coutendl总移动磁道数 : iSumendl;printf(n 平均移动磁道数 : %.2fnn,(float)iSum / (float)iReqNum); /void SSTF()void SCAN() / 电梯调度算法 int i,j;int iNext;/ 下一磁道号int iMinMove;/ 当前方向上最短寻道距离c

11、outendlendl;coutendl 请选择磁头初始方向( 1 OR 2 ): endlendl;cout 1 磁头初始向内 endlendl 2 磁 头 初 始 向 外 endlendliInput; / 从标准输入获取用户当前输入的整数switch(iInput)/ 用户当前输入的整数case 1:/ 磁头初始向内Reset(); / 重置访问标志、磁头当前位置、总移动磁道数 coutendlendl;cout 电梯调度算法 - 磁头初始向内的调度结果 : endlendl;cout 初始磁道号 : iStartendl;cout 序号 下一磁道号 移动的磁道数 endl;for(i=

12、0;iiReqNum;i+)精彩文档实用标准文案iMinMove=9999;iNext=-1;for(j=0;j=iNow) if(abs(queuej.iGo-iNow)iMinMove) iNext=j;iMinMove=abs(queue j.iGo-iNow); /if(abs(queuej.iGo-iNow)=iNow) /for( j=0;jiReqNum;j+)if(iNext!=-1) cout i+1 queueiNext.iGo abs(queueiNext.iGo-iNow)endl;iSum+=abs(queueiNext.iGo-iNow); / 累加总移动磁道数 i

13、Now=queueiNext.iGo; / 设置磁头当前位置为当前访问磁道号 queueiNext.iVisited=1; / 设 置 磁 道 是 否 已 经 访 问 标 志 为 1 : 已 访 问 /if(iNext!=-1) else / 掉头向外 for(j=0;jiReqNum;j+)道号/ 寻找当前方向上寻道距离最短的末访问磁 if(queue j.iVisited=0)&(queuej.iGoiNow) if(abs(queuej.iGo-iNow)iMinMove)精彩文档实用标准文案 iNext=j;iMinMove=abs(queue j.iGo-iNow); /for( j

14、=0;jiReqNum;j+)cout i+1 queueiNext.iGoabs(queueiNext.iGo-iNow)endl;iSum+=abs(queueiNext.iGo-iNow); / 累加总移动磁道数iNow=queueiNext.iGo; / 设置磁头当前位置为当前访问磁道号queueiNext.iVisited=1; / 设置磁道是否已经访问标志为1 :已访问 /if(iNext!=-1) /for(i=0;iiReqNum;i+)coutendl 总调度次数 : iReqNumendl;coutendl 总移动磁道数 : iSumendl;printf(n 平均移动磁道

15、数 : %.2fnn,(float)iSum / (float)iReqNum);break;case 2:/ 磁头初始向外Reset(); / 重置访问标志、磁头当前位置、总移动磁道数coutendlendl;coutendlendl 电 梯 调 度 算 法 - 磁 头 初 始 向 外 的 调 度 结 果 :endlendl;cout 初始磁道号 : iStartendl;cout 序号 下一磁道号 移动的磁道数 endl;for(i=0;iiReqNum;i+)精彩文档实用标准文案 iMinMove=9999;iNext=-1;for(j=0;jiReqNum;j+) / 寻找当前方向上寻

16、道距离最短的末访问磁道号 if(queue j.iVisited=0)&(queuej.iGo=iNow) if(abs(queuej.iGo-iNow)iMinMove) iNext=j;iMinMove=abs(queue j.iGo-iNow); /if(abs(queuej.iGo-iNow)iMinMove) /if(queuej.iVisited=0)&(queuej.iGo=iNow) /for( j=0;jiReqNum;j+)if(iNext!=-1) cout i+1 queueiNext.iGoabs(queueiNext.iGo-iNow)endl;iSum+=abs(

17、queueiNext.iGo-iNow); / 累加总移动磁道数iNow=queueiNext.iGo; / 设置磁头当前位置为当前访问磁道号queueiNext.iVisited=1; / 设置磁道是否已经访问标志为1 :已访问 else / 掉 头向内 for( j=0;jiNow) if(abs(queuej.iGo-iNow)iMinMove) iNext=j;精彩文档实用标准文案iMinMove=abs(queue j.iGo-iNow);/if(abs(queuej.iGo-iNow)iNow)/for( j=0;jiReqNum;j+)cout i+1abs(queueiNext

18、.iGo-iNow)endl;iSum+=abs(queueiNext.iGo-iNow);iNow=queueiNext.iGo;queueiNext.iGo/ 累加总移动磁道数/ 设置磁头当前位置为当前访问磁道号queueiNext.iVisited=1;/ 设置磁道是否已经访问标志为 1 :已访问 /if(iNext!=-1) /for(i=0;iiReqNum;i+)coutendl 总调度次数 : iReqNumendl;coutendl 总移动磁道数 : iSumendl;printf(n 平均移动磁道数 : %.2fnn,(float)iSum / (float)iReqNum)

19、;break;default:printf(n 输入错误 !nn);return; /switch(iInput) /void SCAN() void Version() / 显示版权信息函数 coutendlendl;cout endl;精彩文档实用标准文案cout 磁盘调度算法模拟系统coutendl; cout cout cout cout (c)All Right Reserved程坤Version 2010 build 2.0endl;endl;endl;endl;endl;coutendlendl; / void Version() void main() int i;bool bGoOn; / 是否继续磁盘调度算法模拟的标志y、Y、N 、nVersion();char sGoOn1; / 用户输入是否继续磁盘调度算法模拟的字母:/ 显示版权信息函数Init(); / 初始化函数if(ReadTrackFile()=-1) / 读入磁道号流文件printf( 读入磁道号流文件失

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论