收藏 分销(赏)

天津理工大学-操作系统实验3:磁盘调度算法的实现.doc

上传人:天**** 文档编号:4361605 上传时间:2024-09-13 格式:DOC 页数:9 大小:109KB
下载 相关 举报
天津理工大学-操作系统实验3:磁盘调度算法的实现.doc_第1页
第1页 / 共9页
天津理工大学-操作系统实验3:磁盘调度算法的实现.doc_第2页
第2页 / 共9页
点击查看更多>>
资源描述
实验报告 学院(系)名称:计算机与通信工程学院 姓名 王远志 学号 专业 计算机科学与技术 班级 2013级3班 实验项目 实验二:磁盘调度算法得实现 课程名称 操作系统 课程代码 实验时间 2015 年12月 11 日 第5-8节 实验地点 软件实验室7-219 批改意见 成绩 教师签字:       实验内容: 1. 本实验就是模拟操作系统得磁盘寻道方式,运用磁盘访问顺序得不同来设计磁盘得调度算法。 2. 实现得磁盘调度算法有FCFS,SSTF,SCAN,CSCAN与 NStepSCAN算法。 3. 设定开始磁道号寻道范围,依据起始扫描磁道号与最大磁道号数,随机产生要进行寻道得磁道号序列。 4. 选择磁盘调度算法,显示该算法得磁道访问顺序,计算出移动得磁道总数与平均寻道总数。 5. 按算法得寻道效率进行排序,并对各算法得性能进行分析比较。 实验要求: 1.详细描述实验设计思想、程序结构及各模块设计思路; 2. 详细描述程序所用数据结构及算法; 3. 明确给出测试用例与实验结果; 4. 为增加程序可读性,在程序中进行适当注释说明; 5. 认真进行实验总结,包括:设计中遇到得问题、解决方法与收获等; 6. 实验报告撰写要求结构清晰、描述准确逻辑性强; 7. 实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。 【实验过程记录(源程序、测试用例、测试结果及心得体会等)】 #include<iostream> #include<iomanip> #include<math、h> using namespace std; const int MaxNumber=100; int  TrackOrder[MaxNumber]; int  MoveDistance[MaxNumber];  //----移动距离; int  FindOrder[MaxNumber];    //-----寻好序列。 double  AverageDistance;     //-----平均寻道长度 bool direction;          //-----方向 true时为向外,false为向里 int BeginNum;     //----开始磁道号。 int M;        //----磁道数。 int N;             //-----提出磁盘I/O申请得进程数 int SortOrder[MaxNumber];  //----排序后得序列 bool Finished[MaxNumber]; void Inith() { cout<<"请输入磁道数:"; cin>>M; cout<<"请输入提出磁盘I/O申请得进程数:"; cin>>N; ﻩcout<<"请依次输入要访问得磁道号:"; for(int i=0;i<N;i++) cin>>TrackOrder[i]; ﻩfor(int j=0;j<N;j++) ﻩ MoveDistance[j]=0; ﻩﻩcout<<"请输入开始磁道号:"; ﻩ cin>>BeginNum; ﻩfor(int k=0;k<N;k++) ﻩ Finished[k]=false; for(int l=0;l<N;l++) ﻩSortOrder[l]=TrackOrder[l]; } //=====================排序函数,将各进程申请得磁道按从小到大排列================= void Sort() {       //------冒泡排序 ﻩ   int temp;      for(int i=N-1;i>=0;i--) ﻩﻩfor(int j=0;j<i;j++) ﻩ{ ﻩ ﻩif(SortOrder[j]>SortOrder[j+1]) ﻩﻩ { ﻩﻩ   temp=SortOrder[j]; ﻩ   SortOrder[j]=SortOrder[j+1]; ﻩﻩﻩﻩ  SortOrder[j+1]=temp; ﻩ ﻩ} ﻩ } } //============FCFS,先来先服务================================= void FCFS() { ﻩint temp; temp=BeginNum;        //--------将BeginNum赋给temp作为寻道时得当前所在磁道号 for(int i=0;i<N;i++) { MoveDistance[i]=abs(TrackOrder[i]-temp);  //-------计算移动磁道数 ﻩ temp=TrackOrder[i];                //-------寻到后,将此道作为当前所在磁道号,赋给temp FindOrder[i]=TrackOrder[i];        //-----寻好得赋给寻好序列 } } //========SSTF,最短寻道法============================= void SSTF() { int temp,n; int A=M; ﻩtemp=BeginNum;        //--------将BeginNum赋给temp作为寻道时得当前所在磁道号 ﻩfor(int i=0;i<N;i++) ﻩ{ ﻩﻩfor(int j=0;j<N;j++)             //-------寻找最短得寻道长度 { ﻩ if(abs(TrackOrder[j]-temp)<A&&Finished[j]==false) ﻩ ﻩ{ ﻩA=abs(TrackOrder[j]-temp); ﻩﻩ n=j; ﻩﻩ} ﻩﻩﻩelse continue; ﻩﻩ} ﻩ Finished[n]=true;        //-------将已经寻找到得Finished赋值为true MoveDistance[i]=A;   //-------寻道长度 temp=TrackOrder[n];      //-------当前寻道号。 ﻩA=M;    //-----重置A值 ﻩFindOrder[i]=TrackOrder[n]; //----寻好得赋给寻好序列 } } //=====================SCAN,扫描算法========================== void SCAN() { ﻩint m,n,temp; temp=BeginNum; Sort();                //------排序 cout<<"请选择开始方向:1--向外;0---向里";  //------选择扫描方向 ﻩcin>>m; if(m==1) direction=true; ﻩelse if(m==0) direction=false; ﻩelse ﻩ cout<<"输入错误"; ﻩfor(int i=0;i<N;i++) ﻩ{ ﻩﻩif(SortOrder[i]<BeginNum) ﻩ ﻩcontinue; else ﻩﻩ{ ﻩ ﻩn=i; ﻩ break; } ﻩ} if(direction==true)       //------选择向外 { for(int i=n;i<N;i++) { MoveDistance[i-n]=abs(SortOrder[i]-temp); ﻩ ﻩtemp=SortOrder[i]; ﻩ ﻩ FindOrder[i-n]=SortOrder[i]; } ﻩﻩfor(int j=n-1;j>=0;j--) ﻩﻩ{ ﻩﻩ MoveDistance[N-1-j]=abs(SortOrder[j]-temp); ﻩﻩﻩﻩtemp=SortOrder[j]; ﻩﻩﻩﻩFindOrder[N-1-j]=SortOrder[j]; ﻩ } } else              //-------选择向里 { ﻩfor(int i=n-1;i>=0;i--) ﻩ{ ﻩﻩMoveDistance[N-i-4]=abs(SortOrder[i]-temp); ﻩﻩﻩtemp=SortOrder[i]; ﻩﻩ FindOrder[N-i-4]=SortOrder[i]; ﻩ} for(int j=n;j<N;j++) { ﻩﻩ ﻩMoveDistance[j]=abs(SortOrder[j]-temp); ﻩ temp=TrackOrder[j]; ﻩ FindOrder[j]=SortOrder[j]; } } } //=================CSCAN,循环扫描算法======================= void CSCAN() { int m,n,temp; ﻩtemp=BeginNum; Sort(); ﻩcout<<"请选择开始方向:1--向外;0---向里"; cin>>m; if(m==1) direction=true; ﻩelse if(m==0) ﻩﻩdirection=false; else ﻩcout<<"输入错误"; for(int i=0;i<N;i++) ﻩ{ if(SortOrder[i]<BeginNum) ﻩﻩcontinue; ﻩelse ﻩ{ ﻩﻩ n=i; ﻩﻩﻩbreak; ﻩ } ﻩ} if(direction==true) ﻩ{ ﻩﻩfor(int i=n;i<N;i++) { ﻩﻩﻩMoveDistance[i-n]=abs(SortOrder[i]-temp); ﻩﻩﻩﻩtemp=SortOrder[i]; ﻩ ﻩ FindOrder[i-n]=SortOrder[i]; ﻩﻩ} for(int j=0;j<n;j++) ﻩ { MoveDistance[N-n+j]=abs(SortOrder[j]-temp); ﻩﻩ ﻩtemp=SortOrder[j]; ﻩﻩﻩ FindOrder[N-n+j]=SortOrder[j]; ﻩ} ﻩ} ﻩelse { ﻩﻩfor(int i=n-1;i>=0;i--) ﻩ { ﻩﻩ MoveDistance[n-1-i]=abs(SortOrder[i]-temp); ﻩ temp=SortOrder[i]; ﻩ FindOrder[n-1-i]=SortOrder[i]; ﻩ} for(int j=N-1;j>=n;j--) ﻩ{ MoveDistance[N-j+n-1]=abs(SortOrder[j]-temp); ﻩﻩﻩﻩtemp=SortOrder[j]; ﻩFindOrder[N-j+n-1]=SortOrder[j]; ﻩ} ﻩ} } //========计算平均寻道时间============== void Count() { int Total=0; for(int i=0;i<N;i++) { ﻩ Total+=MoveDistance[i]; ﻩ} AverageDistance=((double)Total)/((double)N); } void Show() { ﻩcout<<"================从"<<BeginNum<<"号磁道开始====================="<<endl; ﻩcout<<setw(20)<<"被访问得下一个磁道号"<<setw(20)<<"移动距离(磁道数)"<<endl; ﻩfor(int i=0;i<N;i++) ﻩ{ ﻩﻩcout<<setw(15)<<FindOrder[i]<<setw(15)<<MoveDistance[i]<<endl; } cout<<setw(20)<<"平均寻道长度:"<<AverageDistance<<endl; cout<<endl; } int main() { ﻩint y=1; int s; ﻩInith(); while(y) ﻩ{ cout<<"请选择寻道方式:1--FCFS; 2--SSTF; 3--SCAN;4--CSCSN;"; ﻩcin>>s; switch(s) ﻩ { ﻩﻩ   case 1:FCFS();Count();Show();break; ﻩ case 2:SSTF();Count();Show();break; ﻩﻩﻩcase 3:SCAN();Count();Show();break; ﻩ case 4:CSCAN();Count();Show();break; ﻩﻩ} cout<<"就是否继续选择寻道算法?1--就是;2--否"; ﻩint p; ﻩ cin>>p; ﻩ y=p; } ﻩreturn 0; } 实验结果: FCFS方式: Sstf方式: SCAN方式: 4、CSCSN
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服