输入/输出管理 III(磁盘和固态硬盘)

devtools/2024/11/25 7:17:41/

一、磁盘

【总结】:

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

磁盘盘面上的数据存储在一组同心圆中,称为磁道,每个磁道与磁头一样宽,一个盘面有上千个磁道。磁道又划分为几百个扇区,每个扇区固定存储大小,一个扇区称为一个盘块。相邻磁道及相邻扇区间通过一定的间隙分隔开,以避免精度错误。

注意,由于扇区按固定圆心角度划分,所以密度从最外道向里道增加,磁盘的存储能力受限于最内道的最大记录密度。

为了提高磁盘的存储容量,充分利用磁盘外层磁道的存储能力,现代磁盘不再将内外磁道划分为相同数目的扇区,而将盘面划分为若干环带,同一环带内的所有磁道具有相同的扇区数显然,外层环带的磁道拥有较内层环带的磁道更多的扇区。

磁盘安装在一个磁盘驱动器中,它由磁头臂、用于旋转磁盘的主轴和用于数据输入/输出的电子设备组成。如下图所示:

多个盘片垂直堆叠,组成磁盘组,每个盘面对应一个磁头,所有磁头固定在一起,与磁盘中心的距离相同且一起移动。所有盘片上相对位置相同的磁道组成柱面。扇区是磁盘可寻址的最小单位,磁盘上能存储的物理块数目由扇区数、磁道数及磁盘面数决定,磁盘地址用 “柱面号·盘面号·扇区号” 表示。

磁盘按不同的方式可分为若干类型:

  • 磁头相对于盘片的径向方向固定的,称为固定头磁盘,每个磁道一个磁头;
    磁头可移动的,称为活动头磁盘,磁头臂可来回伸缩定位磁道。

  • 磁盘永久固定在磁盘驱动器内的,称为固定盘磁盘;
    磁盘可移动和替换的,称为可换盘磁盘。

用户访问文件,需要操作系统的服务,文件实际上存储在磁盘中,操作系统接收用户的命令后,经过一系列的检验访问权限和寻址过程后,最终都会到达磁盘,控制磁盘把相应的数据信息读出或修改。当有多个请求同时到达时,操作系统就要决定先为哪个请求服务,这就是磁盘调度算法要解决的问题。

二、磁盘调度算法

1. 磁盘的存取时间

一次磁盘读写操作的时间由寻找(寻道)时间、旋转延迟时间和传输时间决定。

(1)寻道时间 Ts

活动头磁盘在读 / 写信息前,将磁头移动到指定磁道所需要的时间。这个时间除跨越 n 条磁道的时间外,还包括启动磁臂的时间 s ,即 Ts = m × n + s 。

式中,m 是与磁盘驱动器速度有关的常数,约为 0.2ms ,磁臂的启动时间约为 2ms 。

(2)旋转延迟时间 Tr

磁头定位到某一磁道的扇区所需要的时间,设磁盘的旋转速度为 r ,则 Tr = 1/(2r)

对于硬盘,典型的旋转速度为 5400 转/分,相当于一周 11.1ms ,则 Tr 为 5.55ms ,对于软盘,其旋转速度为 300 ~ 600 转/分,则 Tr 为 50 ~ 100ms 。

(3)传输时间 Tt

从磁盘读出或向磁盘写入数据所经历的时间,这个时间取决于每次所读/写的字节数 b 和磁盘的旋转速度 r ,则 Tt = b/(rN)

式中,r 为磁盘每秒的转数,N 为一个磁道上的字节数。

在磁盘存取时间的计算中,寻道时间与磁盘调度算法相关;而延迟时间和传输时间都与磁盘旋转速度相关,且为线性相关,所以在硬件上,转速是磁盘性能的一个非常重要的硬件参数。总平均存取时间 Ta 可以表示为 Ta= Ts + 1/(2r) + b/(rN) 。

2. 磁盘调度算法

虽然上述给出了总平均存取时间的公式,但是这个平均值是没有太大实际意义的,因为在实际的磁盘 I/O 操作中,存取时间与磁盘调度算法密切相关。

目前常用的磁盘调度算法有以下几种:

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

FCFS 算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法,如下图所示。

该算法的优点是具有公平性。若只有少量进程需要访问,且大部分请求都是访问簇聚的文件扇区,则有望达到较好的性能;若有大量进程竞争使用磁盘,则这种算法在性能上往往接近于随机调度。所以,实际磁盘调度中会考虑一些更为复杂的调度算法。

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

SSTF 算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以便使每次的寻找时间最短。当然,总是选择最小寻找时间并不能保证平均寻找时间最小,但能提供比 FCFS 算法更好的性能。

SSTF 算法会产生饥饿的原因在于:磁头有可能在一个小区域内来回来去地移动。

3)扫描(SCAN)算法(又称电梯调度算法)

为了防止产生饥饿,可以规定,只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。这就是扫描算法(SCAN)的思想。

SCAN 算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,实际上就是在最短寻找时间优先算法的基础上规定了磁头运动的方向,如下图所示。

由于磁头移动规律与电梯运行相似,因此又称电梯调度算法。SCAN 算法对最近扫描过的区域不公平,因此它在访问局部性方面不如 FCFS 算法和 SSTF 算法好。

【拓展】:LOOK 调度算法

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

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

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

【拓展】:C-LOOK 调度算法

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

注意,若无特别说明,也可以默认 SCAN 算法和 C-SCAN 算法为 LOOK 和 C-LOOK 调度。

5)总结

对比以上几种磁盘调度算法,FCFS 算法太过简单,性能较差,仅在请求队列长度接近于 1 时才较为理想;SSTF 算法较为通用和自然;SCAN 算法和 C-SCAN 算法在磁盘负载较大时比较占优势。它们之间的比较见下表。

优点缺点
FCFS算法公平、简单平均寻道距离大,仅应用在磁盘I/O较少的场合
SSTF算法性能比“先来先服务”好不能保证平均寻道时间最短,可能出现“饥饿”现象
SCAN算法寻道性能较好,可避免“饥饿”现象不利于远离磁头一端的访问请求
C-SCAN算法消除了对两端磁道请求的不公平-

3. 减少延迟时间的方法

【总结】:

1)交替编号与错位命名

除减少寻找时间外,减少延迟时间也是提高磁盘传输效率的重要因素。可以对盘面扇区进行交替编号,对磁盘片组中的不同盘面错位命名。假设每个盘面有 8 个扇区,磁盘片组共 8 个盘面,则可以采用如下图所示的编号。

若采用交替编号的策略,即让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延迟时间更小。

磁盘是连续自转设备,磁头读/写一个物理块后,需要经过短暂的处理时间才能开始读/写下一块。假设逻辑记录数据连续存放在磁盘空间中,若在盘面上按扇区交替编号连续存放,则连续读/写多条记录时能减少磁头的延迟时间;同柱面不同盘面的扇区若能错位编号,连续读/写相邻两个盘面的逻辑记录时也能减少磁头延迟时间。

以上图为例,在随机扇区访问情况下,定位磁道中的一个扇区平均需要转过 4 个扇区,这时,延迟时间是传输时间的 4 倍,这是一种非常低效的方式。理想的情况是不需要定位而直接连续读取扇区,没有延迟时间,这样磁盘数据存取效率可以成倍提高。但由于读取扇区的顺序是不可预测的,所以延迟时间不可避免。上图中的编号方式是读取连续编号扇区时的一种方法。

磁盘寻块时间分为三个部分,即寻道时间、延迟时间和传输时间,寻道时间和延迟时间属于 “找” 的时间,凡是 “找” 的时间都可以通过一定的方法削减,但传输时间是磁盘本身性质所决定的,不能通过一定的措施减少。

2)磁盘地址结构的设计

假设某磁盘有 8个柱面 / 磁道(假设最内侧柱面 / 磁道号为 0),4 个盘面,8 个扇区。则可用 3 个二进制位表示柱面,2 个二进制位表示盘面,3 个二进制位表示扇区。

(a)若物理地址结构是(盘面号,柱面号,扇区号),且需要连续读取物理地址 (00, 000, 000)~(00, 001, 111)的扇区:(00, 000, 000) ~( 00, 000, 111 ) 转两圈可读完之后再读取物理地址相邻的区域,即(00, 001, 000) ~( 00, 001, 111 ),需要启动磁头臂,将磁头移动到下一个磁道。

(b)若物理地址结构是(柱面号,盘面号,扇区号),且需要连续读取物理地址 (000, 00, 000)~(000, 01, 111)的扇区:(000, 00, 000) ~( 000, 00, 111 ) 由盘面0的磁头读入数据之后再读取物理地址相邻的区域,即(000, 01, 000) ~( 000, 01, 111 ),由于柱面号/磁道号相同,只是盘面号不同,因此不需要移动磁头臂。只需要激活相邻盘面的磁头即可。

三、磁盘的管理

【总结】:

1. 磁盘初始化

一个新的磁盘只是一个磁性记录材料的空白盘。在磁盘可以存储数据之前,必须将它分成扇区,以便磁盘控制器能够进行读写操作,这个过程称为低级格式化(或称物理格式化)。低级格式化为每个扇区使用特殊的数据结构,填充磁盘。每个扇区的数据结构通常由头部、数据区域(通常为 512B 大小)和尾部组成。头部和尾部包含了一些磁盘控制器的使用信息。

大多数磁盘在工厂时作为制造过程的一部分就已低级格式化,这种格式化能够让制造商测试磁盘,并且初始化逻辑块号到无损磁盘扇区的映射。对于许多磁盘,当磁盘控制器低级格式化时,还能指定在头部和尾部之间留下多长的数据区,通常选择 256 或 512 字节等。

2. 分区

在可以使用磁盘存储文件之前,操作系统还要将自己的数据结构记录到磁盘上,分为两步:

  • 第一步是,将磁盘分为由一个或多个柱面组成的分区(即我们熟悉的 C 盘、D 盘等形式的分区),每个分区的起始扇区和大小都记录在磁盘主引导记录的分区表中;

  • 第二步是,对物理分区进行逻辑格式化(创建文件系统),操作系统将初始的文件系统数据结构存储到磁盘上,这些数据结构包括空闲空间和已分配的空间以及一个初始为空的目录。

因扇区的单位太小,为了提高效率,操作系统将多个相邻的扇区组合在一起,形成一簇(在 Linux 中称为块)。为了更高效地管理磁盘,一簇只能存放一个文件的内容,文件所占用的空间只能是簇的整数倍;如果文件大小小于一簇(甚至是 0 字节),也要占用一簇的空间。

3. 引导块

计算机启动时需要运行一个初始化程序(自举程序),它初始化 CPU、寄存器、设备控制器和内存等,接着启动操作系统。为此,自举程序找到磁盘上的操作系统内核,将它加载到内存,并转到起始地址,从而开始操作系统的运行。

注:ROM 一般是出厂时就集成在主板上的,并且以后不能再修改。

自举程序通常存放在 ROM(只读存储器)中,为了避免改变自举代码而需要改变 ROM 硬件的问题,通常只在 ROM 中保留很小的自举装入程序,而将完整功能的引导程序保存在磁盘的启动块上,启动块位于磁盘的固定位置。具有启动分区的磁盘称为启动磁盘或系统磁盘。

引导 ROM 中的代码指示磁盘控制器将引导块读入内存,然后开始执行,它可以从非固定的磁盘位置加载整个操作系统,并且开始运行操作系统。下面以 Windows 为例来分析引导过程:

Windows 允许将磁盘分为多个分区,有一个分区为引导分区,它包含操作系统和设备驱动程序。Windows 系统将引导代码存储在磁盘的第 0 号扇区,它称为主引导记录(MBR)。引导首先运行 ROM 中的代码,这个代码指示系统从 MBR 中读取引导代码。除了包含引导代码,MBR 还包含: 一个磁盘分区表和一个标志(以指示从哪个分区引导系统),如下图所示。当系统找到引导分区时,读取分区的第一个扇区,称为引导扇区,并继续余下的引导过程,包括加载各种系统服务。

4. 坏块

由于磁盘有移动部件且容错能力弱,因此容易导致一个或多个扇区损坏。部分磁盘甚至在出厂时就有坏块。根据所用的磁盘和控制器,对这些块有多种处理方式。

对于简单磁盘,如采用 IDE 控制器的磁盘,坏块可手动处理,如 MS-DOS 的 Format 命令执行逻辑格式化时会扫描磁盘以检查坏块。坏块在 FAT 表上会标明,因此程序不会使用它们。

对于复杂的磁盘,控制器维护磁盘内的坏块列表。这个列表在出厂低级格式化时就已初始化,并在磁盘的使用过程中不断更新。低级格式化将一些块保留作为备用,操作系统看不到这些块。控制器可以采用备用块来逻辑地替代坏块,这种方案称为扇区备用。

对坏块的处理实质上就是用某种机制使系统不去使用坏块。

四、固态硬盘

【总结】:

1. 固态硬盘的特性

固态硬盘(SSD)是一种基于闪存技术的存储器。它与 U 盘并无本质差别,只是容量更大,存取性能更好。一个 SSD 由一个或多个闪存芯片和闪存翻译层组成,如下图所示。闪存芯片替代传统旋转磁盘中的机械驱动器,而闪存翻译层将来自 CPU 的逻辑块读写请求翻译成对底层物理设备的读写控制信号,因此闪存翻译层相当于扮演了磁盘控制器的角色。

在上图中,一个闪存芯片由 m 块组成,每块由 n 页组成。通常,页的大小是 512B ~ 4KB ,每块由 32 ~ 128 页组成,块的大小为 16KB ~ 512KB 。数据是以页为单位读写的。只有在一页所属
的块整个被擦除后,才能写这一页。不过, 一旦擦除一块, 块中的每页就都可以直接再写一次。
某块进行若干次重复写后,就会磨损坏,不能再使用。

随机写很慢,有两个原因:首先,擦除块比较慢,通常比访问页高一个数量级。其次,如果写操作试图修改包含已有数据的页 ni ,那么这个块中所有含有用数据的页都必须被复制到一个新(擦除过的)块中,然后才能进行对页 ni 的写操作。

比起传统磁盘,SSD 有很多优点,它由半导体存储器构成,没有移动的部件,因而随机访问速度比机械磁盘要快很多,也没有任何机械噪声和震动,能耗更低、抗震性好、安全性高等。

随着技术的不断发展,价格也不断下降,SSD 会有望逐步取代传统机械硬盘。

2. 磨损均衡(Wear Leveling)

固态硬盘也有缺点,闪存的擦写寿命是有限的,一般是几百次到几千次。如果直接用普通闪存组装 SSD ,那么实际的寿命表现可能非常令人失望——读写数据时会集中在 SSD 的一部分闪存,这部分闪存的寿命会损耗得特别快。一旦这部分闪存损坏,整块 SSD 也就损坏了。这种磨损不均衡的情况,可能会导致一块 256GB 的 SSD ,只因数兆空间的闪存损坏而整块损坏。

为了弥补 SSD 的寿命缺陷,引入了磨损均衡。SSD 磨损均衡技术大致分为两种:

  • 动态磨损均衡。写入数据时,自动选择较新的闪存块。老的闪存块先歇一歇。

  • 静态磨损均衡。这种技术更为先进,就算没有数据写入,SSD 也会监测并自动进行数据分配,让老的闪存块承担无须写数据的存储任务,同时让较新的闪存块腾出空间,平常的读写操作在较新的闪存块中进行。如此一来,各闪存块的寿命损耗就都差不多。

有了这种算法加持,SSD 的寿命就比较可观了。例如,对于一个 256GB 的 SSD ,如果闪存的擦写寿命是 500 次,那么就需要写入 125TB 数据,才寿终正寝。就算每天写入 10GB 数据,也要三十多年才能将闪存磨损坏,更何况很少有人每天往 SSD 中写入 10GB 数据。

五、小结

1、在磁盘上进行一次读写操作需要哪几部分时间?其中哪部分时间最长?

在磁盘上进行一次读写操作花费的时间由寻道时间、延迟时间和传输时间决定。其中寻道时间是将磁头移动到指定磁道所需要的时间,延迟时间是磁头定位到某一磁道的扇区(块号)所需要的时间,传输时间是从磁盘读出或向磁盘写入数据所经历的时间。一般来说,寻道时间因为要移动磁臂,所以占用时间最长。

2、存储一个文件时,当一个磁道存储不下时,剩下部分是存在同一个盘面的不同磁道好,还是存在同一个柱面上的不同盘面好?

寻道时间对于一次磁盘访问的影响是最大的,若存在同一个盘面的不同磁道,则磁臂势必要移动,这样会大大增加文件的访问时间,而存在同一个柱面上的不同盘面就不需要移动磁道,所以一般情况下存在同一个柱面上的不同盘面更好。

3、提高磁盘 I/O 速度的方法

  • 提前读。在读磁盘当前块时,把下一磁盘块也读入内存缓冲区。

  • 延迟写。仅在缓冲区首部设置延迟写标志,然后释放此缓冲区并将其链入空闲缓冲区链表的尾部,当其他进程申请到此缓冲区时,才真正把缓冲区信息写入磁盘块。

  • 虚拟盘。是指用内存空间去仿真磁盘,又叫 RAM 盘。虚拟盘是一种易失性存储器。虚拟盘常用于存放临时文件。


http://www.ppmy.cn/devtools/136783.html

相关文章

WireShark

1. WireShark安装 去官网Wireshark Download下载安装包 之后按照安装向导进行安装。安装完成后,用户可以在桌面或应用程序中找到Wireshark的图标,双击打开软件 2. wireshark过滤语法 2.1过滤协议 http 2.2 过滤指定ip 匹配指定的IP地址数据包&…

i春秋-文件包含绕过(PHP伪协议的使用)

练习平台地址 竞赛中心 题目描述 题目内容 本地包含,进行BP爆破 成功获得了数据库敏感文件(配置文件和/etc/passwd) 但是发现/etc/shadow文件无法访问,那么无法登录数据库 尝试使用PHP伪协议读取文件 php://filter/resourceflag…

DTO和VO的区别及使用场景详解

随着互联网的发展,前后端分离的开发模式越来越流行。在前后端数据交互过程中,为了保证数据的安全性和效率,通常会采用 DTO 和 VO 来封装数据。本篇博客将详细介绍 DTO 和 VO 的区别以及使用场景。 大家可能会有个疑问,既然DTO是展…

微信小程序中的WXSS与CSS的关系及使用技巧

微信小程序中的WXSS与CSS的关系及使用技巧 引言 在微信小程序的开发中,样式的设计与实现是构建用户友好界面的关键。微信小程序使用WXSS(WeiXin Style Sheets)作为其样式表语言,WXSS在语法上与CSS非常相似,但也有一些独特的特性。本文将深入探讨WXSS与CSS的关系,介绍WX…

YesBut——帮助多模态理解讽刺漫画的数据集

1.概述 源码地址:https://github.com/abhi1nandy2/yesbut_dataset 论文地址:https://arxiv.org/pdf/2409.13592.pdf 讽刺是一种幽默,它通过讽刺和夸张来批评人、社会和政治,是提出问题和鼓励批判性观点的有力工具。尤其是社交媒…

jenkins 2.346.1最后一个支持java8的版本搭建

1.jenkins下载 下载地址:Index of /war-stable/2.346.1 2.部署 创建目标文件夹,移动到指定位置 创建一个启动脚本,deploy.sh #!/bin/bash set -eDATE$(date %Y%m%d%H%M) # 基础路径 BASE_PATH/opt/projects/jenkins # 服务名称。同时约定部…

[论文阅读]Can GNN be Good Adapter for LLMs?

Can GNN be Good Adapter for LLMs? http://arxiv.org/abs/2402.12984 WWW 24: Proceedings of the ACM Web Conference 2024 研究背景和问题: (1)实际应用场景和问题提出 大型语言模型(LLM)在自然语言处理&…

CPU详细介绍

CPU(中央处理器,Central Processing Unit)是计算机系统的核心部件之一,被称为计算机的“大脑”。它负责执行计算机程序中的各种指令,并管理和协调计算机系统的各个硬件组件。以下是对 CPU 的详细介绍,包括其…