磁盘与固态硬盘¶
- 原理:当磁头和磁性记录介质有相对运动时,通过电磁转换完成读/写操作。\ 编码方法:按某种方案(规律),把一连串的二进制信息变换成存储介质磁层中一个磁化翻转状态的序列,并使读/写控制电路容易、可靠地实现转换。\ 磁记录方式:通常采用调频制(FM)和改进型调频制(MFM)的记录方式。

- 优点:\ ①存储容量大,位价格低;\ ②记录介质可以重复使用;\ ③记录信息可以长期保存而不丢失,甚至可以脱机存档;\ ④非破坏性读出,读出时不需要再生。
- 缺点:
①存取速度慢;
②机械结构复杂;
③对工作环境要求较高。
1.8.1 磁盘存储器的结构¶
1.8.1.1 磁盘存储器的组成¶
磁盘存储器主要由记录介质、磁盘驱动器、磁盘控制器三大部分组成。
- 磁盘控制器(disk controller):磁盘存储器和主机的I/O接口,包括控制逻辑、时序电路、“并→串”转换和“串→并”转换电路。

- 磁盘驱动器包括读写电路、读/写转换开关、读/写磁头与磁头定位伺服系统。如图是磁盘驱动器的物理组成示意图。

如图所示,磁盘驱动器主要由多张硬盘片、主轴、主轴电机、移动臂、磁头和控制电路等部分组成,通过接口与磁盘控制器连接,每个盘片的两个面上各有一个磁头,因此,磁头号就是盘面号。磁头和盘片相对运动形成的圆构成一个磁道(track),磁头位于不同的半径上,则得到不同的磁道。多个盘片上相同磁道形成一个柱面(cylinder),所以,磁道号就是柱面号。信息存储在盘面的磁道上,而每个磁道被分成若干扇区(sector),以扇区为单位进行磁盘读写。在读写磁盘时,总是写完一个柱面上所有的磁道后,再移到下一个柱面。磁道从外向里编址,最外面的为磁道0。


- 存储区域:理解上述磁道、柱面、扇区等概念即可
1.8.1.2 磁盘的物理地址及其读写过程¶
磁盘的物理地址结构为
| 驱动器号 | 柱面(磁道)号 | 盘面号(磁头号) | 扇区号 |
|---|---|---|---|
| 一台电脑可能有多个硬盘 | 移动磁头臂(寻道) | 激活某个磁头 | 通过旋转将特定扇区划过磁头下方 |

