原创


上一篇博客写了最短寻道优先算法(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. [翻译] CNPGridMenu

    CNPGridMenu CNPGridMenu is a Mailbox style grid menu with a blurred background for iOS 7 & iOS 8 ...

  2. 【转】outlook 2016 配置自动发现

    今天一部门经理换了高大上的终端,办公软件安装的是office 2016,在配置outlook的时候,懵逼了,没有exchange 选项,使用自动发现配置的时候,电脑没有加域,各种尝试,一直过不去,哎, ...

  3. netstat 常用方法

    netstat简介 netstat是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表,实际的网络连接以及每一个网络接口设备的状态信息,netstat用于显示与IP,TCP,UDP和ICMP协 ...

  4. MS10-070 ASP.NET Padding Oracle信息泄露漏洞项目测试

    MS10-070 ASP.NET Padding Oracle信息泄露漏洞1         漏洞描述:ASP.NET由于加密填充验证过程中处理错误不当,导致存在一个信息披露漏洞.成功利用此漏洞的攻击 ...

  5. [零基础学JAVA]Java SE面向对象部分.面向对象基础(06)

    1.interface 接口 2.设计模式(工厂模式) 3.异常的捕获 java: //接口中定义的全是public,即使不声明也是public的,//如果一个类定义的时候全部由抽象方法和全局常量所组 ...

  6. 文件属性及OS模块使用(IO入门2)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6422270.html 本文出自:[Edwin博客园] 文件属性及OS模块使用(IO入门2) 1. pytho ...

  7. POI读取单元格信息及单元格公式

    Java操作EXCEL的利器一般都是POI和JXL,鄙人只是POI的忠实粉丝.(其实我是没有用过JXL). 现在大多数的excel都是07以上的版本,所以我一般是用07的基础上使用POI. 一.读取单 ...

  8. Mongoose 利用实现HTTP服务

    嘛.... 注意:这里是使用mongoose实现HTTP服务,非数据库使用. 最近由于需要使用HTTP服务端,原先是使用的Qt框架实现的HTTP服务端,然后发现有些缺陷导致我不得不放弃这个框架,也不是 ...

  9. Java并发案例02---生产者消费者问题

    package example; import java.util.LinkedList; import java.util.concurrent.TimeUnit; public class MyC ...

  10. C#关于递归等等

    递归的例子1 计算1到100相加的值 public partial class Default4 : System.Web.UI.Page{    protected void Page_Load(o ...