资源简介
描编程序实现磁盘调度算法,并求出每种算法的平均寻道长度。设计要求:
(1)能够输入程序要访问的磁道序列或系统自动生成程序要访问的磁道序列和磁头当前所在的磁道数。
(2)可以选择某磁盘调度算法(先来先服务算法、最短寻道时间优先算法、扫描算法和循环扫描算法)。
(3)能够以图表形式显示磁盘调度顺序和平均寻道长度。
代码片段和文件信息
#include
#include
using namespace std;
int M=1000;
int N=1000;
int Page[100];//磁道数组
int Move[100];//访问数组
int move[100];//移动距离数组
void FCFS( );//先来先服务
void SSTF( );//最短寻到时间优先
void SCAN( );//扫描算法
void CSCAN( );//循环扫描算法
void input();//输入
void init();//更新
void output();//输出
// 9 2 55 58 39 18 90 160 150 38 184 100
int main(){
int option=1;
cout<<“*************模拟磁盘调度过程算法*************“< input();
int T=1;
while(T){
cout<<“**************************************************************“< cout<<“ 0.exit 1.FCFS 2.SSTF 3.SCAN 4.CSCAN 5.return “< cout<<“**************************************************************“< cout<<“请选择要用的功能号(0~5):“;cin>>option;
switch (option){
case 0:cout<<“**********模拟磁盘调度过程结束欢迎提出宝贵意见!**********“< case 1: cout<<“ 先来先服务算法\n“< case 2: cout<<“ 最短寻道时间优先算法\n“< case 3: cout<<“ 扫描算法\n“< case 4: cout<<“ 循环扫描算法\n“< case 5: input();break;
default: cout<<“输入的功能号无效请正确选择功能号(0-5)!“< }
}
return 0;
}
void input(){ //页面数组初始化函数及输出界面
cout<<“请输入模拟磁道的个数:“;int m;cin>>m;M=m;
int z=1;int option=1;
while(option){
cout<<“请对模拟磁道序列的输入方式进行选择(1自动产生、2手动输入):“;//选择初始化方式automatic or give
cin>>z;
switch (z){
case 1:{ //系统自动随机初始化
for(int x=0;x Page[x]=rand()%9+1;
}
cout<<“系统自动产生的磁道序列如下:“< for(x=0;x cout< }
cout< z=0;option =0;
}
break;
case 2:{
cout<<“请输入手动生成的磁道序列:“; //人工输入初始化
for(int i=0;i cin>>Page[i];
}
z=0;option =0;
}
break;
default: cout<<“输入的功能号无效请正确选择功能号(1或2)!“< }
}
int now=0;
cout<<“请输入当前磁道号:“;
cin>>now; N=now;
int i;
for( i=0 ;i Move[i]=Page[i];
}
}
void output(){
int i;int j;
for( i=0j=1;i //cout< printf(“%5d“Move[i]);
move[j]=abs(Move[j]-Move[i]);
}
move[0]=abs(N-Move[0]);
cout<< “ 平均寻道长度“< cout<<“ “< int sum=0;
for( i=0;i //cout< printf(“%5d“move[i]);
sum=sum+move[i];
}
float averag=float(sum)/M;
printf(“ %7.1f“averag);
cout<< endl;
}
void FCFS( ){//先来先服务 FCFS
cout<<“ FCFS“;
}
void init(){
for(int i=0 ;i Move[i]=0;
}
for( i=0 ;i move[i]=0;
}
for( i=0 ;i Move[i]=Page[i];
}
}
void SSTF( ){//最短寻道时间算法 SSTF
int templrji;int now= N;int k=1;int sum=0;int a[100];//用来对访问数组交换时用
for(i=0;i for(j=i+1;j if(Move[i]>Move[j]){
temp=Move[i];
Move[i]=Move[j];
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 74752 2010-12-17 12:50 磁盘调度\Debug\vc60.idb
文件 110592 2010-12-17 12:50 磁盘调度\Debug\vc60.pdb
文件 553030 2010-12-17 12:50 磁盘调度\Debug\磁盘调度算法.exe
文件 793760 2010-12-17 12:50 磁盘调度\Debug\磁盘调度算法.ilk
文件 261290 2010-12-17 12:50 磁盘调度\Debug\磁盘调度算法.obj
文件 2001404 2010-12-17 12:50 磁盘调度\Debug\磁盘调度算法.pch
文件 1098752 2010-12-17 12:50 磁盘调度\Debug\磁盘调度算法.pdb
文件 6184 2010-12-16 16:15 磁盘调度\磁盘调度算法.cpp
文件 3475 2010-12-17 12:50 磁盘调度\磁盘调度算法.dsp
文件 549 2010-12-17 12:50 磁盘调度\磁盘调度算法.dsw
文件 33792 2010-12-17 12:50 磁盘调度\磁盘调度算法.ncb
文件 48640 2010-12-17 12:50 磁盘调度\磁盘调度算法.opt
文件 776 2010-12-17 12:50 磁盘调度\磁盘调度算法.plg
目录 0 2010-12-17 12:50 磁盘调度\Debug
目录 0 2010-12-17 12:50 磁盘调度
----------- --------- ---------- ----- ----
4986996 15
- 上一篇:仿京东地址选择
- 下一篇:基本web数据挖掘中的聚类算法研究
评论
共有 条评论