OS复习笔记ch11-4

磁盘调度

磁盘的物理结构

经典的温彻斯特盘
image.png
其中的几个概念:

  • 盘面:可以看成是一个操场的平面,不同的盘面通过中间的轴串在一起
  • 磁道:磁道可以看成是操场的跑道,我们知道操场上有外道和内道,最内道中间往往是足球场,而一个个跑道呈圆环状,且外道比内道距离更远,跑起来更费力。磁道类似,如图所示,磁道往往有很多条,但是不同磁道的数据总量一致,所以内道的位密度要比外道大。
  • 扇区:指按照一定的角度,将磁道划分成不同的扇区,每个扇区包含磁道的一部分,也就是磁盘块。扇区是磁盘的最小组成单元,通常是512字节。
  • 柱面:是指不同盘面中相对位置相同的磁道,这些磁道可以立体得看成一个圆柱,形象称之为柱面
  • 磁头:只能水平移动,每次读写数据前,需要靠磁臂移动到相应的磁道。一般的盘片可以正反读写,所以会有一正一反两个磁头。

由于磁盘在组成原理里面也会有所涉及,所以有关磁盘物理结构和其中的逻辑关系这里不在阐述,需要深入的同学可以看看计组。

磁盘的性能参数

类似于CPU的进程调度,磁盘是一个共享结构,对应有一个就绪队列,不同的I/O请求需要磁盘调度。

image.png

访问时间
image.png

  • 寻道/定位时间:Ts,磁头移动到指定柱面的时间
  • 旋转延迟:Td = 1/2r,磁头到访问扇区的时间
  • 传送时间:Tt = b/rN,传输数据的时间
    时间性能计算
    image.png

一般b可能需要连续扇区读取,具体的读写时间取决于磁盘扇区的结构;这里的m是一个常数,n是需要跨越的磁道数,s为启动时间

image.png
题目分析:
已知扇区是磁盘的最小组成单元,通常是512字节,1280KB/512B= 2560个扇区

  1. 如果数据连续分配,那么也就是占2560/320=8个磁道,由于是连续磁道,并且扇区是磁道上的连续扇区,那么只考虑第一次的寻道时间、8个磁道的旋转延迟和数据传输即可,所以总时间是9+(4.15+8.3)* 8 = 108.6ms
  2. 而如果2560扇区是随机分布的,那么每次都要考虑寻道时间、旋转延迟时间和数据传输时间,(9+4.15+8.3/320)* 2560 = 333730.56 ms
    这里的0.026 = 8.3/320是读取一个扇区数据的时间,通过上述计算可以发现磁盘的性能和数据存储方式有很大关系

磁盘调度策略

image.png

我们假设静态的9个就绪进程,需要访问:55, 58, 39, 18, 90, 160, 150, 38, 184的磁道,通过平均跨越的磁道数来理解和比较不同算法之间的差距。

先进先出算法(FIFO)

到目前为止,几乎所有的操作系统内部的算法集锦都会涉及到FIFO,这里也不例外。顾名思义,就是每次只顾眼前人,谁先来处理谁。
image.png
按照每次的移动距离取平均值得到55.3
优点如下:
image.png

缺点也很明显,就是效率不够高,考虑一个极端的情况,如果10,100,20,70,30,80,这样的话指针反复横跳肯定不是最优解。

最短查找时间优先(SSTF)

每次都找离得最近的磁道去查找时间(贪心的思想)
image.png
一开始在100,第一个全局最近的就是90,然后是58,55……

优点:基于贪心,SSTF在效率上有所提升,但也不是最优的算法。
缺点:对中间磁道有利,边缘磁道可能长期得不到响应,不公平。

因为基于贪心,假设一开始磁道的位置处于中心,那么先来的边缘磁道访问请求不占优势,如果访问中间磁道的请求源源不断来,就一直被优先处理。

扫描算法(SCAN)

image.png

扫描算法,顾名思义移动臂在一个方向上移动,满足所有未完成的请求直到到达此方向的最后一个磁道(或没有请求为止,Look策略),然后反向处理
对于即将掉头的扫描点附近的磁道会有偏向或者是不公平:对扫描前进方向上刚刚出现的进程有偏向,而对于刚刚扫描过的磁道的进程请求,进程需要等待很久才会被响应。

SCAN算法,又被称为电梯调度算法。移动臂在往一个方向移动的过程中,类似于电梯往下接人的时候,明知道最下面一层是没有人的,它是不会再往下走的。而对于电梯下降方向来的人都能坐上,但是刚刚走过的楼层就必须等到电梯把所有向下的人带走才能重新回来。

循环扫描算法(C-SCAN)

