《2022年操作系统实验三磁盘调度算法的实现 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统实验三磁盘调度算法的实现 .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、计算机与通信工程学院天津理工大学计算机与通信工程学院实验报告2013 至 2014 学年第一学期课程名称操作系统学号学生姓名年级专业教学班号实验地点实验时间2013 年月日第节至月日第节主讲教师辅导教师名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 10 页 -计算机与通信工程学院2 实验(三)实验名称磁盘调度算法的实现软件环境VC+6.0 硬件环境PC 机实验目的操作系统是计算机科学与技术专业和信息与计算科学专业本科教学计划中的一门重要的专业基础课程,是对计算机系统硬软件资源进行管理的系统软件,是计算机系统的管理和指挥中心。通过本课程实验,使学生综合运用程序设计基础与语言、数据
2、结构、计算机原理与接口等先行课程的知识以及操作系统课程的知识在各种资源管理调度策略下,设计操作系统资源管理的模拟程序,使学生加深了解操作系统的工作机理,对操作系统的功能及结构设计有更加深入的实践,为开发系统软件和应用软件打下基础。实验内容(应包括实验题目、实验要求、实验任务等)实验内容:1、本实验是模拟操作系统的磁盘寻道方式,运用磁盘访问顺序的不同来设计磁盘的调度算法。2、实现的磁盘调度算法有FCFS,SSTF,SCAN,CSCAN 和 NStepSCAN 算法。3、设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序列。4、选择磁盘调度算法,显示该算法的磁道
3、访问顺序,计算出移动的磁道总数和平均寻道总数。5、按算法的寻道效率进行排序,并对各算法的性能进行分析比较。实验要求:学生应正确地设计有关的数据结构与各个功能模块,画出程序的流程图,编写程序,程序执行结果应正确实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 10 页 -计算机与通信工程学院3 在 VC+6.0 编写如下代码#include#include using namespace std;void FCFS(int a,int n);void SSTF(int a,int n);void SCAN(int a,
4、int n);void CSCAN(int a,int n);int main()int n;/磁道的个数 int s;/功能号 cout请输入磁道的个数:n;int*a=new intn;cout生成随机磁道号.endl;srand(unsigned)time(NULL);for(int i=0;in;i+)ai=(rand()%100)+1;coutai;coutendl;while(1)coutendl;cout1、先来先服务算法(FCFS)endl;cout2、最短寻道时间算法(SSTF)endl;cout3、扫描算法(SCAN)endl;cout4、循环扫描算法(CSCAN)endl
5、;cout0、退出 endl;coutendl;couts;if(s4)cout 输入有误!endl;else switch(s)case 0:exit(0);break;case 1:FCFS(a,n);break;case 2:SSTF(a,n);break;case 3:SCAN(a,n);break;case 4:CSCAN(a,n);break;return 0;/先来先服务调度算法(FCFS)void FCFS(int a,int n)int sum=0,j,i,first=0,now;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 10 页 -计算机与通信工程学院4
6、 coutnow;/确定当前磁头所在位置cout 磁盘调度顺序为:endl;for(i=0;in;i+)/按访问顺序输出磁道号 coutai;/计算 sum for(i=0,j=1;jn;i+,j+)first+=abs(aj-ai);/外围磁道与最里面磁道的距离 sum+=first+abs(now-a0);coutendl;cout 移动的总磁道数:sumendl;/最短寻道时间算法(SSTF)void SSTF(int a,int n)int temp;int k=1;int now,l,r;int i,j,sum=0;/将磁道号按递增排序for(i=0;in;i+)for(j=i+1;
7、jaj)temp=ai;ai=aj;aj=temp;cout 按递增顺序排好的磁道:endl;for(i=0;in;i+)coutai;/输出排好的磁道顺序 coutendl;coutnow;/确定当前磁头所在位置cout 磁盘调度顺序为:endl;if(an-1=0;i-)coutai=now)/当前磁头位置小于最里欲访问磁道 for(i=0;in;i+)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 10 页 -计算机与通信工程学院5 coutai;sum=an-1-now;else while(ak=0)&(rn)if(now-al)=(ar-now)/选择离磁头近的磁道
8、coutal;sum+=now-al;now=al;l=l-1;else coutar;sum+=ar-now;now=ar;r=r+1;if(l=-1)/磁头位置里侧的磁道已访问完 for(j=r;jn;j+)/访问磁头位置外侧的磁道 coutaj-1;j-)/访问磁头位置里侧的磁道 coutaj;sum+=an-1-a0;coutendl;cout移动的总道数:sumendl;/扫描算法(SCAN)void SCAN(int a,int n)int temp;int k=1;int now,l,r;int i,j,sum=0;for(i=0;in;i+)/对访问磁道按由小到大顺序排列输出名
9、师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 10 页 -计算机与通信工程学院6 for(j=i+1;jaj)temp=ai;ai=aj;aj=temp;cout 按递增顺序排好的磁道:endl;for(i=0;in;i+)coutai;coutendl;coutnow;/以下算法确定磁道访问顺序 if(an-1=0;i-)coutai=now)/磁头位置小于最里欲访问磁道 for(i=0;in;i+)coutai;sum=an-1-now;else /磁头位置在最里侧磁道与最外侧磁道之间 int d;while(aknow)/确定当前磁道在已排的序列中的位置 k+;l=k-1;
10、/在磁头位置的前一个欲访问磁道 r=k;/磁头欲访问磁道 coutd;/确定磁头访问的方向 cout=0;j-)coutaj;for(j=r;jn;j+)coutaj;sum=now-2*a0+an-1;if(d=1)/磁头向外 for(j=r;jn;j+)coutaj=0;j-)coutaj;sum=2*an-1-now-a0;else cout 请输入 0 或 1!endl;coutendl;cout移动的总道数:sumendl;/循环扫描算法(CSCAN)void CSCAN(int a,int n)int temp;int now,l,r;int i,j,sum=0;int k=1;f
11、or(i=0;in;i+)/对访问磁道按由小到大顺序排列输出 for(j=i+1;jaj)名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 10 页 -计算机与通信工程学院8 temp=ai;ai=aj;aj=temp;cout按递增顺序排好的磁道:endl;for(i=0;in;i+)coutai;coutendl;coutnow;/确定当前磁道号if(an-1=now)/磁头位置大于最外围欲访问磁道 for(i=0;in;i+)coutai=now)/磁头位置小于最里欲访问磁道 for(i=0;in;i+)coutai;sum=an-1-now;else/磁头位置在最里侧磁道与
12、最外侧磁道之间 int d;while(aknow)k+;l=k-1;/在磁头位置的前一个欲访问磁道 r=k;/磁头欲访问磁道 coutd;/确定磁头访问的方向 cout磁盘调度顺序为:;if(d=0|d=1)if(d=1)/磁头向外侧访问 for(j=r;jn;j+)/先访问外侧磁道再转向最里欲访问磁道 coutaj;名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 10 页 -计算机与通信工程学院9 for(j=0;jr;j+)coutaj=0;j-)coutaj=r;j-)/coutaj;sum=2*an-1-2*a0+now-ar;else cout请输入 0 或 1!;coutendl;cout移动的总道数:sumendl;实验结果:1.先来先服务算法(FCFS)测试结果2.最短寻道时间算法(SSTF)测试结果名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 10 页 -计算机与通信工程学院10 3.循环扫描算法(SCAN)测试结果4.循环扫描算法(CSCAN)测试结果由以上测试结果可知,在相同的实验前提下,SSTF 移动的总道数最少,性能最优附录(可包括源程序清单或其它说明)名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 10 页 -