操作系统基础之磁盘

news/2024/6/16 20:35:24

概述

基本概念

磁盘有正反两个盘面,每个盘面有多个同心圆,每个同心圆是一个磁道,每个同心圆又被划分为多个扇区,数据就被存在扇区中。

磁头首先寻找到对应磁道,然后等到磁盘进行周期旋转到指定的扇区,才能读取到对应的数据。存取时间 = 寻道时间 + 等待时间
在这里插入图片描述
盘面号(磁头号):0 ~ M-1;由于一个盘面上只有一个磁头,所以盘面号也叫作磁头号
柱面号(磁道号):0 ~ L-1;磁道编号通常是从外沿向内进行编号
扇区号:1 ~ N;对于同一条磁道可以分为若干扇区,对于扇区分成三个字段

标识符字段:存放扇区的标识信息
校验字段:检验磁盘读写操作的正确性
数据字段:存放数据信息

存储容量计算公式
存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数

扇区编址方式

  • CHS方式:柱面/磁头/扇区,××磁道(柱面),××磁头,××扇区,DOS中称为绝对扇区表示法。
  • LBA方式:相对扇区号,以磁盘第一个扇区(0柱面、0磁头、1扇区)作为LBA的0扇区,后面的扇区依次编号

LBA扇区号与CHS间的转换

  • CHS转换为LBA:若L、M、N分别表示一个磁盘的柱面数(磁道数)、盘面数(磁头数)、扇区数,则第i柱面j磁头k扇区所对应的LBA扇区号为: L B A = ( i ∗ M ∗ N ) + ( j ∗ N ) + k − 1 LBA=(i*M*N)+(j*N)+k-1 LBA=(iMN)+(jN)+k1
  • LBA转换为CHS:若知道LBA扇区号,则对应的柱面号、磁头号、扇区号分别是:
    • 柱面号: i = i n t ( L B A / ( M ∗ N ) ) i=int(LBA/(M*N)) i=int(LBA/(MN))
    • 磁头号: j = [ L B A m o d ( M ∗ N ) ] / N j=[LBAmod(M*N)]/N j=[LBAmod(MN)]/N
    • 扇区号: k = [ L B A m o d ( M ∗ N ) ] m o d N + 1 k=[LBAmod(M*N)]modN+1 k=[LBAmod(MN)]modN+1

磁盘类型

按照磁头是否需要移动进行分类:

  • 固定头磁盘:对于同一盘面上的不同磁道,都有相应位置固定的磁头进行读写,如上图中的黑色磁头和蓝色磁头分别读取一个磁道,对多条磁道进行读写的时候,磁头不需要移动位置。所以对于一个盘面上的多条磁道可以并行进行读取,访问速度较快。同样价格也较高
    在这里插入图片描述
  • 移动头磁盘:对于移动头磁盘,它的磁头是可以沿着径向臂进行径向移动,所以只需要使用一个磁头就可以访问所有的磁道。但是同一时间只能访问一个磁道,只能实现顺序读写,读写速度较慢,造价较低。计算机中使用的磁盘大多数都是移动头磁盘
    在这里插入图片描述

磁盘访问时间

以移动头磁盘为例

寻道时间Ts:把磁头移动到指定磁道上所经历的时间。
T s = m ∗ n + s T_s=m*n+s Ts=mn+s
m:一般磁盘:0.2~0.3;高速磁盘:m≤0.1
s:磁臂启动时间,约为2ms~3ms

磁盘读写操作中绝大部分时间都是寻道时间,所以对寻道时间进行优化可以有效的大幅减少访问时间。

旋转延迟时间Tr:指定扇区移动到磁头下面所经历的时间。
在这里插入图片描述
也就是要读取的蓝色扇区移动到黑色磁头下面所要经历的时间。旋转延迟时间最长为 1 r \frac{1}{r} r1,最短为0。平均旋转延迟时间为 T r = 1 2 r T_r=\frac{1}{2r} Tr=2r1r表示转速。

传输时间Tt:把数据从磁盘读出或向磁盘写入数据所经历的时间。
T t = b r N T_t=\frac{b}{rN} Tt=rNb
b表示要读写的字节数,N表示一条磁道上总的字节数