在“文件的物理结构”小节中,我们经常提到文件数据存放在外存中的几号块,这个块号就可以转换成(柱面号,盘面号,扇区号的地址形式,磁盘读写是指根据主机访问控制字中的盘地址(柱面号、磁头号、扇区号)读写目标磁道中的指定扇区。因此,其操作可归纳为寻道、旋转等待和读写三个步骤。
① 寻道操作:磁盘控制器把盘地址送到磁盘驱动器的磁盘地址寄存器后,便产生寻道命令,启动磁头定位伺服系统,根据磁头号和柱面号,选择指定的磁头移动到指定的柱面。此操作完成后,发出寻道结束信号给磁盘控制器,并转入旋转等待操作。
② 旋转等待操作 :盘片旋转时,首先将扇区计数器清零,以后每来一个扇区标志脉冲,扇区计数器加1,把计数内容与磁盘地址寄存器中的扇区地址进行比较,如果一致,则输出扇区符合信号,说明要读写的信息已经转到磁头下方。
③ 读写操作:扇区符合信号送给磁盘控制器后,磁盘控制器的读写控制电路开始动作。如果是写操作,就将数据送到写入电路,写入电路根据记录方式生成相应的写电流脉冲;如果是读操作,则由读出放大电路读出内容送磁盘控制器。
另一种说法:
①根据“柱面号”移动磁臂,让磁头指向指定柱面;
②激活指定盘面对应的磁头;
③磁盘旋转的过程中,指定的扇区会从磁头下面划过,这样就完成了对指定扇区的读/写。
【注】:根据上述操作我们可以看出磁盘既不像RAM可以随机访问任何一个存储单元,又不是按照顺序存取那样完全按顺序存取,而是介于二者之间。存储信息时通常先寻找到某一磁道,然后在小区域内顺序查找,因此磁盘属于直接存取存储器(DAM);
【注】:硬盘属于机械式部件,其读写操作是串行的,不可能在同一时刻既读又写,也不可能在同一时刻读两组数据或写两组数据。
【思考】为什么磁盘的物理地址是(柱面号,盘面号,扇区号),而不是(盘面号,柱面号,扇区号)?
假设某磁盘有8个柱面/磁道(假设最内侧柱面/磁道号为0),4个盘面,8个扇区。则可用3个二进制位表示柱面,2个二进制位表示盘面,3个二进制位表示扇区。
若物理地址结构是(盘面号,柱面号,扇区号),且需要连续读取物理地址 (00, 000, 000)~(00, 001, 111)的扇区:
(00, 000, 000) ~( 00, 000, 111 ) 转两圈可读完
之后再读取物理地址相邻的区域,即(00, 001, 000) ~( 00, 001, 111 ),需要启动磁头臂,将磁头移动到下一个磁道。
若物理地址结构是(柱面号,盘面号,扇区号),且需要连续读取物理地址 (000, 00, 000)~(000, 01, 111)的扇区:
(000, 00, 000) ~( 000, 00, 111 )由盘面0的磁头读入数据。之后再读取物理地址相邻的区域,即(000, 01, 000) ~( 000, 01, 111 ),由于柱面号/磁道号相同,只是盘面号不同,因此不需要移动磁头臂。只需要激活相邻盘面的磁头即可。这样可以节省不少时间。
1.8.1.3 磁盘的性能指标¶
- 记录密度
记录密度可用道密度和位密度来表示。在沿磁道分布方向上单位长度内的磁道数目叫道密度。在沿磁道方向上,单位长度内存放的二进制信息数目叫位密度。如图所示是磁盘盘面上的道密度和位密度示意图。左边采用的是低密度存储方式,所有磁道上的扇区数相同,所以每个磁道上的位数相同,因而内道上的位密度比外道位密度高;右边采用的是高密度存储方式,每个磁道上的位密度相同,所以外道上的扇区数比内道上扇区数多,因而整个磁盘的容量比低密度盘高得多。

- 存储容量
存储容量指整个存储器所能存放的二进制信息量,它与磁表面大小和记录密度密切相关。硬盘的未格式化容量是指按道密度和位密度计算出来的容量,它包括了头空、ID域、CRC码等信息,是可利用的所有磁化单元的总数,未格式化容量(或非格式化容量)比格式化后的实际容量要大。格式化后的实际容量只包含数据区。
- 数据传输速率
数据传输速率(data transfer rate)是指磁表面存储器完成磁头定位和旋转等待以后,单位时间内从存储介质上读出或写入的二进制信息量。\ 由于磁盘在同一时刻只有一个磁头进行读写,所以内部数据传输速率等于单位时间内磁头划过的磁道弧长乘以位密度。即内部数据传输速率=每分钟转速÷60×内圆周长×最内道位密度
平均存取时间\ 磁盘响应读写请求的过程如下:首先将读写请求在队列中排队,出队列后由磁盘控制器解析请求命令,然后进行寻道、旋转等待和读写数据三个过程。因此,总响应时间的计算公式为:响应时间=排队延迟+控制器时间+寻道时间+旋转等待时间+数据传输时间,磁盘上的信息以扇区为单位进行读写,上式中后面三个时间之和称为存取时间。即
存取时间=寻道时间+旋转等待时间+数据传输时间
【注】:注意转速的单位:我们通常用 r 转/秒 或 r 转/分,但有些题目会告诉你 r 秒/转 或 r 分/转,需要小心。
【注】:在实际的磁盘I/O操作中,存取时间(中的寻道时间)与磁盘调度算法密切相关。
一个好的磁盘调度算法可以减少寻道时间,另外我们采用下面介绍的硬件层面上的方法来减少延迟时间(即定位到目标扇区)的时间:
对一个盘面扇区进行
交替编号,对磁盘片组中不同盘面错位命名(这一步骤可以在低级格式化时完成)
磁盘是连续自转设备,磁头读/写一个物理块后,需要经过短暂的处理时间才能开始读/写下一块。假设逻辑记录数据连续存放在磁盘空间中,若在盘面上按扇区交替编号连续存放,则连续读/写多条记录时能减少磁头的延迟时间;同柱面不同盘面的扇区若能错位编号,连续读/写相邻两个盘面的逻辑记录时也能减少磁头延迟时间。
| 类别 | 描述 | 公式 | 备注 |
|---|---|---|---|
| 寻道时间(寻找时间) | 在读/写数据前,将磁头移动到指定磁道所花的时间 | \(T = p + m*n\) | 启动磁头臂的时间为 p,磁头每跨越一个磁道耗时为 m,总共需要跨越 n 条磁道 |
| 延迟时间(旋转等待时间) | 磁头定位(寻找)到目标扇区所需要的时间 | \(T= (1/2)*(1/r) = 1/(2r)\) | 若磁盘转速为 r(单位:转/分),则旋转一圈的时间为 60s/r(单位:秒);若磁盘转速为 r(单位:转/秒),则旋转一圈的时间为 1/r(单位:秒);因为在定位过程中,最多旋转 1 圈,最少不用旋转(0 圈),所以在平均情况下,需要旋转半圈,时间需除于 2 |
| (读取数据所用的)传输时间 | 从磁盘读出或向磁盘写入数据所经历的时间 | \(T = (b/N) \*(1/r) = b/(rN)\) | 磁盘转速为 r(单位:转/秒),此次读/写的字节数为 b,每个磁道上的字节数为 N,因此 b 字节的数据需要 b/N 个磁道才能存储,而读/写一个磁道所需的时间刚好是转一圈所需时间 1/r(单位:秒) |
| (访问一个扇区的)传输时间 | 磁头扫过一个扇区所用的时间 | 传输时间 = (旋转一圈的时间 / 一条磁道的扇区总数) = (一个扇区的容量大小 / 数据传输率) | 对于磁盘的传输速率,K、M、G、T 一般是以 10 为底的单位,而不是以 2 为底!1K = 103,1M = 106,1G = 109,1T = 1012。 |
1.8.1.4 磁盘的分类¶
磁盘按不同的方式可分为若干类型:磁头相对于盘片的径向方向固定的,称为固定头磁盘,每个磁道一个磁头:磁头可移动的,称为活动头磁盘,磁头臂可来回伸缩定位磁道;磁盘水久固定在磁盘驱动器内的,称为固定盘磁盘;可移动和替换的,称为可换盘磁盘。

1.8.1.5 提高磁盘I/O速度的方法¶
- 前面提到的磁盘高速缓存技术;
- 提前读:如果是采用顺序访问方式对文件进行访问,那么在读当前块的同时,还要求将下一个盘块的数据也读入缓冲区;
- 延迟写:是指缓冲区A中的数据本应立即写回磁盘,但考虑到该缓冲区中的数据可能会在不久之后再被本进程或其它进程访问(共享资源),因而并不立即将该缓冲区A中的数据写入磁盘,而是将它挂在空闲缓冲区队列的末尾。随着空闲缓冲区的使用,缓冲区也缓缓往前移动,直至移到空闲缓冲队列之首。当再有进程申请到该缓冲区时,才将该缓冲区中的数据写入磁盘,而把该缓冲区作为空闲缓冲区分配出去。只要该缓冲区A仍在队列中时,任何访问该数据的进程,都可直接读出其中的数据而不必访问磁盘。这样,又可进一步减少磁盘的I/O时间。同样,延迟写功能也已被广泛采用。
- 优化物理块的分布:在为文件分配空闲盘块时,如果系统采用的是位示图,则只要在位示图中找到一片相邻接的多个空闲盘块即可;若采用的是空闲盘块链表法,则可以将同一条磁道上的若干盘块组成一簇,在分配存储空间时,以簇为单位进行分配。这样就可以保证在访问这几个盘块时,不必移动磁头或者较少移动次数,从而减少磁头的平均移动距离。
- 虚拟盘:利用内存空间去仿真磁盘,又叫RAM盘,对用户是透明的,主要问题是内存是易失性存储器,一旦掉电或故障,数据会丢失,因此虚拟盘常存放临时文件,如编译产生的目标程序等。与磁盘高速缓存的区别是虚拟盘的内容完全由用户控制,而磁盘高速缓存内的则是由OS控制的。
1.8.2 磁盘的管理¶


-
磁盘初式化:
-
step1:低级格式化(物理格式化) :
Info
1. 将其 划分为扇区 ,以便磁盘控制器能读写数据。 2. 检错、纠错功能 :每个扇区的数据结构包括头部、数据区域和尾部,头部和尾部包含 扇区号和纠错代码(ECC)。当控制器写入数据时,ECC根据数据区域所有字节计算并更新;读取时,ECC值重新计算并与存储值比较,不一致则表明数据损坏。ECC能纠正少量数据错误,并报告可恢复的软错误。读写时,控制器自动进行ECC处理。 3. 标记坏道:检测并标记坏道,以避免存储数据时使用这些损坏的区域。
这种格式化能让制造商测试磁盘,并且 初始化逻辑块号到无损磁盘扇区的映射 。在可以使用磁盘存储文件之前,操作系统仍然需要将自己的数据结构记录在磁盘上。这分为以下两步。
- step2:分区:磁盘分区是将磁盘划分为多个独立部分(分区)的过程,每个分区可以被独立地管理和使用。
分区通常有以下几种类型:
- 主分区:每个磁盘最多可以有四个主分区,其中一个可以标记为活动分区,并用于引导操作系统。
- 扩展分区:为了克服主分区数量的限制,扩展分区可以包含多个逻辑分区。
- 逻辑分区:在扩展分区内部创建的分区,用于存储数据或安装操作系统。
(类似于windows系统中分的C盘、D盘、E盘等形式的分区),操作系统可以将每个分区作为一个单独磁盘。例如,一个分区可以存储操作系统的可执行代码,而另一个分区存储用户数据。分区对于实现多个OS并存是必需的。
磁盘分区表
创建分区表是磁盘分区过程的起点。分区表用于记录磁盘上各个分区的起始和结束位置,以及其他相关信息。根据需求选择分区表类型:
- MBR(主引导记录):适用于较旧的系统或需要兼容性的平台。
- 结构:MBR位于磁盘的第一个扇区,大小为512字节。
- 引导代码区:446字节,用于存储引导加载程序代码。
- 分区表:64字节,包含四个分区条目,每个条目16字节,描述一个分区的信息。
- 结束标志:2字节,用于标记MBR结束,值为0x55AA。
- GPT(全局唯一标识分区表):适用于现代系统,支持更多分区和更大的磁盘容量。
在分区表创建之后,继续在磁盘上划分具体的分区。这一步包括定义分区的数量、大小和类型(主分区、扩展分区、逻辑分区等)。
先创建分区表是划分分区的前提。通过创建分区表来定义磁盘结构,然后具体划分分区之后再进行逻辑格式化。
- step3:逻辑格式化(
logical formatting)
高级格式化,也称文件系统格式化,是在分区内创建文件系统的过程。这涉及以下步骤:
- 创建文件系统:定义数据在磁盘上的组织方式。常见的文件系统类型包括FAT32、NTFS(用于Windows)、EXT4(用于Linux)等。不同的分区可以安装不同的文件系统。
- 设置文件系统结构:这包括设置超级块(superblock)、inode表、目录结构等。
- 初始化目录和文件表:设置根目录和必要的文件表,以便操作系统可以管理文件和目录。
为了提高效率,大多数操作系统将块组合在一起(即将多个相邻的扇区组合在一起)变成更大的块,经常称为簇(cluster)。为了更高效地管理磁盘,一簇只能存放一个文件的内容,文件所占用的空间只能是簇的整数倍;如果文件大小小于一簇(甚至是0字节),也要占用一簇的空间。磁盘I/O按块(扇区)完成,而文件系统I/O按簇完成,有效确保了I/O具有更多的顺序访问和更少的随机访问的特点。
OS引导扇区
操作系统安装是在逻辑格式化之后执行的!
分区过程会在磁盘上创建一个分区表,对于传统的MBR(Master Boot Record)分区表,引导扇区位于磁盘的第一个扇区。在安装操作系统过程中,安装程序会在磁盘的特定位置写入引导代码。这个引导代码用于启动操作系统的引导加载程序,它也就是磁盘引导扇区。
2. 引导块
- 为了开始运行计算机,如打开电源或重启时,它必须有一个初始程序BIOS来运行。这个初始自举(bootstrap)程序往往很简单。它初始化系统的所有部分,从CPU寄存器到设备控制器和内存,接着启动操作系统。为此,自举程序找到磁盘上的操作系统内核,加载到内存,并转到起始地址以便开始操作系统的执行。
- 对于大多数计算机,自举程序处在只读存储器(
Read-Only Memory,ROM)中。这个位置非常方便,因为ROM不需要初始化而且位于固定位置,这便于处理器在上电或复位时开始执行。并且,由于ROM是只读的,不会受到计算机病毒的影响。它的问题是,改变这种自举代码需要改变ROM硬件芯片。因此,大多数系统存储一个极小的自举程序在启动ROM中,它的作用是从磁盘上调入完整的引导程序。这个完整的引导程序可以轻松改变:可以简单地将新的版本写到磁盘。完整的引导程序存储在磁盘固定位置上的“启动块”。具有启动分区的磁盘称为启动磁盘(boot disk)或系统磁盘(system disk)。 - 引导ROM内的代码指示磁盘控制器将引导块读到内存(这时不加载设备驱动程序),然后开始执行代码。完整的自举程序比引导ROM的自举程序更加复杂。它可以从非固定的磁盘位置处加载整个操作系统,并且开始运行操作系统。
下面以Windows为例,分析引导过程。首先,请注意,Windows允许将磁盘分为多个分区;有一个分区为引导分区(boot partition),包含操作系统和设备驱动程序。Windows系统将引导代码存在磁盘的第一个扇区,它称为主引导记录(
Master Boot Record,MBR)。引导首先运行驻留在系统ROM内存中的代码,即BIOS。这个代码指示系统从MBR中读取引导代码。除了包含引导代码,MBR包含:一个表(以列出磁盘分区)和一个标志(以指示从哪个分区引导系统),如图所示。当系统找到引导分区,它读取分区的第一个扇区,称为引导扇区(boot sector),并继续余下的引导过程,这包括加载各种子系统和系统服务。

- 坏块
对于简单磁盘,一种策略是,在格式化磁盘时扫描磁盘以便发现坏块。发现的任何坏块,标记为不可用,以便文件系统不再分配它们。如果在正常操作时块变坏了,则必须人工运行特殊程序(如 Linux命令
badlocks)以便搜索坏块并锁定它们。坏块中的数据通常会丢失。更为复杂的磁盘在恢复坏块时更为智能。它的控制器维护磁盘内的坏块列表。这个列表在出厂低级格式化时初始化,并且在磁盘使用寿命内更新。低级格式化将一些块放在一边作为备用,操作系统看不到这些块。控制器可以采用备用块来逻辑地替代坏块。这种方案称为扇区备用(sector sparing)或扇区转寄(sector forwarding)。
总之对坏块的处理实质上就是用某种机制使系统不去使用坏块。
1.8.3 磁盘阵列¶
改善辅存性能的重要手段!!!
RAID(Redundant Array of Inexpensive Disks,廉价冗余磁盘阵列)是指将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储、并行访问,具有更好的存储性能、可靠性和安全性。
RAID的基本思想:
- 将多个独立操作的磁盘按某种方式组织成磁盘阵列,以增加容量;
- 利用类似于主存中的多模块交叉技术将数据存储在多个盘体上,通过使这些盘并行工作来提高数据传输速度;
- 并用冗余磁盘技术来进行错误恢复以提高系统可靠性。
RAID的分级如下所示。在RAID1~RAID5的几种方案中,无论何时有磁盘损坏,都可以随时拔出受损的磁盘再插入好的磁盘,而数据不会损坏(冗余磁盘用于存储校验信息,保证磁盘万一损坏时能恢复数据)。
Info
条带化 :数据呈条状分布在所有可用磁盘中,一个条带可以是一个物理块、扇区或其他某种单元,这些条带被循环映射到连续的阵列成员。例如在一个n磁盘阵列中,最初的n个逻辑条带保存在n个磁盘的每个磁盘上的第一个条带中,从而形成了第一个条带;这种布局的好处是,如果一个I/O请求由多个逻辑上连续的条带组成,那么该请求可以并行处理,因此大大减少了I/O传输时间。
| RAID 分级 | 定义 | 解释 | 图示 | 类别 |
|---|---|---|---|---|
| RAID0 | 无冗余、无校验的磁盘阵列 | 交替存放,并行读写,不仅扩大了存储容量,而且提高了读写速度,但是没有容错能力 | ![]() |
条带化 |
| RAID1 | 镜像磁盘阵列 | 两个磁盘同时读写,互为备份,虽然可靠性高,但是容量减半 | ![]() |
镜像 |
| RAID2 | 采用纠错的海明码的磁盘阵列 | 用海明校验生成多个冗余校验盘,实现纠正一位错误、检测两位错误的功能。同时也采用小条带交叉分布方式。因为采用海明码,所以校验盘与数据盘成正比,因而冗余信息开销太大,价格较贵,所以RAID2已不再被使用。 | ![]() |
并行访问 |
| RAID3 | 位交叉奇偶校验的磁盘阵列 | 采用奇偶校验生成单个冗余盘,也采用小条带交叉技术提高速度;其中任一数据磁盘的任一数据条带的内容都可以由其余数据盘与冗余盘的相应条带通过异或重新生成 | ![]() |
并行访问 |
| RAID4 | 块交叉奇偶校验的磁盘阵列 | 与RAID3类似,只不过采用的是大数据块交叉方式,每个磁盘的操作独立进行,I/O响应时间较快 | ![]() |
独立访问 |
| RAID5 | 无独立校验的奇偶校验的磁盘阵列 | 与RAID4的组织方式类似,采用独立存取方式和大数据块交叉分布方式,I/O响应速度快,但是奇偶校验块分布在各个磁盘中;成本不高且效率高,被广泛使用 | ![]() |
独立访问 |
总之
RAID通过同时使用多个磁盘,提高了传输率; 通过在多个磁盘上并行存取来大幅提高存储系统的数据吞吐量;通过镜像功能,可以提高安全可靠性:通过数据校验,可以提供容错能力。
1.8.4 磁盘调度算法¶
假设磁头的初始位置是100号磁道,有多个进程先后陆续地请求访问 55、58、39、18、90、160、150、38、184 号磁道;
| 调度算法 | 优点 | 缺点 |
|---|---|---|
FCFS算法 |
公平、简单 | 平均寻道距离大,仅应用在磁盘I/O较少的场合 |
SSTF算法 |
性能比FCFS好 | 不能保证平均寻道时间最短,可能“饥饿” |
SCAN算法 |
寻道性能较好,可避免”饥饿“现象 | 不利于远离磁头的一端的访问请求 |
C-SCAN算法 |
消除了对两端磁道请求的不公平 | ———— |
-
先来先服务算法(
FCFS) -
图示:

- 磁头总共移动了 45+3+19+21+72+70+10+112+146 = 498 个磁道;响应一个请求平均需要移动 498/9 = 55.3 个磁道(平均寻找长度)
- 磁头移动规则:根据进程请求访问磁盘的先后顺序进行调度。
- 优点:公平;如果请求访问的磁道比较集中的话,算法性能还算过的去
-
缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。
-
最短寻找时间优先(
Shortest Seek Time First,SSTF) -
图示:

- 磁头总共移动了 (100-18) + (184-18) = 248 个磁道;响应一个请求平均需要移动 248/9 = 27.5 个磁道(平均寻找长度)
- 磁头移动规则:优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。(其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优)
- 优点:性能较好,平均寻道时间短
-
缺点:可能产生“饥饿”现象(磁头在一个小区域内来回来去地移动);每次最短不一定全局最短
-
扫描算法(
SCAN)(电梯调度算法) -
图示:

- 假设某磁盘的磁道为 0~200号,磁头的初始位置是100号磁道,且此时磁头正在往磁道号增大的方向移动,磁盘请求访问顺序如上,则磁头总共移动了 (200-100) + (200-18) = 282 个磁道;响应一个请求平均需要移动 282/9 = 31.3 个磁道(平均寻找长度)
- 磁头移动规则:为了防止
SSTF在一个小区域来回移动导致饥饿的问题,规定只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。这就是扫描算法(SCAN)的思想。由于磁头移动的方式很像电梯,因此也叫电梯算法。 - 优点:性能较好,平均寻道时间较短,不会产生饥饿现象
-
缺点:①只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。②SCAN算法对于各个位置磁道的响应频率不平均,不利于远离磁头的那一端(如:假设此时磁头正在往右移动,且刚处理过90号磁道,那么下次处理90号磁道的请求就需要等磁头移动很长一段距离;而响应了184号磁道的请求之后,很快又可以再次响应 184 号磁道的请求了)
-
LOOK调度算法 -
图示:

- 磁头移动规则:扫描算法(SCAN)中,只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。LOOK 调度算法就是为了解决这个问题,如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。(边移动边观察,因此叫 LOOK)
- 磁头总共移动了 (184-100) + (184-18) = 250 个磁道;响应一个请求平均需要移动 250/9 = 27.5 个磁道(平均寻找长度)
-
优点:比起 SCAN 算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短
-
循环扫描算法(Circular SCAN,
C-SCAN) -
图示:

- 磁头移动规则:SCAN算法对于各个位置磁道的响应频率不平均,而 C-SCAN 算法就是为了解决这个问题。规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求。(只有到了最边上的磁道才能改变磁头移动方向。磁头返回途中不处理任何请求)
- 磁头总共移动了 (200-100) + (200-0) + (90-0)= 390 个磁道;响应一个请求平均需要移动 390/9 = 43.3 个磁道(平均寻找长度)
- 优点:比起SCAN 来,对于各个位置磁道的响应频率很平均。
-
缺点:只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了;并且,磁头返回时其实只需要返回到18号磁道即可,不需要返回到最边缘的磁道。另外,比起SCAN算法来,平均寻道时间更长。
-
C-LOOK 调度算法
-
图示:

- 磁头移动规则:C-SCAN 算法的主要缺点是只有到达最边上的磁道时才能改变磁头移动方向,并且磁头返回时不一定需要返回到最边缘的磁道上。C-LOOK 算法就是为了解决这个问题。如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。
- 磁头总共移动了 (184-100) + (184-18) + (90-18)= 322 个磁道;响应一个请求平均需要移动 322/9 = 35.8 个磁道(平均寻找长度)
- 优点:比起 C-SCAN 算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短
【注】:
- 若题目中无特别说明,则SCAN 就是 LOOK,C-SCAN 就是C-LOOK
- SCAN\&C-SCAN都必须要到达端点,LOOK\&C-LOOK都可以跳过端点
固态硬盘¶
- 原理:固态硬盘(
Solid State Disk,SSD),基于闪存技术Flash Memory,属于电可擦除ROM,即EEPROM。 - 组成:
- 闪存翻译层:负责翻译逻辑块号,找到对应页(Page),相当于磁盘控制器
- 存储介质:闪存颗粒,多个闪存芯片(Flash Chip)—每个芯片包含多个块(block)—每个块包含多个页(page)
读写性能特性:
- 以页(page)为单位读/写—相当于磁盘的"扇区",注意,当需要写某页信息的时候,必须先对该页所在的区块进行擦除操作
- 以块(block)为单位"擦除",擦干净的块,其中的每页都可以写一次,读无限次
- 支持随机访问,系统给定一个逻辑地址,闪存翻译层可通过电路迅速定位到对应的物理地址
- 读快、写慢。要写的页如果有数据,则不能写入,需要将块内其他页全部复制到一个新的(擦除过的)块中,再写入新的页
- 与机械硬盘相比的特点
- SSD读写速度快,随机访问性能高,用电路控制访问位置;机械硬盘通过移动磁臂旋转磁盘控制访问位置,有寻道时间和旋转延迟
- SSD安静无噪音、耐摔抗震、能耗低、造价更贵
- SSD的一个"块"被擦除次数过多(重复写同一个块)可能会坏掉,而机械硬盘的扇区不会因为写的次数太多而坏掉
- 容易磨损
磨损均衡技术:
- 思想:将“擦除”平均分布在各个块上,以提升使用寿命
- 动态磨损均衡:写入数据时,优先选择累计擦除次数少的新闪存块
- 静态磨损均衡:
SSD监测并自动进行数据分配、迁移,让老旧的闪存块承担以读为主的储存任务,让较新的闪存块承担更多的写任务(更优秀)
结构图:








