原创


上一篇博客写了最短寻道优先算法(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. 使用CALayer制作View的辉光效果

    使用CALayer制作View的辉光效果 实现以下的辉光效果: 思路是这样子的: 1. 创建好需要实现辉光效果的View 2. 对这个View进行截图 3. 将这个截图重新添加进View中 4. 对这 ...

  2. Python学习---函数的学习1209[all]

    1.基础函数 2.高阶函数 3.递归函数 4.内置函数 5.匿名函数和闭包

  3. Quick BI助力云上大数据分析---深圳云栖大会

    在3月29日深圳云栖大会的数据分析与可视化专场中,阿里云产品专家陌停对大数据智能分析产品 Quick BI 进行了深入的剖析.大会现场的精彩分享也赢得观众们的一直认可和热烈的反响. 大数据分析之路的挑 ...

  4. 数据库相关文章转载(2) MySQL自带的性能压力测试工具mysqlslap详解

    PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用.其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的.下面举例说说.mysqlslap是从5.1.4版开始的一 ...

  5. 利用python查看电脑系统信息

    #查看python默认编码格式 >>> import sys >>> print sys.getdefaultencoding() #python 2.x 默认编码 ...

  6. JavaScript的事件对象中的特殊属性和方法(鼠标,键盘)

    鼠标操作导致的事件对象中的特殊属性和方法 鼠标事件是 Web 上面最常用的一类事件,毕竟鼠标还是最主要的定位设备.那么通过事件对象可以获取到鼠标按钮信息和屏幕坐标获取等 鼠标按钮 只有在主鼠标按钮被单 ...

  7. UVa 1515 - Pool construction(最小割)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. Python3安装scrapy框架步骤

    Python3安装scrapy框架步骤 1.       安装wheel a)     Pip install wheel 2.       安装lxml Pip install lxml 3.    ...

  9. Kali-linux绘制网络结构图

    CaseFile工具用来绘制网络结构图.使用该工具能快速添加和连接,并能以图形界面形式灵活的构建网络结构图.本节将介绍Maltego CaseFile的使用. 在使用CaseFile工具之前,需要修改 ...

  10. linux 常用进程使用命令

    查看进程占用pid ps aux | grep program_filter_word 杀死pid kill -