第五章 I/O管理 十、磁盘调度算法(FCFS、SSTF、SCAN、C-SCAN、C-LOOK)

news2024/11/30 6:44:51

目录

一、概括

二、一次磁盘读/写操作需要的时间

1、寻找时间(寻道时间): 

2、延迟时间:

3、传输时间(读磁盘的时间)

三、先来先服务算法(FCFS)

1、定义:

2、例子:

3、优点;

4、缺点:

四、最短寻找时间优先(SSTF)

1、定义:

2、例子:

3、优点:

4、缺点:

五、扫描算法、电梯算法(SCAN)

1、定义:

2、例子:

3、优点:

4、缺点:

六、LOOK调度算法

1、定义:

2、例子:

3、优点:

七、循环扫描算法(C-SCAN)

1、定义:

2、例子:

3、优点:

4、缺点:

八、C-LOOK 调度算法

1、定义:

2、例子:

3、优点:

九、总结


一、概括

磁盘调度算法是计算机操作系统中用于控制磁盘访问的算法。它的主要目的是优化磁盘读写,提高磁盘的效率,使得磁盘的访问更加快速和有效。

常见的磁盘调度算法有以下几种:

  1. 先来先服务(FCFS):按照请求的先后顺序进行磁盘调度。如果后面来的请求需要等待前面的请求完成后才能执行,会导致平均等待时间较长。

  2. 最短寻道时间优先(SSTF):选择当前距离磁头最近的请求先执行。这种算法可以减少等待时间,但是可能会出现饥饿现象。

  3. 扫描算法(SCAN):磁头按一个方向移动,直到遇到最远的请求,然后返回磁盘的另一端。这种算法可以平均分配磁盘访问的时间,但是会导致一些请求长时间等待。

  4. 循环扫描算法(C-SCAN):类似于扫描算法,但是磁头到达磁盘的一端时,会立即返回另一端,而不是等待请求。这种算法可以避免饥饿现象,并且磁盘的访问时间也比较均匀。

  5. 最小移动算法(C-LOOK):只移动到最后一个请求的位置,然后再返回到第一个请求的位置。这种算法可以减少磁头的移动次数,提高磁盘访问效率。

不同的磁盘调度算法适用于不同的场景,需要根据实际情况选择合适的算法。

二、一次磁盘读/写操作需要的时间

1、寻找时间(寻道时间): 

在读/写数据前,将磁头移动到指定磁道所花的时间。

①启动磁头臂是需要时间的。假设耗时为s;

②移动磁头也是需要时间的。假设磁头匀速移动,每跨越一个磁道耗时为m,总共需要跨越n条磁道。

则:          寻道时间Ts = s+ m*n

2、延迟时间:

3、传输时间(读磁盘的时间)

三、先来先服务算法(FCFS)

1、定义:

根据进程请求访问磁盘的先后顺序进行调度。

2、例子:

根据访问的先后,得到如下移动磁头的顺序

为此,我们可以计算出一共移动了多少次磁头

100到55为45次;

55到58为3次;

依此类推

45+3+19+21+72+70+10+112+146 = 498次

接着,我们可以算出响应一个请求平均需要移动498 / 9 = 55.3个磁道(平均寻找长度)

3、优点;

  1. 公平;
  2. 如果请求访问的磁道比较集中的话,算法性能还算过的去。

4、缺点:

如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。

四、最短寻找时间优先(SSTF)

1、定义:

  • SSTF算法会优先处理的磁道是与当前磁头最近的磁道。
  • 可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。
  • (其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优)

2、例子:

1.每次找距离当前磁道最近的磁道

2.磁头总共移动了(100-18)+ (184-18)= 248个磁道

3.响应一个请求平均需要移动248/9= 27.5个磁道(平均寻找长度)

3、优点:

性能较好,平均寻道时间短

4、缺点:

可能产生“饥饿”现象

Eg:

本例中,如果在处理18号磁道的访问请求时又来了一个38号磁道的访问请求,处理38号磁道的访问请求时又来了一个18号磁道的访问请求。如果有源源不断的18号、38号磁道的访问请求到来的话,150、160、184号磁道的访问请求就永远得不到满足,从而产生“饥饿”现象。

产生饥饿的原因在于:

磁头在一个小区域内来回来去地移动

五、扫描算法、电梯算法(SCAN)

1、定义:

  • SSTF算法会产生饥饿的原因在于:磁头有可能在一个小区域内来回来去地移动。
  • 为了防止这个问题,可以规定,只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。
  • 这就是扫描算法(SCAN)的思想。由于磁头移动的方式很像电梯,因此也叫电梯算法。

2、例子:

虽然我们不访问200号磁道,但是仍然需要访问过它后才能改变方向

