操作系统磁盘调度算法及模拟实验三

更新时间:2024-01-03 07:42:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

江西理工大学软件学院

《计算机操作系统》实验报告

实验名称: 磁盘调度算法及模拟 姓 名: 专 业: 软件开发 学 号: 指导教师:

实验日期: 2012-11-20

江西理工大学软件学院 《计算机网络基础》 实验报告

【实验目的、要求】

(1)设计一个磁盘调度模拟程序,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了;

(2)加深对先来先服务算法、最短寻道时间优先算法、扫描算法以及循环扫描算法等磁盘调度算法的理解;

(3)针对给定的磁盘访问序列,运行各种调度算法得出调度过程 (4)算法所需的各种参数由输入产生(手工输入或者随机数产生) 输出调度过程。 【实验环境】

WindowsXP操作系统平台及C++软件 【实验步骤】 #include #include #include using namespace std; /*1、FCFS算法*/

void FCFS(int *data,int n,int *order){ }

2

for(int i=0;i<=n;i++){ }

order[i]=data[i];

江西理工大学软件学院 《计算机网络基础》 实验报告

/*2、SSTF算法*/

void SSTF(int *data,int n,int *order) { for(int i=0;i<=n;i++) {

}

order[i]=data[i];

for(int j=1;j<=n;j++){ int p=j;

for(int k=j+1;k<=n;k++){

}

if(abs(order[k]-order[j-1])

p=k;

if(p!=j) { }

//均向磁道增加方向访问 /*3、SCAN算法*/

void SCAN(int *data,int n,int *order) { int j=1; int q=n; order[0]=data[0]; for(int i=1;i<=n;i++){

if(data[i]>order[0]) {order[j]=data[i];j++;}

3

}

int temp=order[j]; order[j]=order[p]; order[p]=temp; }

江西理工大学软件学院 《计算机网络基础》 实验报告

else{order[q]=data[i];q--;} }

for(int z=1;z

for(int k=z+1;k

for(int h=j;h<=n;h++) { int p=h;

for(int k=h+1;k<=n;k++) { if(order[k]>order[p]) { p=k;} } if(p!=h) { int temp=order[h]; order[h]=order[p]; order[p]=temp; } } }

//均向磁道增加方向访问 /*4、CSCAN算法*/

void CSCAN(int *data,int n,int *order) { int j=1; int q=n; order[0]=data[0]; for(int i=1;i<=n;i++) {

if(data[i]>order[0]) {order[j]=data[i];j++;} else {order[q]=data[i];q--;} }

for(int z=1;z

4

江西理工大学软件学院 《计算机网络基础》 实验报告

int p=z;

for(int k=z+1;k

for(int h=j;h<=n;h++) { int p=h;

for(int k=h+1;k<=n;k++) { if(order[k]

}/*5、主函数*/ void main() {

int data[100]; data[0]=100; int n=0;//要寻访磁道个数 srand((int)time(0)); n=rand() +5;

for(int i=1;i<=n;i++) {data[i]=rand() 0+1;} int order[100]; int length=0;

FCFS(data,n,order); cout<<\ for(int j=1;j<=n;j++)

{ length+=abs(order[j]-order[j-1]); cout<

5

江西理工大学软件学院 《计算机网络基础》 { length+=abs(order[g]-order[g-1]); cout<

cout<<\平均寻道长度\ SCAN(data,n,order); cout<<\ for(int d=1;d<=n;d++)

{ length+=abs(order[d]-order[d-1]); cout<

cout<<\平均寻道长度\

CSCAN(data,n,order); cout<<\ for(int k=1;k<=n;k++)

{ length+=abs(order[k]-order[k-1]); cout<

cout<<\平均寻道长度\}

6

实验报告

\}

\} \} 江西理工大学软件学院 《计算机网络基础》 实验报告

【实验总结】

先来先服务算法(FCFS)这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。

最短寻道时间优先算法(SSTF)该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。

扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。

循环扫描算法(CSCAN)是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。

7

本文来源:https://www.bwwdw.com/article/xkox.html

Top