因此,可将磁盘访问时间 T a T_a Ta表示为:
T a = T s + 1 2 r + b r N T_a=T_s+\frac{1}{2r}+\frac{b}{rN} Ta=Ts+2r1+rNb

磁盘调度

当有大量磁盘I/O请求时,恰当选择调度顺序,以降低完成这些I/O服务的总时间。

磁盘调度方式主要有以下两种:

  • 移臂调度:当同时有多条磁道访问请求时,确定磁道访问顺序,以减少平均寻道时间
  • 旋转调度:当一条磁道上有多个扇区访问请求时,确定扇区访问顺序,以减少旋转延迟时间。按照扇区距离磁头的位置的偏差来进行调度。

旋转调度算法较为简单,只是按照扇区距离磁头的位置的偏差来进行调度。
在这里插入图片描述

磁盘调度算法

主要有两类:

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

移臂调度算法

FCFS

先来先服务,First Come First Served,根据进程请求访问磁盘的先后顺序进行调度。

假设当前磁道在100号磁道,磁头正向磁道号增加的方向(由外向里)移动。现依次有如下磁盘请求队列:23, 376, 205, 132, 61, 190, 29, 4, 40

则磁盘调度顺序为:23, 376, 205, 132, 61, 190, 29, 4, 40

寻道距离:Ts = (100-23) + (376-23) + (376-205) + (205-132) + ... + (40-4)

平均寻道距离 = Ts / 9

由于先来新服务算法并没有对磁盘访问进行优化,所以它可能会得到比较长的寻道距离。

SSTF

Shortest Seek Time First,最短寻道时间优先算法,在选择下一条磁道时,总是访问与当前磁盘距离最近的磁盘进行访问。

对于上例,其磁盘调度顺序为:132, 190, 205, 61, 40, 29, 23, 4, 376

寻道距离:Ts = (132-100) + (190-132) + (205-190) + ... + (23-4) + (376-4)

最短寻道距离优先可以保障每一次的寻道距离最短,但是不能够保障最后系统得到的平均寻道距离最短。

存在的问题:

  • 不能保证平均寻道距离最短;
  • 会产生饥饿现象; 如果系统不断的出现在100号磁道附近的磁道访问请求,则原先较远的磁道请求如205, 376 就会处于很长时间的等待中
  • 影响磁盘的机械寿命:不考虑磁头的移动方向,可能会造成磁盘频繁的改变其磁头运动方向。从而影响磁盘的机械寿命
SCAN

扫描算法,又称为电梯算法,磁头在磁盘上双向移动,选择磁头当前所在磁道最近的请求访问的磁道,并且与磁头移动方向一致,磁头永远都从里向外或从外向里一致移动完才掉头,是目前操作系统中用的比较广泛的一种磁盘移臂调度算法。

在对下一条磁道进行选择时,需要判断:

  • 欲访问磁道与当前磁道的距离
  • 磁头当前的移动方向,即:保持处于磁道号增加或减少状态

对于上例,其磁盘调度顺序为:132, 190, 205, 376, 61, 40, 29, 23, 4

寻道距离:Ts = (132-100) + (190-132) + (205-190) + (376-205) + (376-61) + (61-40) +... + (23-4)

CSCAN

单项扫描调度算法,与SCAN不同的是,只做单向移动,即只能从里向外或从外向里。

N-Step-SCAN

N步扫描算法,为了克服扫描算法和最短寻道时间有限算法的磁臂粘着现象而引入的。

磁臂粘着现象就是指当系统不断的提出对当前磁道的访问,那么磁头会一直处于该磁道上进行磁道访问请求,导致其它磁道的访问被推迟的现象。

N步扫描算法的算法思想:将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次处理这些子队列; 而每处理一个子队列时又采用SCAN算法。

如对于上例,若其子队列的长度为4,则可以分为3个队列:
在这里插入图片描述
它就会首先处理第一个队列中的四个磁道请求,再处理第二个队列和最后的第三个队列。其对于每一个队列的处理都是按照扫描算法来进行处理。

FSCAN