磁头总共移动了(200-100)+(200-18)= 282个磁道
响应一个请求平均需要移动282/9= 31.3个磁道(平均寻找长度)

3、优点:

性能较好,平均寻道时间较短,不会产生饥饿现象

4、缺点:

  1. 只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。
  2. SCAN算法对于各个位置磁道的响应频率不平均(如:假设此时磁头正在往右移动,且刚处理过90号磁道,那么下次处理90号磁道的请求就需要等磁头移动很长一段距离;而响应了184号磁道的请求之后,很快又可以再次响应184号磁道的请求了)
     

六、LOOK调度算法

1、定义:

  • 扫描算法(SCAN)中,只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。
  • LOOK调度算法就是为了解决这个问题,如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。(边移动边观察,因此叫LOOK)

2、例子:

磁头总共移动了(184-100)+ (184-18)=250个磁道
响应一个请求平均需要移动250/9= 27.5个磁道(平均寻找长度)

3、优点:

比起SCAN算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短

七、循环扫描算法(C-SCAN)

1、定义:

  • SCAN算法对于各个位置磁道的响应频率不平均,而 C-SCAN算法就是为了解决这个问题。
  • 规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求。

2、例子:

磁头总共移动了(200-100)+ (200-0)+(90-0)= 390个磁道
响应一个请求平均需要移动390/9= 43.3个磁道(平均寻找长度)

3、优点:

比起SCAN来,对于各个位置磁道的响应频率很平均。

4、缺点:

只有到达最边上的磁道时才能改变磁头移动方向.

事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了;

并且,磁头返回时其实只需要返回到18号磁道即可,不需要返回到最边缘的磁道.

另外,比起扫描算法来,平均寻道时间更长。

八、C-LOOK 调度算法

1、定义:

  • C-SCAN算法的主要缺点是只有到达最边上的磁道时才能改变磁头移动方向,并且磁头返回时不一定需要返回到最边缘的磁道上。
  • C-LOOK算法就是为了解决这个问题。
  • 如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。

2、例子:

磁头总共移动了(184-100)+ (184-18)+(90-18)= 322个磁道
响应一个请求平均需要移动322/9= 35.8个磁道(平均寻找长度)

3、优点:

比起C-SCAN算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短

九、总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1159592.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qwt QwtPolarPlot类使用

