磁盘调度算法的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《操作系统--磁盘调度算法》
实验报告
姓名:范学升
学号:1001050903
班级:电科10-1班
专业:电子信息科学与技术
一、实验目的:
通过模拟设计磁盘驱动调度程序,观察驱动调度程序的动态运行过程,理解和掌握磁盘驱动调度的职能,并比较各种算法的调度结果。
二、实验内容:
要求设计主界面能灵活选择某算法,且实现以下算法:
(1)先来先服务算法(FCFS)
(2)最短寻道时间优先算法(SSTF)
(3)扫描算法(SCAN)
(4)循环扫描算法(CSCAN)
三、实验步骤
详细设计:
源代码
#include
#include
using namespace std;
void FCFS(int a[],int n);
void SSTF(int a[],int n);
void SCAN(int a[],int n);
void CSCAN(int a[],int n);
int main()
{
int n;//磁道的个数
int s;//功能号
cout<<"请输入磁道的个数:"< cin>>n; int *a=new int[n]; cout<<"生成随机磁道号..."< srand((unsigned)time(NULL)); for(int i=0;i { a[i]=(rand()%100)+1; cout< } cout< while(1) { cout< cout<<"1、先来先服务算法(FCFS)"< cout<<"4、循环扫描算法(CSCAN)"< cout<<"0、退出"< cout< cout<<"请选择功能号:"; cin>>s; if(s>4) { cout<<"输入有误!"< } else { switch(s) { case 0: exit(0);break ; case 1:FCFS(a,n); break; case 2:SSTF(a, n);break; case 3:SCAN(a, n);break; case 4:CSCAN(a,n);break; } } } return 0; } //先来先服务调度算法(FCFS) void FCFS(int a[],int n) { int sum=0,j,i,first=0,now; cout<<"请输入当前磁道号:"; cin>>now;//确定当前磁头所在位置 cout<<"磁盘调度顺序为:"< for( i=0;i { cout< } //计算sum for(i=0,j=1;j { first+=abs(a[j]-a[i]);//外围磁道与最里面磁道的距离 } sum+=first+abs(now-a[0]); cout< cout<<"移动的总磁道数: "< } 最短寻道时间算法(SSTF) void SSTF(int a[],int n) { int temp; int k=1; int now,l,r; int i,j,sum=0; //将磁道号按递增排序 for(i=0;i for(j=i+1;j { if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } cout<<"按递增顺序排好的磁道:"< for( i=0;i { cout< } cout< cout<<"请输入当前的磁道号:"; cin>>now;//确定当前磁头所在位置 cout<<"磁盘调度顺序为:"< if(a[n-1]<=now)//当前磁头位置大于最外围欲访问磁道{ for(i=n-1;i>=0;i--) cout< sum=now-a[0]; } else if(a[0]>=now)//当前磁头位置小于最里欲访问磁道 { for(i=0;i cout< sum=a[n-1]-now; } else { while(a[k] k++; } l=k-1;//在磁头位置的前一个欲访问磁道 r=k;//磁头欲访问磁道 while((l>=0)&&(r { if((now-a[l])<=(a[r]-now))//选择离磁头近的磁道 { cout< sum+=now-a[l]; now=a[l]; l=l-1; } else { cout< sum+=a[r]-now; now=a[r]; r=r+1; } } if(l=-1)//磁头位置里侧的磁道已访问完 { for(j=r;j {