原创


上一篇博客写了最短寻道优先算法(SSTF)——磁盘调度管理:http://www.cnblogs.com/chiweiming/p/9073312.html

此篇介绍扫描算法(SCAN)——磁盘调度管理,与上一篇的代码有类似的片段,但较最短寻道优先算法难。

(题目阐述看上一篇博客)

随机选择一磁道号为起点开始寻道后,先从磁道序列中筛选出比起点磁道号大的磁道号,再在这批磁道号中筛选出

最小的磁道号,访问它,再以它为起点继续上述操作(自里向外的访问磁道),直到访问完最大的磁道号。

再在未访问过的磁道号中筛选出最大的磁道号访问,再以它为起点,从剩下未被访问过的磁道号中筛选出最大的磁

道号访问,再以它为起点继续上述操作(自外向里的访问磁道),直到访问完全部磁道。

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h> #define MAX 50 //可访问的最大磁道号
#define N 20 //磁道号数目 int track[N]; //存放随机产生的要进行寻道访问的磁道号序列
int num_track[N]; //记录其他磁道与当前被访问磁道的距离
int total=; //统计已被访问的磁道号数
int all_track=; //移动的磁道总数
double aver_track; //平均寻道总数
int ff=; //ff==0代表自里向外扫描,==1代表自外向里扫描 void SCAN(int order){ //order为track中当前被访问的磁道下标
printf("%d ",track[order]);
num_track[order]=-;
total++; //已被访问磁道号+1
if(total==N){
return;
}
int i=;
for(i=;i<=N-;i++){ //计算其他磁道与当前被访问磁道的距离
if(num_track[i]!=-){
num_track[i]=abs(track[order]-track[i]);
}
}
if(ff==){ //自里向外移动
int min=;
int x=-;
for(i=;i<=N-;i++){
if(num_track[i]!=-){
if(track[i]>=track[order]){
if(num_track[i]<min){ //从比track[order]大的磁道号中选出最小的
min=num_track[i];
x=i;
}
}
}
}
if(x==-){ //x==-1代表找不出大于等于track[order]的数,下次应该自外向里扫描
ff=;
int max=-;
int x;
for(i=;i<=N-;i++){ //自外向里移动,找到第一个未被访问过的磁盘后以它为起点自外向里扫描
if(num_track[i]!=-){
if(track[i]>max){
max=track[i];
x=i;
}
}
}
all_track+=abs(track[order]-track[x]);
SCAN(x);
}
else{
all_track+=abs(track[order]-track[x]);
SCAN(x);
}
}
else{ //自外向里移动
int min=;
int x;
for(i=;i<=N-;i++){
if(num_track[i]!=-){
if(track[i]<=track[order]){
if(num_track[i]<min){
min=num_track[i];
x=i;
}
}
}
}
all_track+=abs(track[order]-track[x]);
SCAN(x);
}
} int main(){
int i=;
srand(time());
printf("磁道号序列为: ");
for(i=;i<=N-;i++){ //随机产生要进行寻道访问的磁道号序列
track[i]=rand()%(MAX+);
printf("%d ",track[i]);
}
printf("\n");
printf("寻道序列为: ");
SCAN(rand()%N); //随机选择起点磁道
printf("\n移动的磁道总数: %d\n",all_track);
printf("平均寻道总数: %0.2lf",(double)all_track/N);
return ;
}

(运行结果部分截图)

19:33:25

2018-05-22