1.概述 QwtPolarPlot是Qwt库中用于绘制极坐标图的类。它继承自QwtPolarItemDict和QFrame类,并且可以作为QwtPlot控件的一部分使用。 以下是类的继承关系图: 2.常用方法 设置标签: void setTitle (const QString &)void setTitle (con…

降低毕业论文写作压力的终极指南

亲爱的同学们,时光荏苒,转眼间你们即将踏入毕业生的行列。毕业论文作为本科和研究生阶段的重要任务,不仅是对所学知识的综合运用,更是一次对自己学术能力和专业素养的全面考验。然而,论文写作常常伴随着压力和焦虑&…

YOLOv5:修改backbone为MobileOne

YOLOv5:修改backbone为MobileOne 前言前提条件相关介绍MobileOneYOLOv5修改backbone为MobileOne修改common.py修改yolo.py修改yolov5.yaml配置 参考 前言 记录在YOLOv5修改backbone操作,方便自己查阅。由于本人水平有限,难免出现错漏&#xf…

前端基础之JavaScript

JavaScript是一种能够在网页上添加交互效果的脚本语言,也被称为客户端语言。它可以在网页中操作HTML元素、改变CSS样式,以及处理用户的交互事件等。 以下是JavaScript的常见基础知识点: 变量和数据类型:JavaScript中的变量可以存…

YOLOv7优化:独家创新(Partial_C_Detect)检测头结构创新,实现涨点 | 检测头新颖创新系列

💡💡💡本文独家改进:独家创新(Partial_C_Detect)检测头结构创新,适合科研创新度十足,强烈推荐 SC_C_Detect | 亲测在多个数据集能够实现大幅涨点 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOLO…

【实现多个接口的使用】

文章目录 前言实现多个接口接口间的继承接口使用实例给对象数组排序创建一个比较器 总结 前言 实现多个接口 Java中不支持多继承,但是一个类可以实现多个接口 下面是自己反复理了很久才敲出来的,涉及到之前学的很多知识点 如果哪看不懂,真…

基于向量数据库的文档检索实战

推荐:用 NSDT编辑器 快速搭建可编程3D场景 在过去的六个月里,我一直在 A 系列初创公司 Voxel51 工作,该公司是开源计算机视觉工具包 FiftyOne 的创建者。 作为一名机器学习工程师和开发人员布道者,我的工作是倾听我们的开源社区的…

LabVIEW开发双目立体系统猪重估算

LabVIEW开发双目立体系统猪重估算 动物的活重是各种研究中的重要参考,例如动物生长,饲料转化率,健康状况和疾病发生。生长中的动物的体重为保持它们处于适当的营养和环境水平提供了一个有价值的参数或指标。动物的利润通常与收入和成本之间的…

Sci Immunol丨Tim-3 适配器蛋白 Bat3 是耐受性树突状细胞

今天和大家分享一篇发表于2022年3月的文章,题目为“Tim-3 adapter protein Bat3 acts as an endogenous regulator of tolerogenic dendritic cell function”,发表在《Sci Immunol》杂志上。文章主要研究了Tim-3和其适配蛋白Bat3在调节免疫应答中的作用…

2023年【R1快开门式压力容器操作】最新解析及R1快开门式压力容器操作复审考试

题库来源:安全生产模拟考试一点通公众号小程序 R1快开门式压力容器操作最新解析是安全生产模拟考试一点通生成的,R1快开门式压力容器操作证模拟考试题库是根据R1快开门式压力容器操作最新版教材汇编出R1快开门式压力容器操作仿真模拟考试。2023年【R1快…

linux 安装 elasticsearch 全教程

一、去 elasticsearch官网找到Linux版本的下载链接 地址https://www.elastic.co/cn/downloads/elasticsearch 二、在linux 中用wget下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.4-linux-x86_64.tar.gz三、下载成功后解压文件 tar -x…

Unity中Shader自定义cginc文件

文章目录 前言我们在使用如下场景中的小球来进行自己的 GI Shader测试一、先找到Unity自带的 cginc 库二、仿照 Unity 的 cginc 文件,写一个我们自己的 cginc 文件1、我们新建一个文件,在资源管理器中把 文件后缀名修改成 .cginc2、我们打开Unity自己的c…

【Linux】安装使用Nginx负载均衡,并且部署前端项目

目录 一、Nginx概述 1. 什么 2. 背景 3. 作用 二、Nginx负载均衡 1. 讲述 2. 使用 1. 下载 2. 安装 3. 负载均衡 三、前端部署 1. 准备 2. 部署 一、Nginx概述 1. 什么 Nginx是一个高性能的开源Web服务器和反向代理服务器。它具有轻量级、高并发、低内存消耗的…

让你笑到不行的笑话短视频接口,快来试试!

11在当今这个快节奏的社会中,笑话成为了许多人调节情绪的有效方法。如今,短视频平台已经成为了最受欢迎的娱乐方式之一,因此,将笑话和短视频结合起来,成为了一种很有趣的方式来带给我们欢乐。今天我们要介绍的是挖数据…

【电路笔记】-正弦波形

正弦波 文章目录 正弦波1、概述2、波形产生3、总结 在 19 世纪末的 10 年间,许多技术成就使得交流电的使用得以扩展,并克服了直流电向公众供电的局限性。 1882 年,法国发明了变压器,它简化了交流电的分配,正如我们将在…

【免费活动】11月4日敏捷武林上海站 | Scrum.org CEO 亲临现场

活动介绍 过去的几年里,外界的风云变幻为我们的生活增添了一些不一样的色彩。在VUCA世界的浪潮里,每一个人都成为自己生活里的冒险家。面对每一次的变化,勇于探索未知,迎接挑战,努力追逐更好的自己。 七月&#xff0…

gcc/g++使用格式+各种选项,预处理/编译(分析树,编译优化,生成目标代码)/汇编/链接过程(函数库,动态链接)

目录 gcc/g--编译器 介绍 使用格式 通用选项 编译选项 链接选项 程序编译过程 预处理(宏替换) 编译 (生成汇编) 分析树(parse tree) 编译优化 删除死代码 寄存器分配和调度 强度削弱 内联函数 生成目标代码 汇编 (生成二进制代码) 链接(生成可执行文件) 函…

跨境电商怎么做?欲善其事,先利其器!

当前,跨境电商正在以飞速的发展趋势推进,在未来将会朝向成熟系统化的方向发展,对于跨境电商从业者来说既是机遇,也是挑战。不少想转行的朋友对于跨境行业早已“跃跃欲试”,但是不了解跨境电商却又久久不敢冒险......那…

Javassist讲解1(介绍,读写字节码)

Javassist讲解1(介绍,读写字节码) 介绍一、读写字节码1.如何创建新的类2.类冻结 介绍 javassist 使Java字节码操作变得简单,它是一个用于在Java中编辑字节码的类库; 它使Java程序能够在运行时定义一个新类,…

JS(JavaScript) 实现延迟等待(sleep方法)

起因: 只使用 setTimeout 会产生嵌套等方面的问题,达不到想要的效果。 解决方法: 使用 async/await 还有 Promise 相结合的方式来解决问题。 直接上代码: function sleep(time) {return new Promise((resolve) > setTimeout…