《操作系统实验磁盘调度算法实验报告(共17页).doc》由会员分享,可在线阅读,更多相关《操作系统实验磁盘调度算法实验报告(共17页).doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上安徽师范大学 学院实验报告专业名称 软件工程实 验 室 2#201实验课程 操作系统实验实验名称 磁盘调度算法姓 名 学 号 同组人员实验日期 2013/6/14注:实验报告应包含(实验目的,实验原理,主要仪器设备和材料,实验过程和步骤,实验原始数据记录和处理,实验结果和分析,成绩评定)等七项内容。具体内容可根据专业特点和实验性质略作调整,页面不够可附页。一、 实验目的通过这个实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS、最短寻道时间优先SSTF、SCAN、CSCAN算法。二、 实验内容利用高级语言编写先来先服务FCFS、最短寻道时间优先SSTF、SC
2、AN、CSCAN算法。三、 实验环境1PC微机。2Windows 操作系统。3C/C+/VB开发集成环境。四、实验源代码#include #include #include #include #define maxnumber 1000 int decide(char str) /判断输入数据是否有效 int i=0; while(stri!=0) if(stri9) return 0; break; i+; return i; int trans(char str,int a) /将字符串转换成数字 int i; int sum=0; for(i=0;ia;i+) sum=sum+(int)
3、(stri-0)*pow(10,a-i-1); return sum; int *bubble(int cidao,int m) int i,j; int t; for(i=0;im;i+) /使用冒泡法按从小到大顺序排列 for(j=i+1;jcidaoj) t=cidaoi; cidaoi=cidaoj; cidaoj=t; cout排序后的磁盘序列为:; for( i=0;im;i+) /输出排序结果 coutcidaoi ; coutendl; return cidao; void FCFS(int cidao,int m) /磁道号数组,个数为m int n;/当前磁道号 int s
4、um=0; /总寻道长度 int j,i; int b; char str100; float ave; /平均寻道长度 cout磁盘请求序列为:; for( i=0;im;i+) /按先来先服务的策略输出磁盘请求序列 coutcidaoi ; coutendl; coutstr; /对输入数据进行有效性判断 b=decide(str); if(b=0) cout输入数据的类型错误,请重新输入!endl; goto B; else n=trans(str,b); /输入当前磁道号 sum+=abs(cidao0-n); cout磁盘扫描序列为:; for( i=0;im;i+) /输出磁盘扫描
5、序列 coutcidaoi ; for(i=0,j=1;jm;i+,j+) /求平均寻道长度 sum+=abs(cidaoj-cidaoi); ave=(float)(sum)/(float)(m); coutendl; cout平均寻道长度:aveendl; void SSTF(int cidao,int m) int r=1; int n,l,s; int i,j,sum=0; int a; char str100; float ave; cidao=bubble(cidao,m); /调用冒泡排序算法排序 coutstr; /对输入数据进行有效性判断 a=decide(str); if(
6、a=0) cout输入数据的类型错误,请重新输入!endl; goto C; else n=trans(str,a); /输入当前磁道号 if(cidaom-1=n) /若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务 cout=0;i-) coutcidaoi=n) /若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务 cout磁盘扫描序列为:; for(i=0;im;i+) coutcidaoicidao0&ncidaom-1) /若当前磁道号大于请求序列中最小者且小于最大者 cout磁盘扫描序列为:; while(cidaor=0)&(sm) /当前磁道
7、在请求序列范围内 if(n-cidaol)=(cidaos-n) /选择与当前磁道最近的请求给予服务 coutcidaol ; sum+=n-cidaol; n=cidaol; l=l-1; else coutcidaos ; sum+=cidaos-n; n=cidaos; s=s+1; if(l=-1) /磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道 for(j=s;jm;j+) coutcidaoj=0;j-) coutcidaoj ; sum+=cidaom-1-cidao0; ave=(float)(sum)/(float)(m); coutendl; cout平均寻道长度:
8、aveendl; void SCAN(int cidao,int m) /先要给出当前磁道号和移动臂的移动方向 int r=1; int n,l,s,d; int i,j,sum=0; int a; char str100; float ave; cidao=bubble(cidao,m); /调用冒泡排序算法排序 coutstr; /对输入数据进行有效性判断 a=decide(str); if(a=0) cout输入数据的类型错误,请重新输入!endl; goto D; else n=trans(str,a); /输入当前磁道号 if(cidaom-1=n) /若当前磁道号大于请求序列中最大
9、者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先 cout=0;i-) coutcidaoi=n) /若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先 cout磁盘扫描序列为:; for(i=0;im;i+) coutcidaoicidao0&ncidaom-1) /若当前磁道号大于请求序列中最小者且小于最大者 while(cidaorn) r+; l=r-1; s=r; coutd; if(d=0) /选择移动臂方向向内,则先向内扫描 cout=0;j-) coutcidaoj ; /输出向内扫描的序列 for(j=s;jm;j+) /磁头移
10、动到最小号,则改变方向向外扫描未扫描的磁道 coutcidaoj ; /输出向外扫描的序列 sum=n-2*cidao0+cidaom-1; else /选择移动臂方向向外,则先向外扫描 cout磁盘扫描序列为:; for(j=s;jm;j+) coutcidaoj=0;j-) /磁头移动到最大号,则改变方向向内扫描未扫描的磁道 coutcidaoj ; sum=-n-cidao0+2*cidaom-1; ave=(float)(sum)/(float)(m); coutendl; cout平均寻道长度: aveendl; void CSCAN(int cidao,int m) int r=1
11、; int n,l,s; int i,j,sum=0; int a; char str100; float ave; cidao=bubble(cidao,m); /调用冒泡排序算法排序 coutstr; /对输入数据进行有效性判断 a=decide(str); if(a=0) cout输入数据的类型错误,请重新输入!endl; goto E; else n=trans(str,a); /输入当前磁道号 if(cidaom-1=n) /若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务 cout磁盘扫描序列为:; for(i=0;im;i+) coutcid
12、aoi=n) /若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先 cout磁盘扫描序列为:; for(i=0;im;i+) coutcidaoicidao0&ncidaom-1) /若当前磁道号大于请求序列中最小者且小于最大者 cout磁盘扫描序列为:; while(cidaorn) /单向反复地从内向外扫描 r+; l=r-1; s=r; for(j=s;jm;j+) coutcidaoj ; /输出从当前磁道向外扫描的序列 for(j=0;js;j+) /当扫描完最大号磁道,磁头直接移动到最小号磁道,再向外扫描未扫描的磁道 coutcidaoj ;
13、sum=2*cidaom-1+cidaol-n-2*cidao0; ave=(float)(sum)/(float)(m); coutendl; cout平均寻道长度: aveendl; void main() int a; int c; /菜单项 int cidaomaxnumber; int i=0,count; char str100; cout请输入磁道序列(0结束):str; /对输入数据进行有效性判断 a=decide(str); if(a=0) cout输入数据的类型错误,请重新输入!str; /对输入数据进行有效性判断 a=decide(str); if(a=0) cout输入
14、数据的类型错误,请重新输入!endl; else cidaoi=trans(str,a); i+; count=i-1; /要访问的磁道数 cout你输入的磁道序列为:; for(i=0;icount;i+) coutcidaoi ; /输出磁道序列 coutendl; while(1) coutendl; cout*endl; cout* *endl; cout* 1. 先 来 先 服 务 *endl; cout* 2. 最 短 寻 道 时 间 优 先 *endl; cout* 3. 扫 描 调 度 *endl; cout* 4. 循 环 扫 描 *endl; cout* 5. 退 出 *e
15、ndl; cout* *endl; cout*endl; G:coutstr; /对输入数据进行有效性判断 a=decide(str); if(a=0) cout输入数据的类型错误,请重新输入!5) cout数据输入错误!请重新输入endl; goto G; switch(c) case 1: /使用FCFS算法 FCFS(cidao,count); break; case 2: /使用SSTF算法 SSTF(cidao,count); break; case 3: /使用SCAN算法 SCAN(cidao,count); break; case 4: /使用CSCAN算法 CSCAN(cidao,count); break; 五、 实验结果成绩评定:1、 根据实验情况和实验报告质量作出写事性评价2、 评分 综合评分折合成等级指导教师签名:时间: 年 月 日专心-专注-专业