江西师范大学计算机信息工程学院学生实验报告
专业_ 计算机科学与技术姓名___马化梁学号____1308092042 日期__2015.6.5_ 课程名称操作系统实验室名称X4313
实验名称设备管理-电梯调度算法
指导教师朱明华成绩
1、实验目的
本实验要求学生设计一个电梯调度算法来模拟实现磁盘移臂调度过程。
2、实验原理和内容
任何一个对磁盘的访问请求,应给出访问磁盘的存储空间地址:柱面号、磁头号和扇区号。
在启动磁盘执行I/O操作时,应先把移动臂移动到指定的柱面,再等待指定的扇区旋转到磁头位置下,最后让指定的磁头进行读/写,完成信息传送。
移臂调度是根据访问者指定的柱面位置来决定执行次序的调度。
3、实验步骤
(1)弄清实验要求及目的;
(2)想清思路;
(3)设计代码;
(4)实现代码。
4、程序及运行结果(或实验数据记录及分析)
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=1024;
int N,a[maxn];
int main()
{
int flag=1,m;
while(flag)
{
cout<<"电梯调度算法"<<endl;
cout<<"请输入需要访问的柱面数"<<endl;
cin>>N;
cout<<"请输入相应的柱面号"<<endl;
for(int i=0;i<N;i++)
cin>>a[i];
sort(a,a+N);
cout<<"请输入执行I/O操作的起始位置(柱面号)"<<endl;
int x,flag1=1;
while(flag1)
{
int flag2=0;
cin>>x;
for(int i=0;i<N;i++)
if(a[i]==x) m=i,flag2=1;
if(!flag2)
{
cout<<"此起始位置不存在,请重新输入"<<endl;
flag1=1;
}
else
{
cout<<"请输入磁头移动方向1或-1(1代表磁头从外往内移动,-1代表磁头由内往外移动)"<<endl;
int y,sum=0;
cin>>y;
if(y==1)
{
for(int i=m+1;i<N;i++)
{
sum+=(a[i]-a[i-1]);
cout<<"柱面访问的序列号为: ";
for(int j=m;j<=i;j++)
cout<<a[j]<<" ";
cout<<"此时读/写磁头总共移动的距离为: "<<sum<<endl;
}
sum+=a[N-1]-a[m-1];
for(int i=m-2;i>=0;i--)
{
sum+=(a[i+1]-a[i]);
cout<<"柱面访问的序列号为: ";
for(int j=m;j<N;j++)
cout<<a[j]<<" ";
for(int j=m-1;j>=i;j--)
cout<<a[j]<<" ";
cout<<"此时读/写磁头总共移动的距离为: "<<sum<<endl;
}
}
else
{
for(int i=m-1;i>=0;i--)
{
sum+=(a[i+1]-a[i]);
cout<<"柱面访问的序列号为: ";
for(int j=m;j>=i;j--)
cout<<a[j]<<" ";
cout<<"此时读/写磁头总共移动的距离为: "<<sum<<endl;
}
sum+=a[m+1]-a[0];
for(int i=m+2;i<N;i++)
{
sum+=(a[i]-a[i-1]);
cout<<"柱面访问的序列号为: ";
for(int j=m;j>=0;j--)
cout<<a[j]<<" ";
for(int j=m+1;j<=i;j++)
cout<<a[j]<<" ";
cout<<"此时读/写磁头总共移动的距离为: "<<sum<<endl;
}
}
flag1=0;
}
}
cout<<"电梯调度算法结束,是否继续(Y or N):"<<endl;
char z;
cin>>z;
if(z=='Y'||z=='y') flag=1;
else flag=0;
}
return 0;
}。