什么是磁盘调度?

磁盘调度指待的是访问的磁道时,当前磁头访问的方式(也指待是算法)。磁盘的访问也是一种I/O设备的访问,在数据访问中需要知道如何去访问从内存以及I/O传输过来的数据。怎么样去存储或者是读取在磁盘上面的数据。磁盘的调度的算法有很多种,例如:

FIFO:先进先出的调度策略,这个策略具有公平的优点,因为每个请求都会得到处理,并且是按照接收到的顺序进行处理。

SSTF:选择使磁头从当前位置开始移动最少的磁盘I/O请求,所以SSTF总是选择导致最小寻道时间的请求。

SCAN:SCAN要求磁头仅仅沿一个方向移动,并在途中满足所有未完成的请求,知道它到达这个方向上的最后一个磁道,或者在这个方向上没有其他请求为止。

C-SCAN:把扫描限定在一个方向,当访问到某个方向的最后一个磁道时,磁道返回磁盘相反方向磁道的末端,并再次开始扫描。

而本文模拟的是scan调度算法。模拟内容

编程序模拟磁盘移臂调度,假定磁盘有200个柱面,编号为0~199,当前存取臂的位置在143号柱面上,并刚刚完成了128号柱面的服务请求,如果请求的先后顺序为:86,145,93,179,95,150,103,176,132。试分别采用:(1) 先来先服务寻道算法FCFS。(2) 最短寻道时间优先算法SSTF。(3) 扫描算法SCAN。(4) 循环扫描算法CSCAN。输出存取臂的移动顺序,并分别计算出存取臂的移动总量。算法实现:

#include

#include

void fcfs(int f[],int );

void sstf(int m[],int );

void scan(int d[],int);

void cscan(int e[],int);

void sort(int a[],int);

void main()

{

printf("模拟磁盘移臂调度程序\n");

printf("***********************************************\n");

printf("***********************************************\n");

printf("start:\n");

int now=143;

int a[]={86,145,93,179,95,150,103,176,132};

fcfs(a,now);

int aa[]={86,145,93,179,95,150,103,176,132};

sstf(aa,now);

int aaa[]={86,145,93,179,95,150,103,176,132};

scan(aaa,now);

int aaaa[]={86,145,93,179,95,150,103,176,132};

cscan(aaaa,now);

}

void fcfs(int f[],int fnow)

{

int s=0,i;

printf(" 先来先服务寻道顺序为:");

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

{

s=s+fabs(f[i] - fnow);

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

}

printf("\n先来先服务和为:%d\n",s);

}

void sstf(int m[],int mnow)

{

int n,k,tmp,x,sum=0;

printf("最短时间服务顺序:");

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

tmp = fabs(m[0]-mnow);

x = 0;

for(k=1;k<9-n;k++){

if(fabs(m[k]-mnow)

x = k;

tmp = fabs(m[k]-mnow);

}

}

printf("%d ",m[x]);

sum =sum +tmp;

mnow = m[x];

for(k=0;k<9-x-n;k++){

m[x+k]=m[x+k+1];

}

}

printf("\n最短时间和为:%d\n",sum);

}

void scan(int d[],int dnow)

{

int x,y,sum=0;

printf("扫描服务顺序:");

sort(d,9);

for(x = 0; x < 9; x++){

if(d[x] > dnow){

y = x;

break;

}

}

for(x = y; x < 9; x++){

printf("%d ",d[x]);

sum = sum + fabs(dnow-d[x]);

}

for(x = y-1;x>=0;x--){

printf("%d ",d[x]);

sum = sum + fabs(dnow-d[x]);

}

printf("\n扫描和为:%d\n",sum);

}

void cscan(int e[],int enow){

int x,y,sum =0;

sort(e,9);

printf("循环扫描顺序为:");

for(x = 0; x < 9; x++){

if(e[x] > enow){

y = x;

break;

}

}

for(x = y; x < 9; x++ ){

printf("%d ",e[x]);

sum = sum + fabs(enow-e[x]);

}

for(x = 0;x < y; x++){

printf("%d ",e[x]);

sum = sum + fabs(enow-e[x]);

}

printf("\n循环扫描和为:%d\n",sum);

}

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

int i,j,tmp;

for(i=0;i

for(j=0;j

if(a[j]>a[j+1]){

tmp=a[j+1];

a[j+1]=a[j];

a[j]=tmp; //做数据交换位置处理

}

}

}

}

参考资料:http://blog.csdn.net/wanghao109/article/details/13004751