该算法实质上是N步SCAN算法的简化, 它只将磁盘请求队列分成两个子队列:

  • 由当前所有请求磁盘形成的队列,由磁盘调度按SCAN算法进行处理
  • 在扫描期间,将新出现的所有磁盘I/O请求, 放入另一个等待处理的请求队列

如上例,先把所有的磁盘请求放在第一个队列中,对其应用扫描算法进行磁盘调度。若访问过程中出现的新的磁盘请求就放在下面的新队列中,当第一个队列全部访问完,再处理第二个队列。

旋转调度算法

当同一磁道(柱面)上有多个扇区请求时,总是选取与当前读写头最近的那个I/O请求,使旋转圈数最少。

例:对磁盘访问的5个请求,若磁头在1号柱面,先按SCAN算法做移臂调度(柱面号排序),再进行旋转调度(块号排序),则调度顺序如下:
在这里插入图片描述

实战

磁盘调度算法

在磁盘调度管理中,应先进行移臂调度,再进行旋转调度。假设磁盘移动臂位于21号柱面上,进程的请求序列如下表所示。如果采用最短移臂调度算法,那么系统的响应序列应为()。

4个备选项为:
②⑧③⑤⑦①④⑥⑨
②③⑧④⑥⑨①⑤⑦
②⑧③④⑤①⑦⑥⑨
①②③④⑤⑥⑦⑧⑨

请求序列柱面号磁头号扇区号
1789
2363
2396
32105
1784
32310
1779
23104
38108

解析:
应先进行移臂(对应柱面)调度,再进行旋转(对应磁头、扇区)调度。由表可知
①⑤⑦在17柱面(21-17=4)
②③⑧在23柱面(23-21=2)
④⑥在32柱面(32-21=9)
因此按最短移臂算法,应该是23柱面、17柱面、32柱面、38柱面。应该是②⑧③⑤⑦①④⑥⑨。

磁头移动耗时

某磁盘磁头从一个磁道移到另一个磁道需要10ms。文件在磁盘上非连续存放,逻辑上相邻数据块的平均移动距离为10个磁道,每块的旋转延迟时间及传输时间分别为100ms和2ms,则读取一个100块的文件需要()ms。

答案:20200

解析:读取一个连续数据需要的时间包括:移动时间、旋转延迟时间和传输时间三个部分,总时间花为(1010)+100+2=202ms。一次读取一个100块的文件需要的时间为202100=20200ms。

磁盘处理耗时

磁盘上存储数据的排列方式会影响IO服务的总时间。假设每磁道划分成10个物理块,每块存放一个逻辑记录,并且是顺序存放在同一个磁道上:

物理块12345678910
逻辑记录R1R2R3R4R5R6R7R8R9R10

假定磁盘的旋转速度为30ms/周,磁头当前处在R1开始处。使用单缓冲区顺序处理这些记录,每个记录处理时间为6ms,则最长时间为()ms,若对信息存储进行分布优化后,则处理10个记录的最少时间为()ms。

答案:306、90。

解析:
系统读记录的时间为30/10=3ms。对第一种情况,系统读出并处理记录R1之后,将转到记录R4的开始处,为了读出记录R2,磁盘必须再转一圈,需要3ms(读记录) 加30ms (转一圈)的时间。这样,处理10个记录的总时间应为,处理前9个记录的总时间再加上读R10和处理时间:9X33ms+9ms=306ms

若对信息进行优化分布:

物理块12345678910
逻辑记录R1R8R5R2R9R6R3R10R7R4

当读出记录R1并处理结束后,磁头刚好转至R2记录的开始处,立即就可以读出并处理,因此处理10个记录的总时间为:10X(3ms(读记录)+6ms(处理记录))=10X9ms=90ms

缓冲耗时

某计算机系统I/O采用双缓冲工作方式,如下图。假设磁盘块和缓冲区大小相同,每个盘块读入缓冲区的时间T为10μs,缓冲区送用户区的时间M为6μs,系统对每个磁盘块数据的处理时间C为2μs。若用户需要将大小为10个磁盘块的文件逐块从磁盘读入缓冲区,并送到用户区进行处理,则采用双缓冲需花费的时间为()μs,单缓冲需花费的时间为()μs,比单缓冲节约()μs时间。
在这里插入图片描述
答案:108、162、54。

