常见磁盘调度算法总结

news2024/11/26 22:32:58

磁盘调度算法

    • 📖1. 最短寻道时间优先(SSTF)
    • 📖2. 电梯算法(SCAN或C-SCAN)
    • 📖3. 最短定位时间优先(SPTF)
    • 📖4. 总结

由于IO的高成本,操作系统在决定发送给磁盘的I/O顺序方面历来发挥作用,更具体的说,给定一组I/O请求,磁盘调度程序检查请求并决定下一个要调度的请求.

与任务调度不同,每个任务的长度通常是不知道的,对于磁盘调度,我们可以很好的猜测 “任务” 需要多长时间,通过估计请求的查找和可能的旋转延迟,磁盘调度程序可以知道每个请求将花费多长时间,因此选择先服务花费最少时间的请求. 因此,磁盘调度程序将尝试在其操作中遵循SJF的原则.(principle of SJF,shortest job first

📖1. 最短寻道时间优先(SSTF)

image-20221122164346708

一种早期的磁盘调度方法称为最短寻道时间优先(Shortest-Seek-Time-First, SSTF),SSTF按磁道对I/O请求队列排序,选择在最近磁道上的请求先完成.

例如:假设磁头当前位置在内圈磁道上,并且我们请求扇区21(中间磁道)和2(外圈磁道),那么我们会首先发出对21的请求,等待它完成,然后发出对2的请求.

在这个例子中,SSTF运作良好,首先寻找中间磁道,然后寻找外圈磁道,但SSTF不是万能的,原因如下:

  1. 主机操作系统无法利用驱动器的几何结构,而是只会看到一系列的块,但这个问题可以解决,操作系统可以简单的实现最近块优先(Nearest-Block-First),然后用最近的地址块来请求调度.
  2. 第二个问题更根本:饥饿问题. 如果有过多的内圈磁道请求,那么外圈磁道上的请求将得不到调度,产生饥饿.

SSTF总结:

  • 优点:寻道时间最短
  • 缺点:可能会造成饥饿(当某个请求的磁盘距离磁头较远,而一直有比其更近的请求时,这个请求一直无法执行)

📖2. 电梯算法(SCAN或C-SCAN)

该算法最初称为SCAN简单的以跨越磁道的顺序来服务磁盘请求,我们将一次跨越磁盘称为扫一遍. 因此,如果请求的块所属的磁道在这次扫一遍中已经服务过了,它就不会立即处理,而是排队等待下一次扫一遍.

C-SCAN是一种SCAN的变体,即循环SCAN的缩写. 不是在一个方向扫过磁盘,该算法从外圈扫到内圈,然后从内圈扫到外圈,如此下去.

这种算法有时被称为电梯算法(elevator),因为它的行为像电梯,电梯要么向上,要么向下,而不只根据哪层楼更近来服务请求,在磁盘中,它就防止饥饿.

📖3. 最短定位时间优先(SPTF)

image-20221122170755649

在讨论最短定位时间优先之前(有时也称为最短接入时间优先),我们先来看一个例子,在这个例子中,磁头当前定位在内圈磁道上的扇区30上方. 因此,调度程序必须决定:下一个请求应该安排扇区16还是扇区8,接下来应该服务哪个请求.

答案是:“视情况而定”.

这里的情况是旋转与寻道相比的相对时间,如果在我们的例子中,寻道时间远远高于旋转延迟,那么SSTF就行,但是,如果寻道比旋转块的多,那么,在我们的例子中,寻道远一点的、在外圈磁道的服务请求8,比寻道近一点的、在中间磁道的服务请求16更好,因为16必须旋转很长的距离才能移到磁头下.

在现代驱动器中,正如上面所看到的,查找和旋转大致相当(当然,视具体的请求而定),因此 SPTF 是有用的,它提高了性能。然而,它在操作系统中实现起来更加困难,操作系统通常不太清楚磁道边界在哪,也不知道磁头当前的位置(旋转到了哪里)。因此,SPTF通常在驱动器内部执行.

📖4. 总结

在现代系统中,磁盘可以接受多个分离的请求,它们本身具有复杂的内部调度程序(它们可以准确地实现 SPTF.在磁盘控制器内部,所有相关细节都可以得到,包括精确的磁头位置). 因此,操作系统调度程序通常会选择它认为最好的几个请求(如 16),并将它们全部发送到磁盘。磁盘然后利用其磁头位置和详细的磁道布局信息等内部知识,以最佳可能(SPTF)顺序服务于这些请求.

磁盘调度程序执行的另一个重要相关任务是I/O 合并(I/O merging).

例如,设想一系列请求读取块 33,然后是 8,然后是 34,如文中的图所示. 在这种情况下,调度程序应该将块 33 和34 的请求合并为单个两块请求. 调度程序执行的所有请求都基于合并后的请求.合并在操作系统级别尤其重要,因为它减少了发送到磁盘的请求数量,从而降低了开销.

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

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

相关文章

C语言 0 —— 计算机硬件架构及信息在计算机中的表示

当前的计算机系统,如Window ,Linux,Mac 基本都是基于冯诺依曼的驱动架构设计的。 冯诺依曼架构输入设备先输入公式,给运算器,运算器先算 先算2*5 ,临时放在CPU内部寄存器中,寄存器不够用的时候会…

vscode插件开发(四)Webview(1)

上一篇详细讲解了命令,这回我们一起来看一下Webview。vscode的插件其实可以分为两种,一种是webview插件,另一种是非webview插件。 webview插件的自由度很高,可以满足开发者的各种定制化的要求;而非webview插件只能使用…

我悟了!Mysql事务隔离级别其实是这样!

问题描述 ​ 最近几天在忙项目,有个项目是将业务收集到的数据变动,异步同步到一张数据表中。在测试的过程时,收到QA的反馈,说有订单的数据同步时好时坏。我怀着疑惑的表情打开了那段代码,它的逻辑大概是这样的&#x…

Zookeeper实现分布式锁的原理。

之前学习Redis时候,我们利用Redis实现了分布式锁。 黑马点评项目Redis实现分布式锁_兜兜转转m的博客-CSDN博客 为什么提出了分布式锁的概念呢? 因为在单体项目中,锁是基于JVM虚拟机实现的,在分布式情况下,JVM就不唯…

FullGC频繁,线程数持续增长排查

告警 线上应用fullgc频繁,收到告警 GC监控—堆内存不足 查看近12小时的监控,发现Survivor区一直处于 满状态、fullgc非常频繁、但没有内存溢出的现象,很明显是堆内存不足 GC日志分析—暂停时间并不长 因为fullgc相当频繁,抽…

项目管理(知识体系概述)

项目的定义:为创造独特的产品、服务或者成果进行的临时性工作。 项目的特性:1、独特的产品、服务、成果;2、临时性工作。 项目管理的目的(为了解决什么问题): 1、达成业务目标 2、满足相关方期望 3、提供项目的可预测性 4、提高项目的成果性。 5、在适当的时刻交付…

机器人运动学标定:基于考虑约束的指数积的运动学标定方法——只需要测量位置,避免冗余约束

文章目录写在前面为什么要消除归一化和正交化操作?只用位置而不是位姿去做标定的原因基于消除冗余约束步骤的参数辨识模型分析参考文献写在前面 基于指数积的运动学标定方法介绍: 机器人运动学标定:基于指数积的串联机构运动学标定 机器人运…

Vue表单修饰符:v-model.lazy、v-model.number、v-model.trim

表单修饰符有:lazy、number、trim;修饰符加在v-model后面; lazy修饰符: v-model的作用是双向绑定表单,能获取到input输入框的值,而且是实时获取的,就是当你输入框里的值发生改变就会获取到&…

【Shell 脚本速成】02、Shell 变量详解

目录 一、变量介绍 变量存取原理 二、变量定义 2.1 什么时候需要定义变量? 2.2 定义一个变量 定义变量举例: 定义变量演示: 2.3 取消变量 unset 2.4 有类型变量 declare declare 命令参数: 案例演示: 三…

向前迈进!走入GC世界:G1 GC原理深入解析

第零章:名词解释 mutator:应用线程 STW:Stop-The-World,指除了GC线程,其它所有线程全部暂停的一段时间 并发:指代GC线程与mutator在同一时刻执行任务 并行:指代多个GC线程在同一时刻执行任务…

一站式元数据治理平台——Datahub

一站式元数据治理平台——Datahub万字保姆级长文——Linkedin元数据管理平台Datahub离线安装指南 - 独孤风 - 博客园 (cnblogs.com)企业级数据治理工作怎么开展?Datahub这样做 - 独孤风 - 博客园 (cnblogs.com)【DataHub】 现代数据栈的元数据平台–如何与spark集成…

如何设计金融机构多场景关键应用下的存储架构

【摘要】银行、保险等金融机构存在多场景下的关键应用,如何选择适合各场景下的存储,如何设计适合业务的存储架构,显得尤为重要。本文从当前主流存储架构分析入手,提出金融机构业务场景分析与架构选型思路,以Glusterfs为例,分享如何根据业务场景的特点,有针对性的选取适合…

SQL优化

文章目录提升group by的效率分页查询优化覆盖索引子查询起始位置重定义检查 where,order by,group by后面的列尽量使用 varchar 代替 char。(SQL 性能优化)如果修改 / 更新数据过多,考虑批量进行提升group by的效率 select user_id,user_nam…

spring-security源码学习总结

由于SpringBoot 对 Security 的支持类均位于org.springframework.boot.autoconfigure.security包下,主要通过 SecurityAutoConfiguration 自动配置类和 SecurityProperties 属性配置来完成,所以需要下载springboot源码深入学习 SecurityAutoConfiguratio…

云原生边缘设备解决方案Akri on k3s初体验

作者: 涂家英,SUSE 资深架构师,专注 Cloud-Native 相关产品和解决方案设计,在企业级云原生平台建设领域拥有丰富的经验。 写在前面 k3s 是 SUSE 推出的为物联网和边缘计算构建的经过认证的 Kubernetes 发行版,它可以帮…

指数函数及其导函数

目录前言指数函数的导函数指数函数导函数动图绘制参考文献前言 前面我们介绍了指数函数及其基本性质以及如何在笛卡尔直角坐标系下绘制静态的指数函数图像,这一节,我们将重点讨论一下指数函数的导函数以及导函数的动态表示,为方便起见&#…

大数据(9f)Flink富函数RichFunction

文章目录1、概述2、示例2.1、普通函数2.2、富函数2.2.1、获取富函数的运行时上下文3、源码截取3.1、RichFunction3.2、RuntimeContext1、概述 Rich Function,译名富函数,和普通函数相比,多了:生命周期(open和close方法…

DGL学习笔记——第二章 消息传递范式

提示:DGL用户指南学习中 文章目录一、内置函数和消息传递API二、编写高效的消息传递代码总结消息传递是实现GNN的一种通用框架和编程范式。它从聚合与更新的角度归纳总结了多种GNN模型的实现。 假设节点 𝑣 上的的特征为 𝑥𝑣∈ℝ…

Java(八)----多线程

1. 线程的基本概念 1.1 进程 任何的软件存储在磁盘(硬盘)中,运行软件的时候,OS(操作系统)使用IO技术,将磁盘中的软件的文件加载到内存,程序才能运行。 (进程是从硬盘到内存) 进程的概念 : 应…

Marked.js让您的文档编辑更加轻松自如!

低代码应用平台——kintone既可以保留更改记录,也有流程管理的功能,在公司内部分享会议记录啊、wiki等文档或学习资料等时非常的便利。 kintone还有丰富的文本编辑框,可以对内容进行编辑提高易读性。但是还是有不少人觉得如果能够使用Markdo…