SCAN 磁盘调度模拟实现_第1页
SCAN 磁盘调度模拟实现_第2页
SCAN 磁盘调度模拟实现_第3页
SCAN 磁盘调度模拟实现_第4页
SCAN 磁盘调度模拟实现_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、信息科学与电气工程学院上机实验报告学号: 姓名: 班级: 课程:操作系统 指导教师: 时间: 2017年11月29日 SCAN 磁盘调度模拟实现一实验目的1) 理解磁盘调度相关理论;2) 掌握多种磁盘调度算法;3) 彻底掌握 SCAN 磁盘调度算法。二、实验内容本实验主要针对操作系统中磁盘调度相关理论进行实验。要求实验者设计一个程序,该程序模拟操作系统的磁盘调度,调度采用SCAN 算法。1) 设计磁盘调度请求队列(请求数10);2) 设定单位寻道时间;3) 可动态修改发出磁盘请求的时间和磁道号;4) 实现 SCAN 磁盘调度算法;5) 实现动态调度并输出调度序列。#include stdafx

2、.h#include #include #include #include #define maxsize 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)(stri-0)*pow(10,a-i-1); return

3、sum; /*冒泡排序算法*/ int *bubble(int cidao,int m) int i,j; int temp;for(i=0;im;i+) /使用冒泡法按从小到大顺序排列 for(j=i+1;jcidaoj) temp=cidaoi; cidaoi=cidaoj; cidaoj=temp; cout排序后的磁盘序列为; for( i=0;im;i+) /输出排序结果 coutcidaoi ; coutendl; return cidao; /*扫描调度算法*/ void SCAN(int cidao,int m) /先要给出当前磁道号和移动臂的移动方向 int k=1; int

4、 now,l,r,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 now=trans(str,a); /输入当前磁道号 if(cidaom-1=now) /若当前磁道号大于请求序列中最大者则直接由外向内依次给予各 /请求服务,此情况同最短寻道优先 cout=0;i-) coutcidaoi=now) /若当前磁

5、道号小于请求序列中最小者则直接由内向外依次给予各请 /求服务,此情况同最短寻道优先 cout磁盘扫描序列为; for(i=0;im;i+) coutcidaoicidao0&nowcidaom-1) /若当前磁道号大于请求序列中最小者且小于最大者 while(cidaoknow) k+; l=k-1; r=k; coutd; if(d=0) /选择移动臂方向向内则先向内扫描 cout=0;j-) coutcidaoj ; /输出向内扫描的序列 for(j=r;jm;j+) /磁头移动到最小号则改变方向向外扫描未扫描的磁道 coutcidaoj ; /输出向外扫描的序列 sum=now-2*ci

6、dao0+cidaom-1; else /选择移动臂方向向外则先向外扫描 cout磁盘扫描序列为; for(j=r;jm;j+) coutcidaoj=0;j-) /磁头移动到最大号则改变方向向内扫描未扫描的磁道 coutcidaoj ; sum=-now-cidao0+2*cidaom-1; ave=(float)(sum)/(float)(m); coutendl; cout平均寻道长度 aveendl; /*循环扫描调度算法*/ void main() int a; int cidaomaxsize; int i=0,count; char str100; cout请输入磁道序列0结束str; /对输入数据进行有效性判断 a=decide(str); if(a=0) cout输入数据的类型错误,请重新输入str; /对输入数据进行有效性判断 a=decide(str); if(a=0) cout输入数据的类型错误,请重新输入endl; else cidaoi=trans(str,a); i+; count=i-1; /要访问的磁道数 cout你输入的磁道序列为; for(i=0;icount;i+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论