【操作系统·考研】磁盘和固态磁盘

1.磁盘

1.1 概述

磁盘(Disk)是由表明涂有磁性物质的物理盘片,通过一个称为磁头的导体线圈从磁盘存取数据。
在读/写期间,磁头固定,下面的磁盘在高速旋转。

磁盘是可共享设备(分时共享),是指某段时间内可以有多个用户进行访问,但某一时刻只能由一个作业可以访问。

文件以块为单位存放在磁盘中,读写时也以块为单位。

1.2 结构

1.2.1 磁盘的结构

3865589252-581daa535c026.webp
2326902452-581daa6764c43.webp
磁盘上面的数据存储在一组同心圆中,称为磁道(Track),每条磁道等宽,一个盘面上有上千条磁道。所有盘片上的相同磁道组成柱面(Cylinder)
磁道又划分为若干个扇区(Sector),每个扇区存储容量相同(尽管“长度”不同),一个扇区又称为盘块。相邻扇区或磁道会通过一定的间隙分隔开。

由于扇区是按圆心角度划分,因此由最内道向最外道,密度逐渐递减。
磁盘的存储容量受限于最内道的最大记录密度。

1.2.2 磁盘驱动器的结构


磁盘驱动器由磁头臂、用于旋转磁盘的主轴和用户数据输入/输出的电子设备组成。
多个盘片垂直堆叠,组成磁盘组,每个盘面对应一个磁头,所有磁头固定在一起,与磁盘中心的距离相同且一起移动。

扇区是磁盘可寻址的最小单位,磁盘上能存储的物理块数由盘面数、磁道数和扇区数共同决定。
磁盘地址用 柱面号 · 盘面号 · 扇区号 表示。

1.3 分类

  • 固定头磁盘:磁头相对于盘片的径向方向是固定的。
  • 活动头磁盘:每个磁道对应一个磁头,磁头可移动,可来回伸缩定位磁道。
  • 固定盘磁盘:磁盘永久固定在磁盘驱动器内。
  • 活动盘磁盘:磁盘可移动且可替换。

1.4 管理

1.4.1 初始化

image.png
一个新的磁盘只是一个磁性记录材料的空白盘,真要使用该磁盘,则必须先对该磁盘进行低级格式化/物理格式化,以将每个扇区结构格式化为特殊的数据结构(还确定了磁盘扇区的校验码),然后磁盘控制器才能对其进行读写。
低级格式化后的每个扇区的数据结构由头部、数据区域(通常大小为256B或512B)、尾部组成。头部和尾部包含了一些磁盘控制器的使用信息。

大多数磁盘在工厂的制造过程中就已被低级格式化了,这种格式化能够让厂商测试磁盘的好坏,同时它还能初始化从逻辑块号到无损磁盘扇区的映射。

1.4.2 分区

image.png
在可以使用磁盘存储文件之前,OS还需要将自己的数据结构记录到磁盘上。

  1. 将磁盘划分为一个或多个柱面组成的分区,每个分区的起始扇区和分区大小都将记录在磁盘的主引导记录(MBR)中。
  2. 对物理分区进行逻辑格式化/高级格式化(创建文件系统(FS)),OS将FS的数据结构存储到磁盘上,这些数据结构包括空闲空间、已分配的空间和一个初始为空的目录。

通常扇区都很小,因此为了提高效率,OS将多个相邻的扇区组合在一起,形成一(Linux中称为块),为了进一步提高效率,规定一簇只能存放一个文件的内容,文件所占的空间只能是簇的整数倍。

1.4.3 引导块

计算机启动时需要一个初始化程序(自举程序),它用来初始化CPU、寄存器、设备控制器、内存等,然后启动OS。为此,自举程序需要找到存储在磁盘上的OS内核,然后将它加载到内存中,然后转到OS的起始地址,开始OS的运行。
自举程序通常保存在ROM中,但由于自举代码的改变可能会需要改变ROM硬件的问题,通常只在ROM中存放很小的额自举装入程序,将完整功能的引导程序存放在磁盘的启动块上,启动块位于磁盘的固定位置。具有启动分区的磁盘称为启动磁盘或系统磁盘。
自举装入程序将指示磁盘控制器将引导块读入内存,然后开始执行自举程序,它将从非固定的磁盘位置加载并运行整个OS。

1.4.4 坏块

由于磁盘有移动部件且容错能力弱加之其他外界因素的干扰,因此很容易导致一个或多个扇区的损坏。对于此类盘块的处理有下面几种:

  1. 对于简单磁盘:若采用IDE控制器的磁盘,则坏块可以手动处理;若采用MS-DOS的Format命令执行逻辑格式化时会扫描磁盘以检查坏块,并在检查出来的坏块会在FAT表上标明,以告知程序不要再使用这些坏块。
  2. 对于复杂磁盘:控制器将在磁盘内维护一个坏块列表,这个列表在磁盘出厂时就已被低级初始化,并将在磁盘使用过程中不断更新,与此同时,低级初始化还划出部分块来作为备用块,这些备用块在闲置时将对OS不可见,仅在控制器将准备用备用块来替换坏块时,它们才可见以顶替坏块来承担存储的任务。这种方案称为扇区备用

