《天津理工大学操作系统实验3:磁盘调度算法地实现》由会员分享,可在线阅读,更多相关《天津理工大学操作系统实验3:磁盘调度算法地实现(10页珍藏版)》请在金锄头文库上搜索。
1、式和大吟实验报告学院(系)名称: 计算机与通信工程学院姓名王远志学号20135632专业计算机科学与技术班级2013级3班实验项目实验二:磁盘调度算法的实现课程名称操作系统课程代码0668036实验时间2015年12月11日第5-8节实验地点软件实验室7-219批改意见成绩教师签字:实验内容:1. 本实验是模拟操作系统的磁盘寻道方式,运用磁盘访问顺序的不冋来设计磁盘的调度算法。2. 实现的磁盘调度算法有 FCFS, SSTF, SCAN , CSCAN和NStepSCAN算法。3. 设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序 列。4. 选择磁盘调度算
2、法,显示该算法的磁道访问顺序,计算出移动的磁道总数和平均寻道总数。5. 按算法的寻道效率进行排序,并对各算法的性能进行分析比较。实验要求:1详细描述实验设计思想、程序结构及各模块设计思路;2. 详细描述程序所用数据结构及算法;3. 明确给出测试用例和实验结果;4. 为增加程序可读性,在程序中进行适当注释说明;5. 认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;6. 实验报告撰写要求结构清晰、描述准确逻辑性强;7. 实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】#in clude#in clude#in clud
3、eusing n amespace std;const int MaxNumber=100;/-移动距离;/-寻好序列。-平均寻道长度/ 方向true时为向外,false为向里/-开始磁道号。/-磁道数。/-提出磁盘I/O申请的进程数II排序后的序列int TrackOrderMaxNumber; int MoveDista nceMaxNumber;int Fin dOrderMaxNumber; double AverageDista nee; bool direct ion;int Begi nNum;int M;int N;int SortOrderMaxNumber;bool Fi
4、ni shedMaxNumber;void In ith()cout请输入磁道数:;ci nM;cout请输入提出磁盘I/O申请的进程数ci nN;cout请依次输入要访问的磁道号:;for(i nt i=0;i TrackOrderi;for(i nt j=O;jN;j+)MoveDista ncej=0;cout Begi nNum;for(int k=0;kN;k+)Fini shedk=false;for(i nt l=0;l=0;i-)for(i nt j=0;jSortOrderj+1)temp=SortOrderj;SortOrderj=SortOrder|j+1;SortOrd
5、erj+1=temp;=FCFS,先来先服务=void FCFS()int temp;temp=BeginNum;/将BeginNum 赋给temp作为寻道时的当前所在磁道号for(i nt i=0;iN;i+)MoveDista ncei=abs(TrackOrderi-temp);/计算移动磁道数temp=TrackOrderi;/寻到后,将此道作为当前所在磁道号,赋给tempFin dOrderi=TrackOrderi;/寻好的赋给寻好序列=SSTF,最短寻道法=void SSTF()int temp ,n;II将BeginNum赋给temp作为寻道时的当前所在磁道int A=M; t
6、emp=Begi nNum;号for(i nt i=0;iN;i+)for(i nt j=O;jN;j+)II寻找最短的寻道长度if(abs(TrackOrderj-temp)A&Fini shedj=false)A=abs(TrackOrderj-temp); n=j;else con ti nue;Fini shed n=true;MoveDista ncei=A; temp=TrackOrder n; A=M;精彩文档II将已经寻找到的Finished赋值为trueII寻道长度II-当前寻道号。II-重置A值Fin dOrderi=TrackOrder n;/-寻好的赋给寻好序列=SCA
7、N,扫描算法=void SCAN()int m,n, temp;temp=Begi nNum;Sort();/排序cout请选择开始方向:1-向外;0-向里;/-选择扫描方向cinm;if(m=1)direct ion=true;else if(m=0)direct ion=false;elsecout输入错误;for(i nt i=0;iN;i+)if(SortOrderiBegi nNum)con ti nue;elsen=i;break;/选择向外if(direct ion=true)for(int i=n;i=O;j-)MoveDista nceN-1-j=abs(SortOrderj
8、-temp); temp=SortOrderj;Fin dOrderN-1-j=SortOrderj;选择向里else/for(int i=n-1;i=0;i_)MoveDista nceN-i-4=abs(SortOrderi-temp); temp=SortOrderi;Fin dOrderN-i-4=SortOrderi;for(i nt j=n ;jN;j+)MoveDista ncej=abs(SortOrderj-temp); temp=TrackOrderj;Fin dOrderj=SortOrderj;=CSCAN,循环扫描算法=void CSCAN()int m,n, tem
9、p;temp=Begi nNum;Sort();cout请选择开始方向:1-向外;0-向里;cinm;if(m=1)direct ion=true;else if(m=0)direct ion=false;elsecout输入错误;for(i nt i=0;iN;i+)if(SortOrderiBegi nNum)con ti nue;elsen=i;break;if(direct ion=true)for(int i=n;iN;i+)MoveDista ncei-n=abs(SortOrderi-temp); temp=SortOrderi;Fi ndOrderi-n=SortOrderi;
10、for(i nt j=O;j =0;i_)MoveDista ncen-1-i=abs(SortOrderi-temp);temp=SortOrderi;Fin dOrder n-1-i=SortOrderi;for(i nt j=N-1;j=n ;j-)MoveDista nceN-j+n-1=abs(SortOrderj-temp); temp=SortOrderj;Fin dOrderN-j+n-1=SortOrderj;/=计算平均寻道时间= void Cou nt()int Total=0;for(i nt i=0;iN;i+)Total+=MoveDista ncei;Averag
11、eDista nce=(double)Total)/(double)N); void Show()e ndl;cout= 从BeginNum号磁道开始= coutsetw(20)被访问的下一个磁道号 setw(20)移动距离(磁道数)endl; for(i nt i=0;iN;i+)coutsetw(15)Fi ndOrderisetw(15)MoveDista nceie ndl;coutsetw(20)平均寻道长度:AverageDistanceendl; coute ndl;int mai n()int y=1;int s;In ith();while(y)cout s;switch(s)case 1:FCFS();Cou nt();Show(