您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页操作系统实验六磁盘调度算法正确C 代码

操作系统实验六磁盘调度算法正确C 代码

来源:华佗小知识
实用标准文案

《操作系统》实验报告

【实验题目】:磁盘调度算法

【实验目的】

通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的实现方法。

【实验内容】

问题描述:

设计程序模拟先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。

程序要求如下:

1)利用先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法模拟磁道访问过程。

2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。

3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和

精彩文档

实用标准文案

循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。

4)输出:每种算法的平均寻道长度。

实验要求:

1) 上机前认真复习磁盘调度算法,熟悉FCFS,SSTF,SCAN和循环SCAN算法的过程;

2) 上机时编程、调试程序;

3) 根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。

实验代码:

#include

#include

#include

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=500;//磁道数

int N;//提出磁盘I/O申请的进程数

int SortOrder[MaxNumber];//排序后的序列

bool Finished[MaxNumber];

void Inith()

{

cout<<\"请输入提出磁盘I/O申请的进程数: \";

精彩文档

实用标准文案

cin>>N;

cout<<\"请依次输入要访问的磁道号: \";

for(int i=0;icin>>TrackOrder[i];

for(int j=0;jMoveDistance[j]=0;

cout<<\"请输入开始磁道号:cin>>BeginNum;

for(int k=0;kFinished[k]=false;

for(int l=0;lSortOrder[l]=TrackOrder[l];

}

精彩文档

\";

实用标准文案

//=====================排序函数,将各进程申请的磁道按从小到大排列=================

void Sort()

{

int temp;

for(int i=N-1;i>=0;i--)

for(int j=0;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;

for(int i=0;i{

MoveDistance[i]=abs(TrackOrder[i]-temp);

temp=TrackOrder[i];

FindOrder[i]=TrackOrder[i];

}

精彩文档

实用标准文案

}

//========SSTF,最短寻道法=============================

void SSTF()

{

int temp,n;

int A=M;

temp=BeginNum;

for(int i=0;i{

for(int j=0;j{

if(abs(TrackOrder[j]-temp){

精彩文档

实用标准文案

A=abs(TrackOrder[j]-temp);

n=j;

}

else continue;

}

Finished[n]=true;

MoveDistance[i]=A;

temp=TrackOrder[n];

A=M;

FindOrder[i]=TrackOrder[n];

}

}

//=====================SCAN,==========================

精彩文档

扫描算法

实用标准文案

void SCAN()

{

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{

if(SortOrder[i]continue;

else

{

n=i;

break;

}

}

if(direction==true)

{

for(int 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{

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{

if(SortOrder[i]continue;

else

{

n=i;

break;

}

}

精彩文档

实用标准文案

if(direction==true)

{

for(int i=n;i{

MoveDistance[i-n]=abs(SortOrder[i]-temp);

temp=SortOrder[i];

FindOrder[i-n]=SortOrder[i];

}

for(int j=0;j{

MoveDistance[N-n+j]=abs(SortOrder[j]-temp);

temp=SortOrder[j];

FindOrder[N-n+j]=SortOrder[j];

精彩文档

实用标准文案

}

}

else

{

for(int i=n-1;i>=0;i--)

{

MoveDistance[n-1-i]=abs(SortOrder[i]-temp);

temp=SortOrder[i];

FindOrder[n-1-i]=SortOrder[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];

}

}

}

//========计算平均寻道时间==============

void Count()

{

int Total=0;

for(int i=0;i{

Total+=MoveDistance[i];

}

精彩文档

实用标准文案

AverageDistance=((double)Total)/((double)N);

}

void Show()

{

cout<for(int i=0;i{

cout<}

cout<cout<}

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;

case 2:SSTF();Count();Show();break;

case 3:SCAN();Count();Show();break;

精彩文档

\";

实用标准文案

case 4:CSCAN();Count();Show();break;

}

cout<<\"是否继续选择寻道算法?1--是;0--否: \";

int p;

cin>>p;

y=p;

}

exit;

return 0;

}

结果截图:

精彩文档

实用标准文案

精彩文档

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务