《操作系统》课程实验报告
专 业:
班 级:
学 号:
姓 名:
日期: 20## 年 6月 2日
#include<iostream>
#include<iomanip>
#include<math.h>
using namespace std;
const int MaxNumber=100;
int TrackOrder[MaxNumber];
int MoveDistance[MaxNumber]; //----移动距离;
int FindOrder[MaxNumber]; //-----寻好序列。
double AverageDistance; //-----平均寻道长度
bool direction; //-----方向 true时为向外,false为向里
int BeginNum; //----开始磁道号。
int M; //----磁道数。
int N; //-----提出磁盘I/O申请的进程数 int SortOrder[MaxNumber]; //----排序后的序列
bool Finished[MaxNumber];
void Inith()
{
cout<<"请输入磁道数:"; cin>>M;
}
cout<<"请输入提出磁盘I/O申请的进程数:"; cin>>N; cout<<"请依次输入要访问的磁道号:"; for(int i=0;i<N;i++) cin>>TrackOrder[i]; for(int j=0;j<N;j++) MoveDistance[j]=0; cout<<"请输入开始磁道号:"; cin>>BeginNum; for(int k=0;k<N;k++) Finished[k]=false; for(int l=0;l<N;l++) SortOrder[l]=TrackOrder[l];
//=====================排序函数,将各进程申请的磁道按从小到大排列=================
void Sort()
{ //------冒泡排序
int temp;
for(int i=N-1;i>=0;i--)
for(int j=0;j<i;j++)
}
{ } if(SortOrder[j]>SortOrder[j+1]) { temp=SortOrder[j]; } SortOrder[j]=SortOrder[j+1]; SortOrder[j+1]=temp;
//============FCFS,先来先服务=================================
void FCFS()
{
int temp; temp=BeginNum; //--------将BeginNum赋给temp作为寻道时的当前所在磁道号
for(int i=0;i<N;i++) { MoveDistance[i]=abs(TrackOrder[i]-temp); //-------计算移动磁道数
temp=TrackOrder[i]; //-------寻
到后,将此道作为当前所在磁道号,赋给temp
FindOrder[i]=TrackOrder[i]; //-----寻好的赋给寻好序列
}
//========SSTF,最短寻道法=============================
void SSTF()
{
int temp,n; int A=M; temp=BeginNum; //--------将BeginNum赋给} temp作为寻道时的当前所在磁道号
for(int i=0;i<N;i++) { for(int j=0;j<N;j++) //-------寻找最短的寻道长度
{ if(abs(TrackOrder[j]-temp)<A&&Finished[j]==false) { A=abs(TrackOrder[j]-temp); n=j;
} } else continue; Finished[n]=true; //-------将已经寻找到的Finished赋值为true
}
//=====================SCAN,
==========================
void SCAN()
{
向
} MoveDistance[i]=A; //-------寻道长度 temp=TrackOrder[n]; //-------当前寻道号。 A=M; //-----重置A值 FindOrder[i]=TrackOrder[n]; //----寻好的赋给寻好序列 扫描算法int m,n,temp; temp=BeginNum; Sort(); //------排序 cout<<"请选择开始方向:1--向外;0---向里"; //------选择扫描方cin>>m;
if(m==1) direction=true; else if(m==0) direction=false; else cout<<"输入错误"; for(int i=0;i<N;i++) { if(SortOrder[i]<BeginNum) continue; else { } n=i; break; } if(direction==true) //------选择向外 { for(int i=n;i<N;i++) { MoveDistance[i-n]=abs(SortOrder[i]-temp);
} } temp=SortOrder[i]; FindOrder[i-n]=SortOrder[i]; for(int j=n-1;j>=0;j--) { } MoveDistance[N-1-j]=abs(SortOrder[j]-temp); temp=SortOrder[j]; FindOrder[N-1-j]=SortOrder[j]; else //-------选择向里 { for(int i=n-1;i>=0;i--) { MoveDistance[N-i-4]=abs(SortOrder[i]-temp); temp=SortOrder[i]; FindOrder[N-i-4]=SortOrder[i]; } for(int j=n;j<N;j++) { MoveDistance[j]=abs(SortOrder[j]-temp);
temp=TrackOrder[j];
FindOrder[j]=SortOrder[j];
}
}
}
//=================CSCAN,循环扫=======================
void CSCAN()
{
int m,n,temp;
temp=BeginNum;
Sort();
cout<<"请选择开始方向:1--向外;0---向里"; cin>>m;
if(m==1)
direction=true;
else if(m==0)
direction=false;
else
cout<<"输入错误";
描算法
for(int i=0;i<N;i++) { } if(direction==true) { for(int i=n;i<N;i++) { } for(int j=0;j<n;j++) { MoveDistance[N-n+j]=abs(SortOrder[j]-temp); temp=SortOrder[j]; MoveDistance[i-n]=abs(SortOrder[i]-temp); temp=SortOrder[i]; FindOrder[i-n]=SortOrder[i]; if(SortOrder[i]<BeginNum) continue; else { } n=i; break;
} } } FindOrder[N-n+j]=SortOrder[j]; else { for(int i=n-1;i>=0;i--) { } for(int j=N-1;j>=n;j--) { } MoveDistance[N-j+n-1]=abs(SortOrder[j]-temp); temp=SortOrder[j]; FindOrder[N-j+n-1]=SortOrder[j]; MoveDistance[n-1-i]=abs(SortOrder[i]-temp); temp=SortOrder[i]; FindOrder[n-1-i]=SortOrder[i]; }
//========计算平均寻道时间============== void Count()
{
}
void Show()
{
cout<<"================从"<<BeginNum<<"号磁道开始int Total=0; for(int i=0;i<N;i++) { } AverageDistance=((double)Total)/((double)N); Total+=MoveDistance[i]; ====================="<<endl;
cout<<setw(20)<<"被访问的下一个磁道号"<<setw(20)<<"移动距离(磁道数)"<<endl;
for(int i=0;i<N;i++) { cout<<setw(15)<<FindOrder[i]<<setw(15)<<MoveDistance[i]<<endl; } cout<<setw(20)<<"平均寻道长度:"<<AverageDistance<<endl; cout<<endl;
}
int main() {
int y=1; int s; Inith(); while(y) { cout<<"请选择寻道方式:1--FCFS; 2--SSTF; 3--SCAN;4--CSCSN;"; cin>>s; switch(s) { case 1:FCFS();Count();Show();break; } cout<<"是否继续选择寻道算法?1--是;2--否"; int p; cin>>p; y=p; case 2:SSTF();Count();Show();break; case 3:SCAN();Count();Show();break; case 4:CSCAN();Count();Show();break;
} } return 0;
目录目录11课程设计目的111编写目的12课程设计内容121设计内容131模块调用关系图34测试数据和结果75参考文献106总结1…
安徽师范大学专业名称实验室实验课程实验名称姓名学号同组人员实验日期20xx614软件工程操作系统实验123456789101112…
操作系统磁盘调度算法实验报告目录一、课程设计目的.........................................…
操作系统实验报告课程名称计算机操作系统实验项目名称磁盘调度实验时间班级姓名学号实验目的对操作系统的磁盘调度基础理论和重要算法的理解…
操作系统实验报告实验三学生俞泽涛学号20xx06090131学院电气与信息工程学院系别计算机系专业网络工程实验时间20xx年5月2…
操作系统实验报告课程名称计算机操作系统实验项目名称磁盘调度实验时间班级姓名学号实验目的对操作系统的磁盘调度基础理论和重要算法的理解…
磁盘调度算法磁盘调度一实验目的磁盘是高速大容量旋转型可直接存取的存储设备它作为计算机系统的辅助存储器担负着繁重的输入输出工作在现代…
1操作系统课程设计磁盘调度算法操作系统实验报告磁盘调度实验六磁盘调度算法一实验目的复习模拟实现一种磁盘调度算法进一步加深对磁盘调度…
武汉理工大学学生实验报告书实验课程名称计算机操作系统开课学院计算机科学与技术学院指导老师姓名蔡菁学生姓名常云鹏学生专业班级计算机1…
课程设计报告题目磁盘调度算法设计课程名称操作系统课程设计院部名称信息技术学院专业11计算机科学与技术班级11计算计科学与技术(2)…