版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告学院(系)名称:计算机与通信工程学院姓名王远志学号专业计算机科学与技术班级2013级3班实验项目实验二:磁盘调度算法得实现课程名称操作系统课程代码实验时间2015年12月11日第5-8节实验地点软件实验室7-219批改意见成绩教师签字:实验内容:本实验就是模拟操作系统得磁盘寻道方式,运用磁盘访问顺序得不同来设计磁盘得调度算法。实现得磁盘调度算法有FCFS,SSTF,SCAN,CSCAN与NStepSCAN算法。设定开始磁道号寻道范围,依据起始扫描磁道号与最大磁道号数,随机产生要进行寻道得磁道号序列。选择磁盘调度算法,显示该算法得磁道访问顺序,计算出移动得磁道总数与平均寻道总数。按算法得寻道效率进行排序,并对各算法得性能进行分析比较。实验要求:1.详细描述实验设计思想、程序结构及各模块设计思路;详细描述程序所用数据结构及算法;明确给出测试用例与实验结果;为增加程序可读性,在程序中进行适当注释说明;认真进行实验总结,包括:设计中遇到得问题、解决方法与收获等;实验报告撰写要求结构清晰、描述准确逻辑性强;实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】#include<iostream>#include<iomanip>#include<math、h>usingnamespacestd;constintMaxNumber=100;intTrackOrder[MaxNumber];intMoveDistance[MaxNumber];//----移动距离;intFindOrder[MaxNumber];//-----寻好序列。doubleAverageDistance;//-----平均寻道长度booldirection;//-----方向true时为向外,false为向里intBeginNum;//----开始磁道号。intM;//----磁道数。intN;//-----提出磁盘I/O申请得进程数intSortOrder[MaxNumber];//----排序后得序列boolFinished[MaxNumber];voidInith(){ cout<<"请输入磁道数:"; cin>>M; cout<<"请输入提出磁盘I/O申请得进程数:"; cin>>N;ﻩcout<<"请依次输入要访问得磁道号:"; for(inti=0;i<N;i++) cin>>TrackOrder[i];ﻩfor(intj=0;j<N;j++)ﻩ MoveDistance[j]=0;ﻩﻩcout<<"请输入开始磁道号:";ﻩ cin>>BeginNum;ﻩfor(intk=0;k<N;k++)ﻩ Finished[k]=false; for(intl=0;l<N;l++) ﻩSortOrder[l]=TrackOrder[l];}//=====================排序函数,将各进程申请得磁道按从小到大排列=================voidSort(){//------冒泡排序ﻩinttemp;for(inti=N-1;i>=0;i--)ﻩﻩfor(intj=0;j<i;j++) ﻩ{ﻩ ﻩif(SortOrder[j]>SortOrder[j+1])ﻩﻩ { ﻩﻩtemp=SortOrder[j];ﻩ SortOrder[j]=SortOrder[j+1];ﻩﻩﻩﻩSortOrder[j+1]=temp;ﻩ ﻩ}ﻩ }}//============FCFS,先来先服务=================================voidFCFS(){ﻩinttemp; temp=BeginNum;//--------将BeginNum赋给temp作为寻道时得当前所在磁道号 for(inti=0;i<N;i++) { MoveDistance[i]=abs(TrackOrder[i]-temp);//-------计算移动磁道数ﻩ temp=TrackOrder[i];//-------寻到后,将此道作为当前所在磁道号,赋给temp FindOrder[i]=TrackOrder[i];//-----寻好得赋给寻好序列 }}//========SSTF,最短寻道法=============================voidSSTF(){ inttemp,n; intA=M;ﻩtemp=BeginNum;//--------将BeginNum赋给temp作为寻道时得当前所在磁道号ﻩfor(inti=0;i<N;i++)ﻩ{ﻩﻩfor(intj=0;j<N;j++)//-------寻找最短得寻道长度 { ﻩ if(abs(TrackOrder[j]-temp)<A&&Finished[j]==false)ﻩ ﻩ{ ﻩA=abs(TrackOrder[j]-temp); ﻩﻩ n=j; ﻩﻩ}ﻩﻩﻩelsecontinue;ﻩﻩ}ﻩ Finished[n]=true;//-------将已经寻找到得Finished赋值为true MoveDistance[i]=A;//-------寻道长度 temp=TrackOrder[n];//-------当前寻道号。 ﻩA=M;//-----重置A值 ﻩFindOrder[i]=TrackOrder[n];//----寻好得赋给寻好序列 }}//=====================SCAN,扫描算法==========================voidSCAN(){ﻩintm,n,temp; temp=BeginNum; Sort();//------排序 cout<<"请选择开始方向:1--向外;0---向里";//------选择扫描方向ﻩcin>>m; if(m==1) direction=true;ﻩelseif(m==0) direction=false;ﻩelseﻩ cout<<"输入错误";ﻩfor(inti=0;i<N;i++)ﻩ{ﻩﻩif(SortOrder[i]<BeginNum)ﻩ ﻩcontinue; elseﻩﻩ{ﻩ ﻩn=i; ﻩ break; }ﻩ} if(direction==true)//------选择向外 { for(inti=n;i<N;i++) { MoveDistance[i-n]=abs(SortOrder[i]-temp);ﻩ ﻩtemp=SortOrder[i];ﻩ ﻩ FindOrder[i-n]=SortOrder[i]; }ﻩﻩfor(intj=n-1;j>=0;j--)ﻩﻩ{ ﻩﻩ MoveDistance[N-1-j]=abs(SortOrder[j]-temp);ﻩﻩﻩﻩtemp=SortOrder[j];ﻩﻩﻩﻩFindOrder[N-1-j]=SortOrder[j];ﻩ } } else//-------选择向里 { ﻩfor(inti=n-1;i>=0;i--) ﻩ{ ﻩﻩMoveDistance[N-i-4]=abs(SortOrder[i]-temp);ﻩﻩﻩtemp=SortOrder[i];ﻩﻩ FindOrder[N-i-4]=SortOrder[i]; ﻩ} for(intj=n;j<N;j++) {ﻩﻩ ﻩMoveDistance[j]=abs(SortOrder[j]-temp); ﻩ temp=TrackOrder[j]; ﻩ FindOrder[j]=SortOrder[j]; } }}//=================CSCAN,循环扫描算法=======================voidCSCAN(){ intm,n,temp;ﻩtemp=BeginNum; Sort();ﻩcout<<"请选择开始方向:1--向外;0---向里"; cin>>m; if(m==1) direction=true;ﻩelseif(m==0)ﻩﻩdirection=false; else ﻩcout<<"输入错误"; for(inti=0;i<N;i++)ﻩ{ if(SortOrder[i]<BeginNum) ﻩﻩcontinue; ﻩelse ﻩ{ﻩﻩ n=i;ﻩﻩﻩbreak;ﻩ }ﻩ} if(direction==true)ﻩ{ﻩﻩfor(inti=n;i<N;i++) { ﻩﻩﻩMoveDistance[i-n]=abs(SortOrder[i]-temp);ﻩﻩﻩﻩtemp=SortOrder[i];ﻩ ﻩ FindOrder[i-n]=SortOrder[i];ﻩﻩ} for(intj=0;j<n;j++)ﻩ { MoveDistance[N-n+j]=abs(SortOrder[j]-temp);ﻩﻩ ﻩtemp=SortOrder[j];ﻩﻩﻩ FindOrder[N-n+j]=SortOrder[j]; ﻩ}ﻩ}ﻩelse {ﻩﻩfor(inti=n-1;i>=0;i--)ﻩ {ﻩﻩ MoveDistance[n-1-i]=abs(SortOrder[i]-temp);ﻩ temp=SortOrder[i];ﻩ FindOrder[n-1-i]=SortOrder[i]; ﻩ} for(intj=N-1;j>=n;j--) ﻩ{ MoveDistance[N-j+n-1]=abs(SortOrder[j]-temp);ﻩﻩﻩﻩtemp=SortOrder[j]; ﻩFindOrder[N-j+n-1]=SortOrder[j]; ﻩ}ﻩ}}//========计算平均寻道时间==============voidCount(){ intTotal=0; for(inti=0;i<N;i++) {ﻩ Total+=MoveDistance[i];ﻩ} AverageDistance=((double)Total)/((double)N);}voidShow(){ﻩcout<<"================从"<<BeginNum<<"号磁道开始====================="<<endl;ﻩcout<<setw(20)<<"被访问得下一个磁道号"<<setw(20)<<"移动距离(磁道数)"<<endl;ﻩfor(inti=0;i<N;i++)ﻩ{ﻩﻩcout<<setw(15)<<FindOrder[i]<<setw(15)<<MoveDistance[i]<<endl; } cout<<setw(20)<<"平均寻道长度:"<<AverageDistance<<endl; cout<<endl;}intmain(){ﻩinty=1; ints;ﻩInith(); while(y)ﻩ{ cout<<"请选择寻道方式:1--FCFS;2--SSTF;3--SCAN;4--CSCSN;"; ﻩcin>>s; switc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年护士执业资格考试(专业实务)试题及答案
- 2026年高考语文压轴大题试题及答案
- 2026年大学英语六级考试真题试题及答案
- 2026届新初三化学入门摸底测试卷两套(暑假衔接专用含答案详解、评分标准、学生作答区与黑白可打印版)
- 某钢厂原料验收规范
- 某光伏厂生产安全制度
- 灵动瑜伽入职笔试真题试卷(含完整答案解析)
- 电商平台商品上架与推广管理手册
- 小学六年级数学《分数混合运算解决较复杂问题》教学设计
- 初中八年级英语(人教版)Unit 8 Lets municate!书面表达知识清单
- 2026版分级护理标准指南课件
- 2026年国企物资采购岗招聘试题及答案
- 2026年HCIA认证《数通》全套道练习题库包及1套参考答案详解
- 建行2026年校园招考笔试真题资料
- 2026年山东能源集团有限公司校园招聘笔试模拟试题及答案解析
- 江苏南通市通州区2025-2026学年上学期七年级历史期末试卷(试卷+解析)
- 警情研判会课件
- 肩胛下肌损伤的治疗
- 农业企业种植技术员产量质量绩效考核表
- 公司带式球团焙烧工工艺作业技术规程
- 多模态人工智能教育动态测评体系构建指引
评论
0/150
提交评论