移臂调度算法java_C语言 磁盘调度模拟相关推荐

  1. 移臂调度算法c语言,磁盘移臂调度算法实验

    操作系统实验报告 实验题目:实验八:磁盘移臂调度算法实验 软件环境:Linux操作系统 实验目的:加深对于操作系统设备管理技术的了解,体验磁盘移臂调度算法的重要性:掌握几种重要的磁盘移臂调度算法,练习 ...

  2. 【磁盘调度算法】磁盘调度模拟的设计与分析

    今天呢?我将用两种语言写这篇博客---------题记. 所有的分析大家见代码中的注释.Thank you. 设计并实现一个分别利用下列磁盘调度算法进行磁盘调度的模拟程序. l (1)扫描算法 l ( ...

  3. 1.2.7存储结构-磁盘管理:磁盘移臂调度算法、先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描算法(SCAN)、循环扫描(CSCAN)

    1.2.7存储结构-磁盘管理:磁盘移臂调度算法.先来先服务(FCFS).最短寻道时间优先(SSTF).扫描算法(SCAN).循环扫描(CSCAN) 先来先服务(FCFS) 最短寻道时间优先(SSTF) ...

  4. 操作系统之移臂调度算法

    本章分享操作系统之移臂调度算法,移臂调度算法是驱动调度技术中的算法,目的是减少为若干I/O请求服务所需消耗的总时间,从而提高系统效率.常见的移臂调度算法有先来先服务算法(FCFS).最短查找时间优先算 ...

  5. 操作系统:磁盘的移臂调度算法

    一.先来先服务调度算法FCFS: --算法:根据访问请求的先后次序选择先提出访问请求的为之服务. --优缺点:是磁盘调度的最简单的一种形式,它既容易实现,又公平合理,缺点是效率不高. 二.最短查找时间 ...

  6. 最短移臂调度算法_MATLAB优化算法实例——蚁群算法

    ❝ 欢迎关注「工科男的Maltab学习日志」,采用Mardown文本编辑器编写文章,全新排版升级,内容.代码更简洁,同时开通了视频号,「工科男的日常」欢迎大家关注. --工科男 ❞ 1 蚁群算法基本理 ...

  7. 操作系统----磁盘调度(电梯调度算法)

    一.实验内容 模拟电梯调度算法,实现对磁盘的调度. 二.实验目的 磁盘是一种高速.大量旋转型.可直接存取的存储设备.它作为计算机系统的辅助存储器,负担着繁重的输入输出任务,在多道程序设计系统中,往往同 ...

  8. 什么是移臂调度,什么是旋转调度?

    移臂调度是指在满足一个磁盘请求时,总是选取与当前移动臂前进方向上最近的那个请求,使移臂距离最短. 旋转调度是指在满足一个磁盘请求时,总是选取与当前读写头旋转方向上最近的那个请求,是旋转圈数最少. 转载 ...

  9. 操作系统实验:驱动调度 模拟电梯调度算法 C语言实现

    一:实验内容 模拟电梯调度算法,对磁盘进行移臂和旋转调度. 二.实验题目 (1)."驱动调度"进程和"接收请求"进程能否占有处理器运行,取决于磁盘的结束中断信 ...

最新文章

  1. Linux Performance
  2. ANT无线通信技术(2) 通道配置
  3. ARP病毒查找与防范
  4. 数字孪生技术从概念走向实际应用
  5. STL之map中排序方式的重载
  6. C#测量程序运行时间及cpu使用时间(转)
  7. Educational Codeforces Round 53C(二分,思维|构造)
  8. SSAS系列——【05】多维数据(编程体系结构)
  9. %02 java_Java基础02—变量、运算符和数据类型转换(示例代码)
  10. 成功恢复UNIX误删除数据库文件(NODE已被清除)
  11. 服务器可以把ssd虚拟成内存,西数黑科技:把SSD当内存用
  12. [实践篇]13.9 如何使用gcore(ramdump)排查内存黑洞?
  13. 【信息汇总】北京航空航天大学计算机考研
  14. 湘源里面关于缩放的问题
  15. 使用开源软件FFmpeg将各种格式视频转换成MP4视频格式(最简单方法)
  16. 计算机课题推荐人意见,课题申请推荐人意见怎么写
  17. 使用Xbrowser远程连接REHL6.5
  18. C++求矩阵最大值和最小值
  19. 最新版 sublime text 3 切换中文方法
  20. C语言语音朗读小工具

热门文章

  1. PL/SQL计算质数
  2. 为什么别人总是把你往“坏处想”?浅谈如何更好地与项目团队中的“网友”更好地交流
  3. POJ 百练 2965: 玛雅历
  4. 用Java测试电脑速度的小方法
  5. phd计算机考试,21校计算机Phd详细申请经验
  6. 860-什么是MTU?
  7. rosbag录制话题、播放话题多种模式
  8. (ZT) 上海房价再涨五倍也并非天方夜谭?
  9. excel显著性检验_《如何利用Excel对所得数据进行显著性分析?》 excel怎么做方差齐性检验...
  10. 100°C TALK百度健康行业沙龙:大数据赋能大健康产业发展