磁盘调度算法的实现

《操作系统--磁盘调度算法》

实验报告

姓 名: 范学升

学 号: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

cout

cout

cout

cout

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]

{

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])

{

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)//磁头位置外侧的磁道已访问完

{

for(j=k-1;j>-1;j--) //访问磁头位置里侧的磁道

{

cout

}

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

}

}

cout

cout

}

扫描算法(SCAN)

void SCAN(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;

//以下算法确定磁道访问顺序

if(a[n-1]

{

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 //磁头位置在最里侧磁道与最外侧磁道之间 { int d;

while(a[k]

{ //确定当前磁道在已排的序列中的位置

k++;

}

l=k-1;//在磁头位置的前一个欲访问磁道

r=k; //磁头欲访问磁道

cout>d; //确定磁头访问的方向

cout

if(d==0||d==1)

{

if(d==0) //磁头向内

{

for(j=l;j>=0;j--)

{

cout

}

for(j=r;j

{

cout

}

sum=now-2*a[0]+a[n-1];

}

if(d==1) //磁头向外

{

for(j=r;j

{

cout

}

for(j=l;j>=0;j--)

{

cout

}

sum=2*a[n-1]-now-a[0];

}

}

else

cout

}

cout

cout

}

循环扫描算法(CSCAN)

void CSCAN(int a[],int n)

{

int temp;

int now,l,r;

int i,j,sum=0;

int k=1;

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;//确定当前磁道号

if(a[n-1]

{

for(i=0;i

cout

sum=now-2*a[0]+a[n-1];

}

else

if(a[0]>=now)//磁头位置小于最里欲访问磁道

{

for(i=0;i

cout

sum=a[n-1]-now;

}

else //磁头位置在最里侧磁道与最外侧磁道之间

{ int d;

while(a[k]

{

k++;

}

l=k-1;//在磁头位置的前一个欲访问磁道

r=k; //磁头欲访问磁道

cout>d; //确定磁头访问的方向

cout

if(d==0||d==1)

{

if(d==1) //磁头向外侧访问

{

for(j=r;j

cout

}

for(j=0;j

{

cout

}

sum=2*a[n-1]-now-2*a[0]+a[l];

}

if(d==0) //磁头向内侧访问

{

for(j=r-1;j>=0;j--)

{

cout

}

for(j=n-1;j>=r;j--)//

{

cout

}

sum=2*a[n-1]-2*a[0]+now-a[r]; }

}

else

cout

}

cout

cout

}

(3)测试结果:

1.先来先服务算法(FCFS)测试结果

2.最短寻道时间算法(SSTF)测试结果

3.循环扫描算法(SCAN)测试结果

4.循环扫描算法(CSCAN)测试结果

10

《操作系统--磁盘调度算法》

实验报告

姓 名: 范学升

学 号: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

cout

cout

cout

cout

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]

{

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])

{

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)//磁头位置外侧的磁道已访问完

{

for(j=k-1;j>-1;j--) //访问磁头位置里侧的磁道

{

cout

}

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

}

}

cout

cout

}

扫描算法(SCAN)

void SCAN(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;

//以下算法确定磁道访问顺序

if(a[n-1]

{

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 //磁头位置在最里侧磁道与最外侧磁道之间 { int d;

while(a[k]

{ //确定当前磁道在已排的序列中的位置

k++;

}

l=k-1;//在磁头位置的前一个欲访问磁道

r=k; //磁头欲访问磁道

cout>d; //确定磁头访问的方向

cout

if(d==0||d==1)

{

if(d==0) //磁头向内

{

for(j=l;j>=0;j--)

{

cout

}

for(j=r;j

{

cout

}

sum=now-2*a[0]+a[n-1];

}

if(d==1) //磁头向外

{

for(j=r;j

{

cout

}

for(j=l;j>=0;j--)

{

cout

}

sum=2*a[n-1]-now-a[0];

}

}

else

cout

}

cout

cout

}

循环扫描算法(CSCAN)

void CSCAN(int a[],int n)

{

int temp;

int now,l,r;

int i,j,sum=0;

int k=1;

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;//确定当前磁道号

if(a[n-1]

{

for(i=0;i

cout

sum=now-2*a[0]+a[n-1];

}

else

if(a[0]>=now)//磁头位置小于最里欲访问磁道

{

for(i=0;i

cout

sum=a[n-1]-now;

}

else //磁头位置在最里侧磁道与最外侧磁道之间

{ int d;

while(a[k]

{

k++;

}

l=k-1;//在磁头位置的前一个欲访问磁道

r=k; //磁头欲访问磁道

cout>d; //确定磁头访问的方向

cout

if(d==0||d==1)

{

if(d==1) //磁头向外侧访问

{

for(j=r;j

cout

}

for(j=0;j

{

cout

}

sum=2*a[n-1]-now-2*a[0]+a[l];

}

if(d==0) //磁头向内侧访问

{

for(j=r-1;j>=0;j--)

{

cout

}

for(j=n-1;j>=r;j--)//

{

cout

}

sum=2*a[n-1]-2*a[0]+now-a[r]; }

}

else

cout

}

cout

cout

}

(3)测试结果:

1.先来先服务算法(FCFS)测试结果

2.最短寻道时间算法(SSTF)测试结果

3.循环扫描算法(SCAN)测试结果

4.循环扫描算法(CSCAN)测试结果

10


相关文章

  • 磁盘调度算法的编程实现及评估
  • 操作系统课程设计报告 --磁盘调度算法的编程实现及评估 姓名 学号 日期 一.课程设计题目 磁盘调度算法的编程实现及评估 二.课程设计目的 通过编程实现磁盘调度算法设计,加深理解磁盘调度算法的理解及提高编程能力. 三.课程设计内容 编程实现 ...查看


  • 课程设计--磁盘调度算法及代码的实现
  • 课程设计报告 <计算机操作系统> 课程设计题目: 磁盘调度算法 学生姓名: 专 业: 班 级: 学 号: 指导教师: 2014年01月10日 目 录 1.需求分析 „„„„„„„„„„„„„„„„„„„„„„„„„„„„01 2 ...查看


  • 磁盘调度实验报告
  • 磁盘调度 一 .实验目的: 磁盘是高速.大容量.旋转型.可直接存取的存储设备.它作为计算机系统的辅助存储器,担负着繁重的输入输出工作,在现代计算机系统中往往同时会有若干个要求访问磁盘的输入输出要求.系统可采用一种策略,尽可能按最佳次序执行访 ...查看


  • 操作系统 磁盘管理 实验报告
  • 实 验 报 告 课程名称:院 系:专业班级:姓 名:指导老师: 操作系统 信息与控制工程学院 计算机0801 2010年 12月 31日 目录 一.实验目的 ......................................... ...查看


  • 天津理工大学操作系统实验3:磁盘调度算法的实现
  • 实验报告 学院(系)名称:计算机与通信工程学院 姓名 班级 卢洪利 2014级4班 课程名称 学号 实验项目 操作系统 20116年12月 8 日 第3.4节 20116年12月12日 第7.8节 20116年12月15日 第3.4节 20 ...查看


  • 实验六磁盘调度算法
  • 实验六 磁盘调度算法 一. 需求分析 ..................................................................................................... ...查看


  • 实验二___虚拟存储器
  • 实验二 虚拟存储器 一.实验内容 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺 页中断. 二.实验目的 在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的 扩充,使多道运行的作业的全 ...查看


  • 郑州大学操作系统期末考试重点整理
  • 提供各种服务.合理组织计算机工作流程和为用户有效使用计算机提供良好运行环境的一种系统软件. 资源管理1资源复用(空分复用共享,, 时分复用共享)2资源虚化3资源抽象4组合使用抽象和虚化技术 1)进程抽象(2)虚存抽象(3)文件抽象(4)其他 ...查看


  • 操作系统 实验报告 文件管理
  • 昆明理工大学信息工程与自动化学院学生实验报告 ( 201 -201 学年 第 二 学期 ) 课程名称:操作系统 开课实验室: 年 月 日 一.实验目的 用C或C++语言编写和调试一个简单的文件系统,模拟文件管理的基本功能.从而对各种文件操作 ...查看


热门内容