解析:双缓冲的工作特点是可以实现对缓冲区中数据的输入T和提取M,与CPU的计算C,三者并行工作。双缓冲的基本工作过程是在设备输入时,先将数据输入到缓冲区1,装满后便转向缓冲区2。所以双缓冲进一步加快I/O的速度,提高设备的利用率。

在双缓冲时,系统处理一块数据的时间可以粗略地认为是Max(C,T)。如果C<T,可使块设备连续输入;如果C>T,则可使系统不必等待设备输入。本题每一块数据的处理时间为10,采用双缓冲需要花费的时间为10×10+6+2=108。

采用单缓冲的工作过程如图(a)所示。当第一块数据送入用户工作区后,缓冲区是空闲的,可以传送第二块数据。这样第一块数据的处理C1与第二块数据的输入T2是可以并行的,依次类推,如图(b)所示。
在这里插入图片描述
系统对每一块数据的处理时间为:Max(C,T)+M。每一块数据的处理时间为10+6=16,文件的处理时间为16×10+2=162μs,比使用单缓冲节约162-108=54μs时间。

参考

  • 软考高级

http://www.mrgr.cn/p/63151554

相关文章

autoit au3 IT管理员使用指南(二)自动安装软件基础

简介 上篇介绍了au3的基本操作流程,对于我们要自动安装软件,那么就是要安装某个软件,执行一个程序。 本篇介绍执行一个程序。 Run 我们可以通过Run命令来执行一个程序,那么我们尝试执行一下搜狗输入法吧。 创建sougou_input目录,下载搜狗输入法安装文件放入该目录。 创建一…

企业级复杂前中台项目响应式处理方案

目录 01: 前言 02: 响应式下navigtionBar实现方案分析 数据 视图 小结 03: 抽离公用逻辑&#xff0c;封装系列动作 04: PC端navigationBar私有逻辑处理 05: 分析 navigationBar 闪烁问题 06: 处理 navigationBar 闪烁问题 07: category数据缓存&#xff0c;覆盖…

栈和队列的相互实现(C)

目录 1.[用栈实现队列]<https://leetcode.cn/problems/implement-queue-using-stacks/description/>2.全套代码3.[用队列实现栈]<https://leetcode.cn/problems/implement-stack-using-queues/description/>4.全套代码 1.[用栈实现队列]https://leetcode.cn/proble…

【大数据】HDFS、HBase操作教程(含指令和JAVA API)

目录 1.前言 2.HDFS 2.1.指令操作 2.2.JAVA API 3.HBase 3.1.指令操作 3.2.JAVA API 1.前言 本文是作者大数据专栏系列的其中一篇&#xff0c;前文中已经详细聊过分布式文件系统HDFS和分布式数据库HBase了&#xff0c;本文将会是它们的实操讲解。 HDFS相关前文&#x…

LeetCode 题目 119:杨辉三角 II

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任字节跳动数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python&#xff0c;欢迎探讨交流 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题…

python教程12-面向对象进阶

1、classmethod类方法 类方法只能访问类变量,不能访问实例变量2、staticmethod静态方法 不能访问类变量,也不能访问实例变量。除非在实例调用时给方法传实例。3、反射1-判断对象是否有属性的情况 用法: 实例: __name__,模块被其他模块导入的时候调用,是你叫的名字。模块自…

Windows系统完全卸载删除 Node.js (包含控制面板找不到node.js选项情况)

1.打开cmd命令行窗口&#xff0c;输入npm cache clean --force 回车执行 2.打开控制面板&#xff0c;在控制面板中把Node.js卸载 移除之后检查环境变量是否也移除&#xff1a;点击Path&#xff0c;点击编辑。 把环境变量中和node有关的全部移除&#xff0c;然后点击确定。 3.重…

Loongnix系统替换内核操作

Loongnix系统替换内核操作 一、终端下执行命令 sudo apt search linux-image* 返回结果中格式如: linux-image-4.19.0-19-loongson-3 为最新的内核源码。 二、下载内核源码包 sudo apt source linux-image-4.19.0-19-loongson-3 如提示&#xff1a;E: 您必须在 sources.li…