对坏块的处理实质上是使用某种机制不让OS去使用这些坏块。

1.5 性能指标

1.5.1 寻道时间

活动头磁盘在读写信息前,将磁头移动到指定磁道所需要的时间。(从家里去公交站牌所需的时间)
image.png
注:

  • m:与磁盘驱动器速度有关的时间常数,通常为0.2ms。
  • n:跨越的磁道数。
  • s:启动磁臂的时间。

1.5.2 旋转延迟时间

磁头定位到某一扇区所需要的时间。
image.png
注:

  • r:磁盘的旋转速度。

旋转延迟时间最小为0(不用等,相当于刚到站牌,公交车就到了),最大为1/r(刚到站牌,但不巧的是,公交车刚走,于是得等整一圈的时间)。这里的公式取了个平均。

旋转延迟的时间的大小与磁盘调度算法无关。
旋转延迟时间的大小与磁盘空闲空间的分配、文件的物理结构有关。

1.5.3 传输时间

从磁盘读出或向磁盘写入所经历的时间,该时间取决于读写的字节数和磁盘的旋转速度。(坐上公交车去上班所经历的时间)
image.png
注:

  • b:每次读/写的总字节数。
  • r:磁盘的转速。
  • N:一个磁道上的所存储的字节数。

总平均存取时间:image.png。该公式仅具有参考意义,因为真正进行磁盘存取时,其存取时间与调度算法密切相关。

寻道时间和旋转延迟时间这类“找”的时间可通过一定的方法削减,但传输时间与磁盘本身特性有关,很难通过采取一定措施削减。

磁盘调度中,对读/写时间影响最大的是寻道时间,寻找过程为机械运动,时间较长,影响较大。

1.6 磁盘调度算法

磁盘调度时对访问磁道次序的调度。

1.6.1 先来先服务算法(First Come First Served,FCFS)

1.6.1.1 评估

FCFS算法根据进程请求访问磁盘的先后顺序进行调度。
假设访问序列为:98,183,37,122,14,124,65,67

1.6.1.2 评估

该算法具有公平性,且当仅有少量进程需要访问并且访问的位置邻近时,该算法能达到很好的性能,但如果访问进程多且访问位置分散的话,那该算法就有点类似随机算法了。。。

1.6.2 最短寻找时间优先算法(Shortest Seek Time First,SSTF)

1.6.2.1 概述

SSTF算法将优先选择离当前磁头所在磁道距离最近的磁道。
假设访问序列为:98,183,37,122,14,124,65,67
最终访问序列为:65,67,37,14,98,122,124,183

1.6.2.2 评估

该算法存在“饥饿”现象。

1.6.3 扫描算法(SCAN)/电梯调度算法

是SSTF算法的优化版,它规定了磁头的移动方式,单向扫描的过程中必须确保移动方向不改变,只有撞到“南墙”后才“回头”(即扫描到该方向上的最后一个磁道后调转方向扫描)。
假设访问序列为:98,183,37,122,14,124,65,67
最终访问序列为:37,14,0,65,67,98,122,124,183

当然,不一定每次回返时都要返回到端点,我们只要到达最远的一个请求点返回即可:(LOOK算法)

1.6.4 循环扫描算法(Circular SCAN,C-SCAN)

是SCAN算法的优化版,仍然规定磁头单向移动,但回返时将直接移动到起始端而不服务于任何请求。
假设访问序列为:98,183,37,122,14,124,65,67
最终访问序列为:65,67,98,122,124,183,199,0,14,37

同样地,不一定每次回返时都要返回到端点,我们只要到达最远的一个请求点返回即可:(C-LOOK算法)

当系统总是出现某个磁道的连续访问请求时,导致系统总是访问磁盘的某个磁道而不对其他磁道的访问请问进行相应的现象(磁臂黏着现象)。处在该情况下,FCFS算法会按照服务请求次序依次进行服务,不会出现磁臂黏着现象,而SSTF、SCAN、C-SCAN算法均会一直服务该磁道的请求,会引发磁臂黏着现象。

上述几种调度算法的比较:
image.png


2.固态硬盘

2.1 概述

固态硬盘(SSD)是一种基于闪存技术的存储器,它与U盘并无本质差别,只是容量更大,性能更好。
image.png

SSD基于闪存技术,没有机械部件,因此随机读写不需要机械操作,其读写速度明显高于磁盘。但是SSD的缺点是容易磨损。
尽管SSD的写速度慢于读速度,但不至于比常规硬盘差。
相比于常规硬盘,固态硬盘的优势主要体现在随机存取的速度上。

2.2 结构

一块SSD由一个或多个闪存芯片和闪存翻译层组成。
闪存芯片 ≈ 传统旋转磁盘中的机械驱动器。
闪存翻译层 ≈ 磁盘控制器,用于将来自CPU的对逻辑块的读写请求翻译成对底层物理设备的读写控制信号。
image.png
一个闪存由B个块组成,一个块由P个页组成。
数据是以页为单位进行读写的,只有某一页所在的块被整个擦除后,才能对该页进行写。若对某个页进行修改,需要将该页所在的块中所有的页复制到一个新的被擦除过的块中之后,才能进行写。
擦除块比访问页要高出一个数量级。
某个块进行若干次重复写后,可能就会因磨损而无法使用。

2.3 优点

  1. 由半导体存储器构成,无移动的部件,因此随机访问速度要快于机械硬盘。
  2. 没有任何的机械噪声和震动,能耗更低,抗震性好,安全性高 and so on。

2.4 磨损均衡(Wear Leveling)

2.4.1 概述

由于闪存的采血寿命是有限的,一般是几百次到几千次。为了弥补SSD的寿命缺陷,便引入磨损均衡技术。

2.4.2 分类

  1. 动态磨损均衡:写入数据时,将有限选择新的闪存块,让老的闪存块“歇一歇”。
  2. 静态磨损均衡:即使在无数据写入时,SSD也会监测并自动进行数据的分配,让老的闪存块承担无需写数据的存储任务,让新的闪存块腾出空间来,并使平常的读写操作都在新的闪存块中进行。

光盘、磁盘和U盘可进行随机读写,磁带只能顺序读写。

静态磨损均衡算法的表项优于动态磨损算法。

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

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

相关文章

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(六)

原文:Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者:飞龙 协议:CC BY-NC-SA 4.0 第十四章:使用卷积神经网络进行深度计算机视觉 尽管 IBM 的 Deep Blue 超级计算机在 1996 年击败了国际象棋世界冠军…

从零开始 TensorRT(4)命令行工具篇:trtexec 基本功能

前言 学习资料: TensorRT 源码示例 B站视频:TensorRT 教程 | 基于 8.6.1 版本 视频配套代码 cookbook 参考源码:cookbook → 07-Tool → trtexec 官方文档:trtexec 在 TensorRT 的安装目录 xxx/TensorRT-8.6.1.6/bin 下有命令行…

Linux Shell命令系列--basename获取基本文件名

一、目的 学习linux shell编程的第一步就是熟悉linux的各种命令的使用,本篇开始逐次介绍一些常用linux shell命令。 今天我们来讲解basename命令的使用。 二、介绍 1、基本概念 basename命令首先去除字符串末尾多余的斜杠(如果有的话)&#…

Java代码实现基数排序算法(附带源码)

基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 1. 基数排序…

STC系列单片机的中断系统

目录 一、中断系统的定义 二、STC15系列单片机的中断请求源及结构图 三、中断查询表以及触发方式 四、在keil c中如何声明中断函数 五、外部中断 六、基于STC15芯片实战中断系统的使用 (1)外部中断2/外部中断3来检测门的开关状态 (2&a…

合并分支rebase和merge的区别

文章目录 一、前言1.1、master分支1.2、dev分支 二、合并2.1、git merge2.2、git rebase 三、总结四、最后 一、前言 实际开发工作的时候,我们都是在自己的分支开发,然后将自己的分合并到主分支,那合并分支用2种操作,这2种操作有…

工信部颁发的《计算机视觉处理设计开发工程师》中级证书

计算机视觉(Computer Vision)是一门研究如何让计算机能够理解和分析数字图像或视频的学科。简单来说,计算机视觉的目标是让计算机能够像人类一样对视觉信息进行处理和理解。为实现这个目标,计算机视觉结合了图像处理、机器学习、模…

数据安全加密系统的核心目的是什么

随着信息化时代的快速发展,数据安全问题逐渐成为人们关注的焦点。数据一旦被非法获取或篡改,可能会给个人、企业甚至国家带来巨大的损失。因此,构建一个高效的数据安全加密系统,是确保数据安全的重要手段。 数据安全加密系统的核心…

Vue 学习随笔系列九 -- 表格中插入图片、背景、自定义表头

表格中插入图片和icon 文章目录 表格中插入图片和icon一、如何插入图片1、代码2、效果 二、文字添加背景1、代码2、效果 三、表头悬浮提示语四、表头添加图标 一、如何插入图片 1、代码 <template><div><el-tablesize"small"borderv-loading"l…

Spring 源码解读(五):@Conditional及其衍生扩展注解(5千字大章)

github地址&#xff1a;https://github.com/cass-pwx/conditional-demo 1、概述 条件装配是Spring Boot一大特点&#xff0c;根据是否满足指定的条件来决定是否装配 Bean &#xff0c;做到了动态灵活性&#xff0c;starter的自动配置类中就是使用Conditional及其衍生扩展注解…

spring boot3x登录开发-上(整合jwt)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 jwt简介 导依赖 编写jwt工具类 1.配置项直接嵌入代码&#xff0c;通过类名.静态方法使用 2.配置项写到…

ARM PAC指针认证的侧信道攻击——PACMAN安全漏洞

目录 Q1. PACMAN论文的内容是什么&#xff1f; Q2. Arm处理器是否存在漏洞&#xff1f; Q3. 受Arm合作伙伴架构许可设计的处理器实现是否受到影响&#xff1f; Q4. Cortex-M85受到影响吗&#xff1f; Q5. Cortex-R82受到影响吗&#xff1f; Q6. 指针认证如何保护软件&…