扫描算法(SCAN)——磁盘调度管理的更多相关文章

  1. 最短寻道优先算法(SSTF)——磁盘调度管理

    原创 最近操作系统实习,敲了实现最短寻道优先(SSTF)——磁盘调度管理的代码. 题目阐述如下: 设计五:磁盘调度管理 设计目的: 加深对请求磁盘调度管理实现原理的理解,掌握磁盘调度算法. 设计内容: ...

  2. 操作系统精髓与设计原理(九)——I/O管理和磁盘调度

    文章目录 I/O设备 I/O功能组织 直接存储器访问 操作系统设计问题 设计目标 IO功能的逻辑结构 I/O缓冲 单缓冲 双缓冲 循环缓冲 缓冲的作用 磁盘调度 磁盘性能参数 磁盘调度策略 先进先出 ...

  3. 操作系统-IO管理和磁盘调度

    I/O设备 IO设备的类型 分为三类:人机交互类外部设备:打印机.显示器.鼠标.键盘等等.这类设备数据交换速度相对较慢,通常是以字节为单位进行数据交换的 存储设备:用于存储程序和数据的设备,如磁盘.磁 ...

  4. 基于正向扫描的并行区间连接平面扫描算法(IEEE论文)

    作者: Panagiotis Bouros ∗Department of Computer ScienceAarhus University, Denmarkpbour@cs.au.dkNikos M ...

  5. Spark调度管理(读书笔记)

    Spark调度管理(读书笔记) 转载请注明出处:http://www.cnblogs.com/BYRans/ Spark调度管理 本文主要介绍在单个任务内Spark的调度管理,Spark调度相关概念如 ...

  6. linux磁盘管理系列一:磁盘配额管理

    磁盘管理系列 linux磁盘管理系列一:磁盘配额管理   http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...

  7. Linux iSCSI 磁盘共享管理

    Linux iSCSI 磁盘共享管理 iSCSI 服务是通过服务端(target)与客户端(initiator)的形式来提供服务.iSCSI 服务端用于存放存储源的服务器,将磁盘空间共享给客户使用,客 ...

  8. quota - linux磁盘配额管理

    磁盘管理系列 linux磁盘管理系列一:磁盘配额管理   http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...

  9. [计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(二)

    上一节链接:http://www.cnblogs.com/zjutlitao/p/4116783.html 前言: 在上一节中我们已经大致介绍了该软件的是什么.可以干什么以及界面的大致样子.此外还详细 ...

随机推荐

  1. Linux中如何安装loadgenerator

    /* 1. 到官方网站到HP官网下载Load Generator 安装文件 _Load_Generator_11.00_T7330-15010.iso或者其它网站下载loadrunner-11-loa ...

  2. D3——scale

    d3.scale 比例尺 “Scales are functions that map from an input domain to an output range” Domains 定义域 和 R ...

  3. JavaScript的事件对象_滚轮事件

    用户在使用键盘时会触发键盘事件.“DOM2 级事件”最初规定了键盘事件,结果又删除了相应的内容.最终还是使用最初的键盘事件,不过 IE9 已经率先支持“DOM3”级键盘事件. 一.键码 在发生 key ...

  4. CATransaction:原子化操作、批量操作、整体设置、自动添加

    Transactions are CoreAnimation's mechanism for batching multiple layer- tree operations into atomic ...

  5. 死磕salt系列-salt 故障汇总

    这里将salt使用过程中遇到的所有的故障进行一个汇总. grains 匹配后多了一个列表 salt-master中配置jinja模板来匹配自定义的grins. vim /etc/salt/minion ...

  6. 分享一个ASP.NET的弹出层,比较好用!

    网上的一些弹出层的控件多了去了,我很久之前用了一个,效果还不错,但如果应用到ASP.NET的话,会出现“弹出层内的控件runat='server'失效”的情况,具体情况我也不太会描述,但就是那些onc ...

  7. rsync + mysql + gzip + --single-transaction

    1.rsync -avz 172.16.2.61:~/vs/program/elasticsearch-5.0.0 --exclude=elasticsearch-5.0.0/data/* ./ 从其 ...

  8. HashMap源码阅读与解析

    目录结构 导入语 HashMap构造方法 put()方法解析 addEntry()方法解析 get()方法解析 remove()解析 HashMap如何进行遍历 一.导入语 HashMap是我们最常见 ...

  9. Java Activiti6.0 spring5 SSM 工作流引擎 审批流程 java项目框架

    1.模型管理 :web在线流程设计器.预览流程xml.导出xml.部署流程 2.流程管理 :导入导出流程资源文件.查看流程图.根据流程实例反射出流程模型.激活挂起 3.运行中流程:查看流程信息.当前任 ...

  10. 【腾讯敏捷转型No.3】Scrum有什么好?

    在敏捷转型的过程中,除了敏捷宣言中的四个价值观和十二条原则以外,并没有太多比较权威的理论实践. 如图一,敏捷宣言中的四个价值观: (图一) 四条敏捷核心价值观指出了敏捷的核心思想,但是并没有仔细说明具 ...