宝塔docker快速安装Halo

宝塔docker快速安装Halo 一、Docker 部署Halo 我们前面还是需要先在宝塔面板环境中安装Docker,一般默认时候是没有安装的。这里我们在宝塔面板中的Docker管理器应用商店中安装。我们可以看到直接等待安装成功。后面在部署程序的时候有需要用到这里界面。二、这里我们在【镜像管…

环形链表(给定一个链表的头节点 head ,返回链表开始入环的第一个节点)的原理讲解

一&#xff1a;题目 二&#xff1a;原理讲解 解决这个题目 &#xff0c;我们得先理解它的原理。 1&#xff1a; 首先假设两个指针&#xff0c;一个快指针fast&#xff0c;一个慢指针slow&#xff0c;fast一次移动两个节点&#xff0c;slow一次移动一个节点。&#xff08;前面…

决策管理中的数学方法

需要注意的是,用excel求解的时候需要导入线性规划加载项如下: pert分析需要DecisionTools中的RiskSolver插件 1.链接:https://pan.baidu.com/s/1wKhUFWgNmQ7U33kl5AypZw 提取码:zqkn 2.“Palisade_Book_expires_Aril_10_2025.lic”文件复制到以下路径: C:\Program Files …

Spring MVC(建立连接 + 请求)

文章目录 一、建立客户端和服务器的连接二、如何构造请求&#xff08;传参&#xff09;2.1 构造请求方式 参数通用注解2.2 传递单个参数2.3 传递多个参数2.4 传递数组/集合2.5 传递对象2.6 传递JSON 三、相关的其他请求操作3.1 获取URL中的参数 PathVariable3.2 上传文件 Requ…

ipa 分区算法分析,图解

参考 Room Segmentation: Survey, Implementation, and Analysis. 分区算法调查&#xff0c;实现以及评估对比 相关论文 分区算法 New Brooms Sweep Clean - An Autonomous Robotic Cleaning Assistant for Professional Office Cleaning 形态分割 Interactive SLAM using …

uniapp 小程序图片懒加载组件 ImageLazyLoad

预览图 组件【ImageLazyLoad】代码 <template><viewclass"image-lazy-load":style"{opacity: opacity,borderRadius: borderRadius rpx,background: background,transition: opacity ${time / 1000}s ease-in-out,}":class"image-lazy-loa…

1.分布式-理论

目录 一、什么是分布式系统 二、CAP理论 1.一致性Consisency 2.可用性(Availability) 3.分区容错性(Partition tolrance) 三、BASE理论 1.Basically Available(基本可用) 2.Soft state&#xff08;软状态&#xff09; 3.Eventually consistent&#xff08;最终一致性&a…

当代 Qt 正确的 安装方法 及 多版本切换

此文写于 20240511 首先去网站Index of /official_releases/online_installers下载一个安装器 安装器有什么用? 可以浏览安装版本 安装组件 安装器版本越能 能装的东西越多 现在只能选Qt5 和 Qt6 至于你公司用的Qt4 我也没招 见招时再拆招 安装器 默认国外源 可以换国内…

Bean的作用域和自动装配

Spring Bean的作用域主要有五种Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。注意,singleton作用域是Spring中的缺省作用域(默认的作用域)。 prototype是原型类型,它在我们创建容…

从0开始学python(七)

目录 前言 1 break、continue和pass函数 1.1 break 1.2 continue 1.3 pass 2、序列的索引及切片操作 2.1字符串的索引和切片 2.1.1 字符串索引 2.1.2 字符串切片 总结 前言 上一篇文章我们介绍了python中的循环结构&#xff0c;包括for和while的使用。本章接着往下讲。…

Chatgpt的应用场景

文案创作类&#xff1a; 作为一名大型语言模型&#xff0c;ChatGPT可以为使用者提供多种文本处理和文字创作方面的服务&#xff0c;例如&#xff1a; 文本生成和创作 ChatGPT可以基于您提供的主题、关键词或文本段落&#xff0c;生成符合使用者要求的新文本。这些文本可以是文…