磁盘调度算法的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

{

cout<

}

sum+=a[n-1]-a[0];

}

if(r==n)//磁头位置外侧的磁道已访问完

相关文档
最新文档