磁盘调度管理

摘要:
磁盘调度管理1.设计目的:加深对请求磁盘调度管理实现原理的理解,掌握磁盘调度算法。选择磁盘调度算法,显示算法的磁道访问顺序,并计算移动的磁道总数和平均寻道总数。下面介绍了常用的磁盘调度算法。请从最短搜索优先算法SSTF、扫描算法SCAN和循环扫描算法CSCAN中选择任意两种实现,并分析和比较算法性能。

磁盘调度管理

一、设计目的:

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

二、设计内容:

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

设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序列。选择磁盘调度算法,显示该算法的磁道访问顺序,计算出移动的磁道总数和平均寻道总数。

常用的磁盘调度算法简介如下,请在最短寻道优先算法SSTF、扫描算法SCAN、循环扫描算法CSCAN中任意选择两种实现,并对算法性能进行分析对比。

三、开发环境

windows环境,VC6.0平台。

四、分析设计

<一>实验原理

  1. 最短寻道优先算法SSTF:该算法选择这样的进程:其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。
  2. 扫描算法SCAN:该算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。例如,当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象,应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直至再无更外的磁道需要访问时,才将磁臂换向为自外向里移动。

<二>程序结构

输入磁道个数,选择寻道算法

0:退出

1:SSTF最短寻道优先算法

2:SCAN扫描算法

附录、源程序清单

#include<iostream>

#include<ctime>

using namespace std;

void SSTF(int a[],int n);

void SCAN(int a[],int n);

int main()

{

int n;    //磁道个数

int s;     //功能号

cout<<"请输入当前磁道个数,按Enter显示生成的随机磁道号:"<<endl;

cin>>n;

int *a=new int[n];

cout<<"生成磁道号为";

srand((unsigned)time(NULL));        //给srand提供一个种子,它是unsigned int类型,取值范围0-65565

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

a[i]=(rand()%200)+1;          //rand根据srand种子值返回一个随机数

cout<<a[i]<<" ";

}

cout<<endl;

while(1){

cout<<"请选择算法"<<endl;

cout<<"0:退出  1:SSTF  2:SCAN"<<endl;

cin>>s;

if(s>4){

cout<<"输入有误,请重新输入"<<endl;

}

else{

switch(s){

case 0:exit(0);

case 1:SSTF(a,n);break;

case 2:SCAN(a,n);break;

}

}

}

return 0;

}

 

//最短寻道时间算法(SSTF)

void SSTF(int a[],int n) {  

int temp;

int k=1;

int now,l,r;

int i,j,sum=0;  //将磁道号按递增排序,冒泡排序

for(i=0;i<n;i++)

for(j=i+1;j<n;j++) {    

if(a[i]>a[j])   {    

temp=a[i];   

a[i]=a[j];   

a[j]=temp;   

}

}  

cout<<"按递增顺序排好的磁道显示为:"<<endl;

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

cout<<a[i]<<" ";         //输出排好的磁道顺序

}

cout<<endl;  

now=rand()%200;

cout<<"当前磁道为"<<now<<endl;

cout<<"磁盘调度顺序为:"<<endl;  

if(a[n-1]<=now){         //当前磁头位置大于最外围欲访问磁道     

for(i=n-1;i>=0;i--)   

cout<<a[i]<<" ";   

sum=now-a[0];

}

else    if(a[0]>=now){           //当前磁头位置小于最里欲访问磁道    

for(i=0;i<n;i++)   

cout<<a[i]<<" ";

sum=a[n-1]-now;   

}   

else   {      

while(a[k]<now){          //当前磁道在已排的序列中的位置

 k++;  

}       

l=k-1;            //在磁头位置的前一个欲访问磁道

r=k;                 //磁头欲访问磁道       

while((l>=0)&&(r<n))  {       

if((now-a[l])<=(a[r]-now)){//选择离磁头近的磁道         

cout<<a[l]<<" ";       

sum+=now-a[l];       

now=a[l];       

l=l-1;  

}     

else     {      

cout<<a[r]<<" ";     

sum+=a[r]-now;     

now=a[r];     

r=r+1;  

}   

}

if(l==-1){//磁头位置里侧的磁道已访问完      

for(j=r;j<n;j++){//访问磁头位置外侧的磁道       

cout<<a[j]<<" ";   

}    

sum+=a[n-1]-a[0];   

}  

if(r==n){//磁头位置外侧的磁道已访问完   

for(j=k-1;j>-1;j--){ //访问磁头位置里侧的磁道                            

cout<<a[j]<<" ";            

}             

sum+=a[n-1]-a[0];

}   

}    

cout<<endl;    

cout<<"移动的总道数为:"<<sum<<endl; 

磁盘调度管理第1张

免责声明:文章转载自《磁盘调度管理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇银行业评分卡制作——IV、WOE继承QAbstractTableModel QStyledItemDelegate实现自定义表格,添加进度条和选中框。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用户密码加密存储十问十答,一文说透密码安全存储

我们数据库的权限管理十分严格,敏感信息开发工程师都看不到,密码明文存储不行吗? 不行。存储在数据库的数据面临很多威胁,有应用程序层面、数据库层面的、操作系统层面的、机房层面的、员工层面的,想做到百分百不被黑客窃取,非常困难。 如果密码是加密之后再存储,那么即便被拖库,黑客也难以获取用户的明文密码。可以说,密码加密存储是用户账户系统的底裤,它的重要性,相当于...

Java技术栈

内容: 1、Java基础(JavaSE) 2、数据结构与算法与设计模式 3、计算机理论知识 4、数据库 5、Java web(JavaEE) 6、消息队列 7、Linux及服务器相关 8、分布式相关 9、拓展技能 参考:https://blog.csdn.net/ferrari_cal/article/details/79093826 以下整理结合个人实际...

Linux 系统 LVM(Logical Volume Manager)逻辑卷管理

一.前言 每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到 当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬 盘、重新对硬盘分区,然后恢复数据到新分区。 虽然现在有很多动态...

linux 系统⽇常管理--运维必备

【监控系统的状态】 1. w 查看当前系统的负载  相信所有的linux管理员最常⽤的命令就是这个’w’ 了,该命令显⽰的信息还是蛮丰富 的。第⼀⾏从左⾯开始显⽰的信息依次为:时间,系统运⾏时间,登录⽤户数,平均 负载。第⼆⾏开始以及下⾯所有的⾏,告诉我们的信息是,当前登录的都有哪些⽤ 户,以及他们是从哪⾥登录的等等。其实,在这些信息当中,笔者认为我们...

计算智能(CI)之粒子群优化算法(PSO)(一)

欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识! 计算智能(Computational Intelligence , CI)是以生物进化的观点认识和模拟智能。按照这一观点,智能是在生物的遗传、变异、生长以及外部环境的自然选择中产生的。在用进废退、优胜劣汰的过程中,适应度高的...

CAGD: 第十二章 B样条曲面

    第十二章 B样条曲面 B样条曲面在CAD/CAM中具有非常重要的地位,它可由B样条曲线通过直积推广而得,正如由Bézier曲线经由直积推广而得Bézier曲面一样。本章主要讨论B样条曲面的性质及其相关的配套技术。 12.1 B样条曲面的定义及性质 给定三维空间个点,参数和的节点矢量、,参数曲面: (12.1.1) 称为次B样条曲面。式中称为曲面的...