XX学
计算机通信工程学院
实验报告
2013 2014 学年 第 学期
课程名称
操作系统
学号
学生姓名
年级
专业
教学班号
实验点
实验时间
2013年 月 日 第 节 月 日 第 节
讲教师
辅导教师
实验( 三 )
实验名称
磁盘调度算法实现
软件环境
VC++60
硬件环境
PC机
实验目
操作系统计算机科学技术专业信息计算科学专业科教学计划中门重专业基础课程计算机系统硬﹑软件资源进行理系统软件计算机系统理指挥中心通课程实验学生综合运程序设计基础语言数结构计算机原理接口等先行课程知识操作系统课程知识种资源理调度策略设计操作系统资源理模拟程序学生加深解操作系统工作机理操作系统功结构设计更加深入实践开发系统软件应软件基础
实验容(应包括实验题目实验求实验务等)
实验容:
1实验模拟操作系统磁盘寻道方式运磁盘访问序设计磁盘调度算法
2实现磁盘调度算法FCFSSSTFSCANCSCAN NStepSCAN算法
3设定开始磁道号寻道范围起始扫描磁道号磁道号数机产生进行寻道磁道号序列
4选择磁盘调度算法显示该算法磁道访问序计算出移动磁道总数均寻道总数
5算法寻道效率进行排序算法性进行分析较
实验求:
学生应正确设计关数结构功模块画出程序流程图编写程序程序执行结果应正确
实验程实验结果(包括实验实施步骤算法描述流程结等)
VC++60编写代码
#include
#include
using namespace std
void FCFS(int a[]int n)
void SSTF(int a[]int n)
void SCAN(int a[]int n)
void CSCAN(int a[]int n)
int main()
{
int n磁道数
int s功号
cout<<请输入磁道数:<
int *anew int[n]
cout<<生成机磁道号<
for(int i0i
a[i](rand()100)+1
cout< cout<
cout<
cin>>s
if(s>4){
cout<<输入误<
switch(s){ case 0 exit(0)break
case 1FCFS(an) break
case 2SSTF(a n)break
case 3SCAN(a n)break
case 4CSCAN(an)break } }}
return 0 }
先先服务调度算法(FCFS)
void FCFS(int a[]int n){
int sum0jifirst0now
cout<<请输入前磁道号:
cin>>now确定前磁头位置
cout<<磁盘调度序:<
cout<计算sum
for(i0j1j
}
sum+first+abs(nowa[0])
cout<
void SSTF(int a[]int n){
int temp
int k1
int nowlr
int ijsum0
磁道号递增排序
for(i0i
{
tempa[i]
a[i]a[j]
a[j]temp }}
cout<<递增序排磁道:<
cout<
cin>>now确定前磁头位置
cout<<磁盘调度序:<
for(in1i>0i)
cout< sumnowa[0]}
else
if(a[0]>now)前磁头位置里欲访问磁道
{
for(i0i
else{
while(a[k]
k++
}
lk1磁头位置前欲访问磁道
rk磁头欲访问磁道
while((l>0)&&(r
{
cout< sum+nowa[l]
nowa[l]
ll1 }
else{
cout< sum+a[r]now
nowa[r]
rr+1} }
if(l1)磁头位置里侧磁道已访问完
{
for(jrj
cout< sum+a[n1]a[0]}
if(rn)磁头位置外侧磁道已访问完
{
for(jk1j>1j) 访问磁头位置里侧磁道
{
cout< sum+a[n1]a[0]} }
cout<
扫描算法(SCAN)
void SCAN(int a[]int n)
{
int temp
int k1
int nowlr
int ijsum0
for(i0i
if(a[i]>a[j])
{
tempa[i]
a[i]a[j]
a[j]temp
}
}
cout<<递增序排磁道:<
cout<}
cout<
cin>>now
算法确定磁道访问序
if(a[n1]
for(in1i>0i)
cout< sumnowa[0]
}
else
if(a[0]>now) 磁头位置里欲访问磁道
{
for(i0i
}
else 磁头位置里侧磁道外侧磁道间
{ int d
while(a[k]
k++
}
lk1磁头位置前欲访问磁道
rk 磁头欲访问磁道
cout<<请输入前磁头移动方 (0 表示 1表示外)
cin>>d 确定磁头访问方
cout<<磁盘调度序:
if(d0||d1)
{
if(d0) 磁头
{
for(jlj>0j)
{
cout< }
for(jrj
cout< }
sumnow2*a[0]+a[n1]
}
if(d1) 磁头外
{
for(jrj
cout< }
for(jlj>0j)
{
cout< }
sum2*a[n1]nowa[0]
}
}
else
cout<<请输入01<
cout<
循环扫描算法(CSCAN)
void CSCAN(int a[]int n)
{
int temp
int nowlr
int ijsum0
int k1
for(i0i
if(a[i]>a[j])
{
tempa[i]
a[i]a[j]
a[j]temp
}
}
cout<<递增序排磁道:<
cout< }
cout<
cin>>now确定前磁道号
if(a[n1]
for(i0i
}
else
if(a[0]>now)磁头位置里欲访问磁道
{
for(i0i
}
else 磁头位置里侧磁道外侧磁道间
{ int d
while(a[k]
k++
}
lk1磁头位置前欲访问磁道
rk 磁头欲访问磁道
cout<<请输入前磁头移动方 (0 表示 1表示外)
cin>>d 确定磁头访问方
cout<<磁盘调度序:
if(d0||d1)
{
if(d1) 磁头外侧访问
{
for(jrj
cout< }
for(j0j
cout< }
sum2*a[n1]now2*a[0]+a[l]
}
if(d0) 磁头侧访问
{
for(jr1j>0j)
{
cout< }
for(jn1j>rj)
{
cout< }
sum2*a[n1]2*a[0]+nowa[r]
}
}
else
cout<<请输入01
}
cout<
实验结果:
1先先服务算法(FCFS)测试结果
2短寻道时间算法(SSTF)测试结果
3循环扫描算法(SCAN)测试结果
4循环扫描算法(CSCAN)测试结果
测试结果知相实验前提SSTF移动总道数少性优
附录(包括源程序清单说明)
天jing理工学
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档