最短寻道优先调度算法 c语言,最短寻道优先算法(SSTF)——磁盘调度管理

原创

最近操作系统实习,敲了实现最短寻道优先(SSTF)——磁盘调度管理的代码。

题目阐述如下:

设计五:磁盘调度管理

设计目的:

加深对请求磁盘调度管理实现原理的理解,掌握磁盘调度算法。

设计内容:

通过编程实现不同磁盘调度算法。

设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序列。

选择磁盘调度算法,显示该算法的磁道访问顺序,计算出移动的磁道总数和平均寻道总数。

常用的磁盘调度算法简介如下,请在以下算法中任意选择两种实现,并对算法性能进行分析对比。

1. 最短寻道优先算法SSTF:该算法选择这样的进程:其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。

2. 扫描算法SCAN:该算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。

例如,当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象,应是其欲访问的磁道既在当前磁道之外,又是距离最近的。

这样自里向外地访问,直至再无更外的磁道需要访问时,才将磁臂换向为自外向里移动。

3.循环扫描算法CSCAN:CSCAN算法规定磁头单向移动,例如,只是自里向外移动,当磁头移到最外的磁道并访问后,

磁头立即返回到最里的欲访问的磁道,亦即将最小磁道号紧接着最大磁道号构成循环,进行循环扫描。

首先用 rand 函数随机产生磁道号序列,随机选择一磁道号为起点开始寻道。

下一磁道满足在所有磁道中其离当前被访问磁道最近,可用一数组 num_track 存放其他磁道与当前被访问磁道的距离。

在数组 num_track 筛选出数值最小(即离当前被访问磁道最近)的磁道,再以当前磁道为起点,继续计算其他未被访

问磁道与其的距离,再从 num_track 中筛选出数值最小的的磁道来访问......

#include#include#include#include

#define MAX 50 //可访问的最大磁道号

#define N 20 //磁道号数目

int track[N]; //存放随机产生的要进行寻道访问的磁道号序列

int num_track[N]; //记录其他磁道与当前被访问磁道的距离

int total=0; //统计已被访问的磁道号数

int all_track=0; //移动的磁道总数

double aver_track; //平均寻道总数

void SSTF(int order){ //order为track中当前被访问的磁道下标

printf("%d",track[order]);

num_track[order]=-1;

total++; //已被访问磁道号+1

if(total==N){return;

}int i=0;for(i=0;i<=N-1;i++){ //计算其他磁道与当前被访问磁道的距离

if(num_track[i]!=-1){

num_track[i]=abs(track[order]-track[i]);

}

}int min=9999;intx;for(i=0;i<=N-1;i++){ //找出track中与当前被访问磁道距离最短的

if(num_track[i]!=-1){if(num_track[i]

min=num_track[i];

x=i;

}

}

}

all_track+=abs(track[order]-track[x]); //计算当前被访问磁道与下一被访问磁道的距离

SSTF(x);

}intmain(){int i=0;

srand(time(0));

printf("磁道号序列为:");for(i=0;i<=N-1;i++){ //随机产生要进行寻道访问的磁道号序列

track[i]=rand()%(MAX+1);

printf("%d",track[i]);

}

printf("n");

printf("寻道序列为:");

SSTF(rand()%N); //随机选择起点磁道

printf("n移动的磁道总数: %dn",all_track);

printf("平均寻道总数: %0.2lf",(double)all_track/N);return 0;

}

3b6f8775f7e6ad09066d618e44e5c048.png

(运行结果截图)

17:54:20

2018-05-22

内容来源于网络如有侵权请私信删除

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值