广州大学学生实验报告
开课学院及实验室:计算机科学与工程实验室 2015 年12 月 1日实验课程名称 实验项目名称 操作系统 成绩 指导老师 陈康民 文件管理实验 (***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***)
一、实验目的
要求模拟先来先服务法(First-Come, First-Served,FCFS),最短寻道时间优先法(Shortest Seek Time First, SSTF),电梯法(SCAN),循环扫描算法(CSCAN)四种磁盘调度算法,输入为一组请求访问磁道序列,输出为每种调度算法的磁头移动轨迹和移动的总磁道数。
二、 实验内容
编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度: 1、先来先服务算法(FCFS) 2、最短寻道时间优先算法(SSTF) 3、扫描算法(SCAN) 4、循环扫描算法(CSCAN)
三、 实验设备
带Linux操作系统的电脑一台。
四、实验过程原始数据记录
实验代码:
#include
int TrackOrder[MaxNumber];//磁盘访问序列 int MoveDistance[MaxNumber];//磁头每次移动的距离 double AverageDistance;//平均寻道长度
bool direction;//SCAN和CSCAN算法的磁头移动方向 int M;//开始磁道号 int N;//磁道个数
void inputData() {
cout<<\请输入磁道个数N: \cin>>N;
cout<<\请输入磁盘访问顺序(此部分由文件读入)。\
fstream fin(\磁盘调度文件.txt\
for(int i=0;i void showData() { cout<<\显示配置信息 fin>>TrackOrder[i]; cout<<\请输入开始磁盘号M: \cin>>M; =============================\\n\ } void FCFS() { int i,j; int sum=0; float avg; int Fcfs[MaxNumber]; int sumArray[MaxNumber]; for(i=0;i Fcfs[i]=TrackOrder[i]; cout<<\输入磁道个数N为:\开始磁盘号M:\cout<<\磁盘访问序列为: \for(int i=0;i cout< cout< } //sum=0; sumArray[0]=abs(M-Fcfs[0]); //cout<<\磁盘调度算法:\cout<<\从\号磁道开始\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<<\总寻道长度:\ cout<<\平均寻道长度:\ 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 //cout<<\磁盘调度算法:\cout<<\从\号磁道开始\cout<<\被访问的下一个磁道号: \ if(Sstf[N-1]<=Mnow)//若被访问的下一个最大的磁道号不大于当前的磁道号 { } else { if(Sstf[0]>=Mnow) { for(i=0,s=0;i for(i=N-1,s=0;i>=0;i--,s++) { } cout< if(Sstf[i]>Sstf[j])//将磁道号从小到大排序 } { } temp=Sstf[i]; Sstf[i]=Sstf[j]; Sstf[j]=temp; } } cout< else { while(Sstf[k] if(Mnow-Sstf[l]<=(Sstf[r]-Mnow)) { while(l>=0) { cout< sumArray[s]=Mnow-Sstf[l]; k++; s=s+1; } Mnow=Sstf[0]; for(j=r;j cout< sum=sum+Mnow-Sstf[l]; Mnow=Sstf[l]; l=l-1; sum+=Sstf[j]-Mnow;