




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验六 磁盘调度算法【实验目的】 通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的实现方法。【实验内容】问题描述:设计程序模拟先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。程序要求如下:1)利用先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法模拟磁道
2、访问过程。2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。4)输出:每种算法的平均寻道长度。【实验代码】#include <iostream>#include <fstream>#include <iomanip>#include <stdio.h>using namespace std;const int MaxNumber=100;int TrackOrderM
3、axNumber;/磁盘访问序列int MoveDistanceMaxNumber;/磁头每次移动的距离double AverageDistance;/平均寻道长度bool direction;/SCAN和CSCAN算法的磁头移动方向int M;/开始磁道号int N;/磁道个数void inputData()cout<<"请输入磁道个数N: "cin>>N; cout<<"n请输入磁盘访问顺序(此部分由文件读入)。"<<endl;fstream fin("F:/TrackOrder3.txt&q
4、uot;); for(int i=0;i<N;i+)fin>>TrackOrderi;cout<<"n请输入开始磁盘号M: "cin>>M;void showData()cout<<"n=显示配置信息=n"cout<<"n输入磁道个数N为:"<<N<<",开始磁盘号M:"<<M<<endl;cout<<"n磁盘访问序列为: "for(int i=0;i<N;i+)c
5、out<<TrackOrderi<<" "cout<<endl;void FCFS()int i,j;int sum=0;float avg;int FcfsMaxNumber;int sumArrayMaxNumber;for(i=0;i<N;i+)Fcfsi=TrackOrderi;/sum=0;sumArray0=abs(M-Fcfs0);/cout<<"FCFS磁盘调度算法:"<<endl;cout<<"n从"<<M<<&qu
6、ot;号磁道开始"<<endl;cout<<"被访问的下一个磁道号: "for(i=0;i<N;i+)cout<<Fcfsi<<" "cout<<endl;cout<<"对应移动距离(磁道数): "<<sumArray0<<" "for(i=0,j=1;j<N;i+,j+)sumArrayj=abs(Fcfsj-Fcfsi); cout<<sumArrayj<<"
7、"for(i=0;i<N;i+)sum=sum+sumArrayi;avg=(float)sum/N;cout<<"n总寻道长度:"<<sum;cout<<"n平均寻道长度:"<<setprecision(3)<<avg<<endl<<endl;void SSTF() int i,j;int k=1;int s=0;int temp;int l,r;int sum=0;float avg=0;int SstfMaxNumber;int sumArrayMa
8、xNumber;int Mnow;Mnow=M;for(i=0;i<N;i+)Sstfi=TrackOrderi;/sum=0;/sumArray0=abs(M-Fcfs0);for(i=0;i<N;i+)for(j=i+1;j<N;j+) if(Sstfi>Sstfj)/将磁道号从小到大排序temp=Sstfi;Sstfi=Sstfj;Sstfj=temp;/cout<<"SSTF磁盘调度算法:"<<endl;cout<<"n从"<<Mnow<<"号磁道开始&
9、quot;<<endl;cout<<"被访问的下一个磁道号: "if(SstfN-1<=Mnow)/若被访问的下一个最大的磁道号不大于当前的磁道号for(i=N-1,s=0;i>=0;i-,s+)cout<<Sstfi<<" "sumArrays=Mnow-Sstfi;sum+=Mnow-Sstfi;Mnow=Sstfi;elseif(Sstf0>=Mnow)for(i=0,s=0;i<N;i+,s+)cout<<Sstfi<<" "sum
10、Arrays=Sstfi-Mnow;sum+=Sstfi-Mnow;Mnow=Sstfi;elsewhile(Sstfk<Mnow)k+;l=k-1;r=k;if(Mnow-Sstfl<=(Sstfr-Mnow)while(l>=0)cout<<Sstfl<<" "sumArrays=Mnow-Sstfl; s=s+1;sum=sum+Mnow-Sstfl;Mnow=Sstfl;l=l-1;Mnow=Sstf0;for(j=r;j<N;j+)cout<<Sstfj<<" "sumAr
11、rays=Sstfj-Mnow;s=s+1; sum+=Sstfj-Mnow;Mnow=Sstfj;elsewhile(r<N)cout<<Sstfr<<" "sumArrays=Sstfr-Mnow;s=s+1; sum+=Sstfr-Mnow;Mnow=Sstfr;r=r+1;Mnow=SstfN-1;for(j=1;j>=0;j-)cout<<Sstfj<<" "sumArrays=Mnow-Sstfj;s=s+1;sum+=Mnow-Sstfj;Mnow=Sstfj;cout<&l
12、t;endl;cout<<"对应移动距离(磁道数): "for(i=0;i<N;i+) cout<<sumArrayi<<" "avg=(float)sum/N;cout<<"n总寻道长度:"<<sum;cout<<"n平均寻道长度:"<<setprecision(3)<<avg<<endl<<endl;void SCAN() int i,j;int k=1;int s=0;int temp
13、;int c,l,r;int sum=0;float avg=0;int ScanMaxNumber;int sumArrayMaxNumber;int Mnow;Mnow=M;for(i=0;i<N;i+)Scani=TrackOrderi;for(i=0;i<N;i+)for(j=i+1;j<N;j+)if(Scani>Scanj)temp=Scani;Scani=Scanj;Scanj=temp; cout<<"请选择磁头移动方向1-增加方向、0-减小方向: "cin>>c;/cout<<endl;/cout
14、<<"SCAN磁盘调度算法:"<<endl;cout<<"n从"<<M<<"号磁道开始"<<endl;cout<<"被访问的下一个磁道号: "if(ScanN-1<=Mnow)for(i=N-1,s=0;i>=0;i-,s+)cout<<Scani<<" "sumArrays=Mnow-Scani;sum+=Mnow-Scani;Mnow=Scani;elseif(Scan0&
15、gt;=Mnow)for(i=0,s=0;i<N;i+,s+)cout<<Scani<<" "sumArrays=Scani-Mnow;sum+=Scani-Mnow;Mnow=Scani;elsewhile(Scank<Mnow)k+;l=k-1;r=k;switch(c) case 0:while(l>=0)cout<<Scanl<<" "sumArrays=Mnow-Scanl; s=s+1;sum=sum+Mnow-Scanl;Mnow=Scanl;l=l-1;Mnow=Scan0
16、;for(j=r;j<N;j+)cout<<Scanj<<" "sumArrays=Scanj-Mnow; s=s+1;sum+=Scanj-Mnow;Mnow=Scanj;break; case 1:while(r<N)cout<<Scanr<<" "/这一步没错sumArrays=Scanr-Mnow; s=s+1;sum+=Scanr-Mnow;Mnow=Scanr;r=r+1;Mnow=ScanN-1;for(j=l;j>=0;j-)cout<<Scanj<<
17、;" "/这一步也没错sumArrays=Mnow-Scanj; s=s+1;sum+=Mnow-Scanj;Mnow=Scanj;break;default:cout<<"输入有误,请重新输入. "/goto cout<<endl;cout<<"对应移动距离(磁道数): "for(i=0;i<N;i+) cout<<sumArrayi<<" " avg=(float)sum/N;cout<<"n总寻道长度:"<
18、<sum;cout<<"n平均寻道长度:"<<setprecision(3)<<avg<<endl<<endl;void CSCAN() int temp;int k=1;int s;int Mnow,l,r,c;int i,j;int sum=0;float avg=0;int CscanMaxNumber;int sumArrayMaxNumber;Mnow=M;for(i=0;i<N;i+)Cscani=TrackOrderi;for(i=0;i<N;i+)for(j=i+1;j<N;
19、j+)if(Cscani>Cscanj)temp=Cscani; Cscani=Cscanj;Cscanj=temp;cout<<"n请选择磁头移动方向1-增加方向、0-减小方向: "cin>>c;/cout<<endl;/cout<<"CSCAN磁盘调度算法:"<<endl;cout<<"从"<<M<<"号磁道开始"<<endl;cout<<"被访问的下一个磁道号: "
20、 if(CscanN-1<=Mnow)for(i=0,s=0;i<N;i+,s+)cout<<Cscani<<" " /sumArrays=Mnow-Cscan0+CscanN-1; sum=Mnow-Cscan0+CscanN-1;elseif(Cscan0>=Mnow)for(i=0,s=0;i<N;i+,s+)cout<<Cscani<<" "/sumArrays=Scani-Mnow; sum=CscanN-1-Mnow;elsewhile(Cscank<Mnow)k+
21、;l=k-1;r=k;switch(c) case 0:for(j=l;j>=0;j-)cout<<Cscanj<<" "for(j=N-1;j>=r;j-)cout<<Cscanj<<" "sum=2*(CscanN-1-Cscan0)-Cscanr+Mnow;break;case 1: for(j=r;j<N;j+)cout<<Cscanj<<" "for(j=0;j<r;j+)cout<<Cscanj<<&qu
22、ot; "sum=2*(CscanN-1-Cscan0)+Cscanr-1-Mnow;break;default: cout<<"输入有误,请重新输入. "avg=(float)sum/N;cout<<"n总寻道长度:"<<sum;cout<<"n平均寻道长度:"<<setprecision(3)<<avg<<endl<<endl;int main()char choice;cout<<"n=虚拟内存页面配置算法=nn"inputData();show
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 笔记分享的保安证考试试题及答案
- 中国矿业大学《眼科学》2023-2024学年第二学期期末试卷
- 2025届江苏省常州市前黄中学高三(一模)仿真卷(B卷)历史试题试卷含解析
- 2025届黑龙江省大庆市高中名校高三下学期一轮质量检测试题生物试题含解析
- 重要保安证考试试题及答案
- 四川文理学院《动物学(非生物类)》2023-2024学年第二学期期末试卷
- 西安市周至县2024-2025学年四年级数学第二学期期末综合测试试题含解析
- 湖南铁路科技职业技术学院《武术1》2023-2024学年第一学期期末试卷
- 常州大学《C语言程序设计课程设计》2023-2024学年第二学期期末试卷
- 铁岭卫生职业学院《能源材料与应用》2023-2024学年第二学期期末试卷
- 2025北新集团建材股份有限公司应届生招聘笔试参考题库附带答案详解
- 跨学科实践:制作简易活塞式抽水机 -2024-2025学年人教版物理八年级下学期
- 2025年阜阳科技职业学院单招职业技能测试题库及答案1套
- 2025届高考语文复习:历年高考语文错别字选择题
- 二零二五医疗影像数据标注与审核服务合同范本3篇
- GB/T 18851.2-2024无损检测渗透检测第2部分:渗透材料的检验
- 水电站安全生产奖惩制度
- 正弦稳态电路分析
- 《社区健康小屋》课件
- 专题02 光现象(5大模块知识清单+5个易混易错+2种方法技巧+典例真题解析)
- 支气管封堵器在胸科手术中的应用
评论
0/150
提交评论