05操作系统实验_磁盘管理实验要点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广州大学学生实验报告
(***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***)
一、实验目的
要求模拟先来先服务法(First-Come, First-Served,FCFS),最短寻道时间优先法(Shortest Seek Time First, SSTF),电梯法(SCAN),循环扫描算法(CSCAN)四种磁盘调度算法,输入为一组请求访问磁道序列,输出为每种调度算法的磁头移动轨迹和移动的总磁道数。
二、实验内容
编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度:
1、先来先服务算法(FCFS)
2、最短寻道时间优先算法(SSTF)
3、扫描算法(SCAN)
4、循环扫描算法(CSCAN)
三、实验设备
带Linux操作系统的电脑一台。
四、实验过程原始数据记录
实验代码:
#include
#include
#include
#include
using namespace std;
const int MaxNumber=100;
int TrackOrder[MaxNumber];//磁盘访问序列
int MoveDistance[MaxNumber];//磁头每次移动的距离
double AverageDistance;//平均寻道长度
bool direction;//SCAN和CSCAN算法的磁头移动方向
int M;//开始磁道号
int N;//磁道个数
void inputData()
{
cout<<"请输入磁道个数N: ";
cin>>N;
cout<<"\n请输入磁盘访问顺序(此部分由文件读入)。"< fstream fin("F://磁盘调度文件.txt"); for(int i=0;i fin>>TrackOrder[i]; cout<<"\n请输入开始磁盘号M: "; cin>>M; } void showData() { cout<<"\n===============================显示配置信息 =============================\n"; cout<<"\n输入磁道个数N为:"< cout<<"\n磁盘访问序列为: "; for(int i=0;i cout< cout< } void FCFS() { int i,j; int sum=0; float avg; int Fcfs[MaxNumber]; int sumArray[MaxNumber]; for(i=0;i Fcfs[i]=TrackOrder[i]; //sum=0; sumArray[0]=abs(M-Fcfs[0]); //cout<<"FCFS磁盘调度算法:"< cout<<"\n从"< cout<<"被访问的下一个磁道号: "; for(i=0;i cout< cout< cout<<"对应移动距离(磁道数): "< for(i=0,j=1;j { sumArray[j]=abs(Fcfs[j]-Fcfs[i]); cout< } for(i=0;i sum=sum+sumArray[i]; avg=(float)sum/N; cout<<"\n总寻道长度:"< cout<<"\n平均寻道长度:"< void SSTF() { int i,j; int k=1; int s=0; int temp; int l,r; int sum=0; float avg=0; int Sstf[MaxNumber]; int sumArray[MaxNumber]; int Mnow; Mnow=M; for(i=0;i Sstf[i]=TrackOrder[i]; //sum=0; //sumArray[0]=abs(M-Fcfs[0]); for(i=0;i { for(j=i+1;j { if(Sstf[i]>Sstf[j])//将磁道号从小到大排序 { temp=Sstf[i]; Sstf[i]=Sstf[j]; Sstf[j]=temp; } } } //cout<<"SSTF磁盘调度算法:"< cout<<"\n从"< cout<<"被访问的下一个磁道号: "; if(Sstf[N-1]<=Mnow)//若被访问的下一个最大的磁道号不大于当前的磁道号{ for(i=N-1,s=0;i>=0;i--,s++) { cout< sumArray[s]=Mnow-Sstf[i]; sum+=Mnow-Sstf[i]; Mnow=Sstf[i]; } } else { if(Sstf[0]>=Mnow) { for(i=0,s=0;i {