由于SCAN算法的偏向性,会增加等待的时间。为了解决这样的情况,CSCAN算法的思想是,访问完最里面一个要求服务的序列之后,立即回到最外层欲访问磁道。始终保持一个方向,故也称之为单向扫描调度算法。从最里面的一个磁道立即回到最外层欲访问的磁道,这步的距离是两者磁道号差的绝对值。
简单来说,就两点

  1. 在一个方向上使用扫描(初始化需要确定)
  2. 当到达最后一个磁道时,移动臂直接移动到另一沿的第一个位置,开始扫描。
    image.png

然后,我们综合以上四种算法,加以比较
image.png

  • 效率:从平均寻道长度来看,SSTF和SCAN表现最好,因为它们的平均寻道长度较短。
  • 公平性:SCAN和C-SCAN提供更高的公平性,尤其是C-SCAN,它通过循环单向处理避免了长时间的磁道等待。
  • 选择建议
    • 对于寻道时间敏感的系统,SSTF可能是最佳选择。
    • 如果需要平衡寻道时间和公平性,SCAN是一个好的选择。
    • 对于需要避免磁道饥饿并保证访问周期性的环境,C-SCAN将是更合适的选择。
N步扫描算法(N-step-SCAN)

image.png
把I/O请求队列分列(局部子队列),可以防止磁臂黏着现象,了解即可
当N = 1时,那就是FCFS先来先服务,而N = 请求数,相当于SCAN算法

分步电梯调度算法(FSCAN)

image.png

FSCAN算法将磁盘请求队列分成两个子队列,一个是由当前所有请求磁盘I/O形成的队列,由磁盘调度按SCAN算法进行处理。另一个是在扫描期间,新出现的所有请求I/O磁盘的进程进入等待处理的请求队列中,将所有新的请求会推迟到下一次扫描时处理。该算法同样也可以解决磁臂黏着的问题。了解一下即可

多磁盘管理

RAID( Redundant Array of Independent Disks )即独立磁盘冗余阵列,简称为「磁盘阵列」,其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从而实现比单块磁盘更好的存储性能和更高的可靠性。
RAID 层级的命名会以 RAID 开头并带数字,例如:RAID 0、RAID 1、RAID 5、RAID 6、RAID 7、RAID 01、RAID 10、RAID 50、RAID 60。每种等级都有其理论上的优缺点,不同的等级在两个目标间获取平衡,分别是增加资料可靠性以及增加存储器(群)读写性能。

采用RAID的主要优势是:

  • 可靠性高
  • 磁盘I/O速度快
  • 性能/价格比高

磁盘缓存

磁盘缓存,主存中为磁盘扇区设置的缓冲区,含有磁盘中某些扇区的副本。
磁盘缓存的置换算法,和虚拟存储的淘汰算法类似,比如LRU和LFU,简单了解一下。

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

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

相关文章

论文解读:Pandora: 朝着结合自然语言动作与视频状态的通用世界模型发展

论文《Pandora: 朝着结合自然语言动作与视频状态的通用世界模型发展》探索了构建一个高度集成的AI系统,旨在理解自然语言指令并在视频所代表的视觉环境中执行相应操作,从而推进对复杂动态场景的建模与预测能力。以下是该论文的关键点和贡献的详细解读&am…

针对河南大学数据结构傻逼学堂在线的自动化脚本

首先展示一下我们的答案 {1: [对象], 2: [关系]} {1: [非数值计算], 2: [操作]} {1: [线性表]} [D] [B] [B] [C] [C] {1: [操作]} {1: [数据关系, 数据对象上关系的集合]} {1: [性质相同]} {1: [物理结构]} {1: [存储结构, 操作表示]} [C] [B] [D] [B] [D] [true] [false] [fa…

Polyp-DDPM: Diffusion-Based Semantic Polyp Synthesis for Enhanced Segmentation

Polyp- ddpm:基于扩散的语义Polyp合成增强分割 摘要: 本研究介绍了一种基于扩散的方法Polyp-DDPM,该方法用于生成假面条件下息肉的逼真图像,旨在增强胃肠道息肉的分割。我们的方法解决了与医学图像相关的数据限制、高注释成本和隐私问题的挑…

pywinauto入门指南:轻松掌握Windows GUI自动化

pywinauto库概述: pywinauto是一个Python库,主要用于自动化Windows应用程序的GUI测试和操作.它提供了一组简单而强大的API,可以模拟用户与Windows应用程序的交互,包括点击按钮、输入文本、选择菜单等操作. 安装 ##pywinauto可以通过pip进行安装,打开命令行运行: pip install…

交叉注意力一脚踹进医学图像分割!新成果精度、效率表现SOTA

为解决传统方法的局限性,研究者们提出了将交叉注意力机制应用于医学图像分割。 交叉注意力机制能更有效地整合来自不同模态/尺度的特征,让模型同时捕捉全局和局部信息,加速学习并减少干扰。这样不仅可以提高分割的精度,还可以减少…

深度解析SD-WAN在企业组网中的应用场景

在现代企业快速发展的网络环境中,SD-WAN技术不仅是实现企业各站点间高效连接的关键,也是满足不同站点对互联网、SaaS云应用和公有云等多种业务需求的理想选择。本文将从企业的WAN业务需求出发,对SD-WAN的组网场景进行全面解析,涵盖…

日元预计明年开始上涨

被称为“日元先生”的前大藏省(现财务省)财务官榊原英资预测,美元兑日元汇率将在今年底或2025年初逐步升至130。他认为,通缩时代已经过去,通货膨胀即将来临。 《日本经济新闻》6月5日报道,日本财务省于5月3…

oracle12c到19c adg搭建(五)dg搭建后进行切换19c进行数据字典升级

一、备库切主库升级 12c切换为19c主库的时候是由低版本到高版本所以cdb和pdb的数据字典需要进行升级才可以让数据与软件版本兼容。 1.1切换 SQL> alter database recover managed standby database finish; Database altered. SQL> alter database commit to switcho…

阿里云使用域名访问部署网站【2024 详细版】

目录 一、注册域名 1.创建信息模板 2.查询注册域名 二、域名设置 1.SSL证书 2.域名解析 3.宝塔设置 一、注册域名 1.创建信息模板 点击右上角【三】-【域名】-【信息模板】-【创建信息模板】- 填写信息 模板分为个人和企业两种,根据情况进行创建即可&…

C++ GPU编程(英伟达CUDA)

安装编译环境 https://developer.download.nvidia.com/compute/cuda/12.5.0/local_installers/cuda_12.5.0_555.85_windows.exe CMakeLists.txt cmake_minimum_required(VERSION 3.10)set(CMAKE_CXX_STANDARD 17) set(CMAKE_BUILD_TYPE Release) #set(CMAKE_CUDA_ARCHITECTUR…

微服务中不同服务使用openfeign 相互调用

首先 我们上文 已经知道了 nacos 的注册服务,现在 我们 在不同服务中相互调用就可以使用openfeign 直接调用,而不是 再写冗余的调用代码啦 首先 我们的微服务组件如下 因为我这个微服务是我在 员工登录demo 中 拆出来的,在userlogin模块中…

【计算机毕业设计】​206校园顺路代送微信小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

qmt量化交易策略小白学习笔记第43期【qmt编程之期货数据--如何获取历史主力合约--原生python】

qmt编程之获取期货数据 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 感谢关注,咨询免费开通量化回测与获取实盘权限,欢迎和博主联系! 获取历史主力合约 …

Hi3861 OpenHarmony嵌入式应用入门--LiteOS Timer

iteOS Timer(定时器)是LiteOS操作系统中的一个重要组件,它提供了一种基于软件模拟的定时器功能,用于满足在硬件定时器数量不足时的定时需求。 软件定时器:基于系统Tick时钟中断,由软件来模拟的定时器。当经…

【计算机网络体系结构】计算机网络体系结构实验-FTP实验

1. 2. 3. wireshark 第一行:帧Frame 545:要发送的数据块,所抓帧的序号为545,捕获字节数等于传送字节数:451字节第二行:源Mac地址为a4:bb:6d:6e:28:9a;目标Mac地址为24:00:fa:e4:df:d8第三行&…

深度学习Day-21:ResNet与DenseNet结合

🍨 本文为:[🔗365天深度学习训练营] 中的学习记录博客 🍖 原作者:[K同学啊 | 接辅导、项目定制] 要求: 探索ResNet与DenseNet结合的可能性根据模型特性构建新的模型框架验证改进后模型的效果 一、 基础配…

【linux】dup文件描述符复制函数和管道详解

目录 一、文件描述符复制 1、dup函数(复制文件描述符) ​编辑 2、dup2函数(复制文件描述符) ​编辑 二、无名管道pipe 1、概述 2、无名管道的创建 3、无名管道读写的特点 4、无名管道ps -A | grep bash实现 三、有名管道FI…

Java8使用Stream流实现List列表查询、统计、排序、分组、合并

Java8使用Stream流实现List列表查询、统计、排序以及分组 目录 一、查询方法1.1 forEach1.2 filter(T -> boolean)1.3 filterAny() 和 filterFirst()1.4 map(T -> R) 和 flatMap(T -> Stream)1.5 distinct()1.6 limit(long n) 和 skip(long n) 二、判断方法2.1 anyMa…

容器之按钮盒构件演示

代码; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window;window gtk_window_new(GTK_WINDO…

xargs 传参

xargs的默认命令是 echo&#xff0c;空格是默认定界符。这意味着通过管道传递给 xargs的输入将会包含换行和空白&#xff0c;不过通过 xargs 的处理&#xff0c;换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。 xargs -n1 // 一次输出一个参数到一行&#xf…