G
N
I
D
A
O
L

【组成原理-存储】磁盘及其调度算法

1 磁盘的构造和性能

1.1 磁盘的构造

image

image

  • 盘片:磁盘由多个盘片组成。
  • 盘面:一个盘片有两个盘面。
  • 磁道:磁盘的盘面被划分成一个个磁道,一个同心圆环就是一个磁道。
  • 扇区:一个磁道又被划分成一个个扇区,每个扇区就是一个“磁盘块”。各个扇区存放的数据量相同。
  • 柱面:所有盘面中相对位置(或编号)相同的磁道组成一个柱面。磁道数与柱面数相等
  • 磁头和磁臂:所有的磁头都是连在同一个磁臂上的,因此所有磁头只能“共进退”。“磁头”移动到想要读/写的扇区所在的磁道。磁盘会转起来,让目标扇区从磁头下面划过,才能完成对扇区的读/写操作。
  • 地址结构:可用【柱面号(磁道号),盘面号(磁头号),扇区号】决定任意一个磁盘块的位置。
  • 磁盘容量的计算公式:磁盘容量 = 柱面数 * 每个柱面的磁道数 * 每个磁道的扇区数 * 扇区大小
  • 块/簇:在 Unix 系统下,块是操作系统中最小的逻辑存储单位;在 Windows 系统下,簇是操作系统中最小的逻辑存储单位。簇和块的概念是等价的,每个簇(块)可以包括 2、4、8、16、32、64...个扇区。簇(块)是为了操作系统读写方便而设计的,它是一个逻辑概念,是操作系统与磁盘打交道的最小单位,文件所占用的空间必须是簇(块)的整数倍(若文件大小小于一簇,那么也要占一簇的空间)

如何理解柱面上的磁道?】如上图,该硬盘是由 3 个盘片组成,那么它就有 6 个可用的盘面和 6 个磁头(每个盘都有上下两面),而每一个盘面上都被逻辑划分为多个磁道,处在 0~5 号盘面上磁道号相同的磁道合起来就被称为一个柱面,在这里的话 0 柱面就是由 6 个盘面上的总共 6 个 0 磁道组成,但是实际使用时却不能分辨 0 磁道在哪个盘面上。为了确切指出具体的逻辑位置,需要指出该磁道在哪个盘面上。由于一个盘面对应一个磁头,因此也可以使用第几号磁头来表示磁道在哪个盘面上。

总结:当提到磁盘的一个柱面上有 6 个磁道时,就是在说该磁盘有 6 个盘面

参考资料:(1)硬盘磁道和柱面(2)存储基础知识:扇区与块/簇 - 潇湘隐者 - 博客园

相关例题

【例 1】假定有一个磁盘组共有 100 个柱面,每个柱面上有 8 个磁道,每个盘面被划分成 8 个扇区。现有一个含 5000 个逻辑记录的文件,逻辑记录的大小与扇区一致,该文件以顺序结构的形式被存放到磁盘上。柱面、磁道、扇区的编号从 0 开始,逻辑记录的编号从 0 开始。文件信息从 0 柱面、0 磁道、0 扇区开始存放。试问,该文件编号为 3468 的逻辑记录应存放在哪个柱面的第几个磁道的第几个扇区上?

【解】题中给出每个柱面上有 8 个磁道,即:该磁盘有 8 个盘面,每个盘面有 100 个磁道,每个磁道有 8 个扇区。

现在说明数据是如何被存储在磁盘里的。因为磁头是固定在一起的,所以在存放数据时,先存满一个扇区。待 8 个扇区都存满了,意味着已存满某一盘面上的一个磁道,需要往其他盘面上的同编号磁道存放。待 8 个盘面上的所有同编号磁道存满了,也就意味着该柱面已经存满了数据。这也说明,应尽量把文件记录在同一个柱面上,这样磁头就不需要重新寻找其他磁道

注意,本题的地址编号方式与通常习惯不同,“柱面上的第几个磁道”实际所指第几个盘面。一个柱面大小为 8 * 8 = 64 个扇区,那么有 3468 / 64 = 54...12,说明柱面号为 54(或磁道号为 54),剩余 12 个扇区。因为一个盘面有 8 个扇区,所以 12 / 8 = 1...4,说明磁道号为 1(通常习惯是写成盘面号或磁头号为 1),扇区号为 4。

【例 2】某计算机系统中的磁盘有 300 个柱面,每个柱面有 10 个磁道,每个磁道有 200 个扇区,扇区大小为 512B,则:

(1)磁盘容量为多少?

(2)若文件系统的每簇包含 2 个扇区,则簇号 100530 的磁盘物理地址是多少?

【解】(1)题中给出每个柱面上有 10 个磁道,即:该磁盘有 10 个盘面,每个盘面有 300 个磁道,每个磁道有 200 个扇区,扇区大小为 512B,则磁盘容量 = 300 * 10 * 200 * 512 / 1024 = 3 * 105 KB

(2)与例 1 的思路类似,一个柱面大小为 10 * 200 / 2 = 1000 簇,那么有 100530 / 1000 = 100...530,说明柱面号为 100(或磁道号为 100),剩余 530 个簇。因为一个盘面有 200 / 2 = 100 个簇,所以 530 / 100 = 5...30,说明盘面号为 5,簇号为 30,转化成扇区号为 60。

【例 3】某文件系统的簇和磁盘扇区大小分别为 1KB 和 512B。若一个文件的大小为 1026B,则系统分配给该文件的磁盘空间大小是( )

A. 1026B

B. 1536B

C. 1538B

D. 2048B

【解】簇是操作系统与磁盘打交道的最小单位,文件所占用的空间必须是簇(本题为 1024B)的整数倍(若文件大小小于一簇,那么也要占一簇的空间)。因此一个大小为 1026B 的文件占用两个簇,即 2048B,选 D。

1.2 磁盘阵列

RAID:独立冗余磁盘阵列

RAID 分级 解释
RAID0 无冗余、无校验的磁盘阵列(连续多个数据块交替存放,并行读写,但没有容错能力)
RAID1 镜像磁盘阵列(两个磁盘同时读写,互为备份)
RAID2 采用海明码的磁盘阵列
RAID3 位交叉奇偶校验的磁盘阵列
RAID4 块交叉奇偶校验的磁盘阵列
RAID5 无独立校验的奇偶校验的磁盘阵列

1.3 磁盘的性能参数

1.3.1 磁盘性能参数的概念和计算

性能参数 描述 公式 备注
寻道时间(寻找磁道的时间) 在读/写数据前,将磁头移动到指定磁道所花的时间 T = p + m*n 启动磁头臂的时间为 p,磁头每跨越一个磁道耗时为 m,总共需要跨越 n 条磁道
延迟时间(寻找扇区的时间) 磁头定位(寻找)到目标扇区所需要的时间 T = (1/2)*(1/r) = 1/(2r) 磁盘转速为 r(单位:转/分),则旋转一圈的时间为 60s/r(单位:秒)。因为在定位过程中,最多旋转 1 圈,最少不用旋转(0 圈),所以在平均情况下,需要旋转半圈,时间需除于 2
(读取数据所用的)传输时间 从磁盘读出或向磁盘写入数据所经历的时间 T = (b/N) / r = b/(rN) 磁盘转速为 r(单位:转/分),此次读/写的字节数为 b,每个磁道上的字节数为 N,因此 b 字节的数据需要 b/N 个磁道才能存储,而读/写一个磁道所需的时间刚好是转一圈所需时间 60s/r(单位:秒)
(访问一个扇区的)传输时间 磁头扫过一个扇区所用的时间 传输时间 = (旋转一圈的时间 / 一条磁道的扇区总数) = (一个扇区的容量大小 / 数据传输率) 对于磁盘的传输速率,K、M、G、T 一般是以 10 为底的单位,而不是以 2 为底!1K = 103,1M = 106,1G = 109,1T = 1012。比如 20MB/s = 20 * 106 B/s ≠ 20 * 220 B/s

【注 1】总的平均存取时间 = 寻道时间 + 延迟时间 + 传输时间 = 寻道时间 + 转半圈寻找扇区的时间 + 读取时间。

【注 2】注意转速的单位:我们通常用 r 转/秒r 转/分,但有些题目会告诉你 r 秒/转r 分/转,需要小心。

【注 3】延迟时间和传输时间都与磁盘转速相关,且为线性相关。而转速是硬件的固有属性,因此操作系统也无法优化延迟时间和传输时间。不过在硬件层面上可以优化。

1.3.2 提高磁盘 I/O 速度

(1)减少延迟时间

  • 原理:连续读取编号相邻的扇区时,磁头读取完一个扇区后需要一段准备时间才可以读取下一个扇区,但是磁盘又在不停地旋转,不会等待磁头准备完毕才重新旋转,因此我们可以边旋转边准备,等准备好了也正好转到要读的扇区了。
  • 方法
盘面状况 方法 描述
一个盘面 交替编号 让编号相邻的扇区在物理上不相邻
多个盘面 错位命名 让相邻盘面的扇区编号错位

(2)采用磁盘高速缓存:在内存中为磁盘设置一个缓冲区,在缓冲区中保存了某些盘块的副本,类似于 Cache。

(3)提前读:若采用顺序访问方式对文件进行访问,则可以预知下一次要读写的盘块,此时可以先采取预先读的方式。

(4)延迟写:缓冲区中的数据原本须立即写回磁盘,但考虑到之后可能会有进程再次访问数据,因此不立刻将缓冲区的数据写回磁盘。

(5)优化物理块的分布:若将文件存储在同一个磁道中,则磁头不需要有多余的移动,大大节省了访问时间。

(6)虚拟盘:利用内存去模拟磁盘,称为虚拟盘或 RAM 盘。

(7)使用磁盘冗余阵列(RAID):由于采用了并行交叉存取的方式,可使磁盘的 I/O 速度提高。

1.3.3 相关例题

【例 1】设磁盘转速为 7200 转/分,平均寻道时间为 9ms,每条磁道的平均扇区数为 400,则访问一个扇区的平均存取时间是多少?

  • 旋转一圈的时间 = (60s / 7200) * 1000 = 8ms,旋转延迟时间 = 1/2 * 旋转一圈所用时间 = 4ms
  • 传输时间 = 8ms / 400 = 0.02ms
  • 寻道时间 = 9ms
  • 平均存取时间 = 寻道时间 + 旋转延迟时间 + 传输时间 = 9ms + 4ms + 0.02ms = 13.02ms

【例 2】设磁盘的转速为 10000 转/分,平均寻道时间为 6ms,磁盘传输速率为 20MB/s,磁盘控制器延迟为 0.2ms,读取一个 4KB 扇区所需的平均时间是多少?

  • 旋转一圈的时间 = (60s / 10000) * 1000 = 6ms,旋转延迟时间 = 1/2 * 旋转一圈所用时间 = 3ms
  • 传输时间 = 读取时间 + 延迟时间 = (4KB) / (20MB/s) * 1000 + 0.2 = 0.2ms + 0.2ms = 0.4ms
  • 寻道时间 = 6ms
  • 平均存取时间 = 寻道时间 + 旋转延迟时间 + 传输时间 = 6ms + 3ms + 0.4ms = 9.4ms

【例 3】已知某磁盘的平均转速是 r 秒/转,平均寻找时间是 T 秒,每个磁道可以存储的字节数是 N,现在向该磁盘写入 b 字节的数据,采用随机寻道的方法,每道的所有扇区组成一个簇,其平均访问时间是?

  • 注意“r 秒/转”即为旋转一圈的时间
  • 磁道数 = 数据总量/每个磁道存储容量 = b/N
  • 读写一个磁道所需时间 = 寻道时间 + 读写磁道时间 = T + r
  • 注意一个磁道就作为一个簇,不用涉及定位扇区的时间(延迟时间)
  • 访问一个簇平均访问时间 = 读写一个磁道所需时间 * 磁道数 = (T+r) * (b/N)

【例 4】(盘面未采用交替编号)假设磁盘的每个磁道划分为 9 个块,现在一个文件有 A, B,…, I 共 9 条记录,每条记录的大小与块的大小相等,设磁盘转速为 27ms/转,每读出一块后需要 2ms 的处理时间。若忽略其他辅助时间,且一开始磁头在即将要读 A 记录的位置,试问:若顺序存放这些记录顺序读取,处理该文件要多少时间?

【解】磁盘转速为 27ms/转,则读取每个扇区所需时间为 3ms。

读取第一个记录 A,需要花费 3ms,然后还需要 2ms 的处理时间。但记录 A 处理完成后,磁头位于记录 B 扇区的 2/3 位置,并不在记录 B 的开头。为了完整读取记录 B,必须再转接近一圈重新抵达记录 B 的开头,需要花费的时间为 27ms - 2ms = 25ms。

等到记录 B 读取并处理完成后,又是上面类似的过程,于是总结如下:

过程 时间
读取并处理 A 5ms
转到 B 25ms
读取并处理 B 5ms
转到 C 25ms
读取并处理 C 5ms
转到 D 25ms
读取并处理 D 5ms
转到 E 25ms
读取并处理 E 5ms
转到 F 25ms
读取并处理 F 5ms
转到 G 25ms
读取并处理 G 5ms
转到 H 25ms
读取并处理 H 5ms
转到 I 25ms
读取并处理 I 5ms

所以一共花费的时间为 8 * 25ms + 9 * 5ms = 245ms。

【例 5】(盘面采用交替编号)一个交叉存放信息的磁盘,信息存放方式如下图所示。每个磁道有 8 个扇区,每个扇区 512B,旋转速度为 3000 转/分。假定磁头已在读取信息的磁道上,0 扇区转到磁头下需要 1/2 转,且设备对应的控制器不能同时进行输入/输出,在数据从控制器传送全内存的这段时间内,从磁头下通过的扇区数为 2。请回答:

image

(1)依次读取一个磁道上的所有扇区需要多少时间?

(2)该磁盘的数据传输率是多少?

【解】(1)旋转速度为 3000 转/分,即 20ms/转,每个扇区的读取时间为 20/8 = 2.5ms。

过程如下表所示:

过程 时间
0 扇区转到磁头下 10ms
读取 0 扇区 2.5ms
转到 1 扇区(此时正在传输 0 扇区数据) 5.0ms
读取 1 扇区 2.5ms
转到 2 扇区(此时正在传输 1 扇区数据) 5.0ms
读取 2 扇区 2.5ms
转到 3 扇区(此时正在传输 2 扇区数据) 5.0ms
读取 3 扇区 2.5ms
转到 4 扇区(此时正在传输 3 扇区数据) 5.0ms
读取 4 扇区 2.5ms
转到 5 扇区(此时正在传输 4 扇区数据) 5.0ms
读取 5 扇区 2.5ms
转到 6 扇区(此时正在传输 5 扇区数据) 5.0ms
读取 6 扇区 2.5ms
转到 7 扇区(此时正在传输 6 扇区数据) 5.0ms
读取 7 扇区 2.5ms
传输 7 扇区数据 5.0ms

依次读取一个磁道上的所有扇区的时间:10ms + (2.5ms + 5.0ms) * 8 = 70ms。

(2)每个磁道有 8 个扇区,每个扇区 512B,则一个磁道数据大小为 8 * 512B = 4KB。

故数据传输率为 4KB / 70ms = 58.5kB/s。

2 磁盘的调度算法

算法 缺点
先来先服务算法(FCFS) ~
最短寻找时间优先算法(SSTF) 可能导致饥饿
扫描算法(SCAN,电梯算法) 对于各个位置磁道的响应频率不平均
循环扫描算法(C-SCAN) ~

假设在一个磁盘上,有 1000 个柱面,编号从 0~999,用下面的算法计算为了满足磁盘队列中的所有请求,磁盘臂必须移动过的磁道数目。假设最后服务的请求时在磁道 345 上,并且读写头正在朝磁道 0 移动。在按 FIFO 顺序排列的队列中包含了如下磁道上的请求:123,874,692,475,105,376。

2.1 先来先服务算法(FCFS)

  • 算法思路:根据进程请求访问磁盘的先后顺序进行调度。
  • 序列:123,874,692,475,105,376
  • 算法运行:(假设最后服务的请求时在磁道 345 上)
磁头 磁道访问的顺序
磁头移动 345,123,874,692,475,105,376
  • 磁头总共移动的磁道数 = (345-123)+(874-123)+(874-692)+(692-475)+(475-105)+(376-105) = 2013

2.2 最短寻找时间优先算法(SSTF)

  • 算法思路:优先处理与当前磁头最近的磁道(贪心思想)。
  • 序列:123,874,692,475,105,376
  • 算法运行:(假设最后服务的请求时在磁道 345 上)
磁头 磁头位置
初始 345
磁头最近的磁道 376
磁头最近的磁道 475
磁头最近的磁道 692
磁头最近的磁道 874
磁头最近的磁道 123
磁头最近的磁道 105
  • 磁头总共移动的磁道数 = (874-345)+(874-105) = 1298

2.3 扫描算法(SCAN,电梯算法)

  • 算法思路:只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移
    动。
  • 序列:123,874,692,475,105,376
  • 算法运行:(假设最后服务的请求时在磁道 345 上,并且读写头正在朝磁道 0 移动)
磁头 磁道访问的顺序
磁头朝磁道 0 移动 345,123,105,0
磁头朝磁道 999 移动 0,376,475,692,874
  • 磁头总共移动的磁道数 = (345-0)+(874-0) = 1219

2.4 LOOK 调度算法

  • 算法思路:基于扫描算法,在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。
  • 序列:123,874,692,475,105,376
  • 算法运行:(假设最后服务的请求时在磁道 345 上,并且读写头正在朝磁道 0 移动)
磁头 磁道访问的顺序
磁头朝磁道 0 移动 345,123,105
没有更小的磁道号,磁头朝磁道 999 移动 105,376,475,692,874
  • 磁头总共移动的磁道数 = (345-105)+(874-105) = 1009

2.5 循环扫描算法(C-SCAN)

  • 算法思路:只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求。
  • 序列:123,874,692,475,105,376
  • 算法运行:(假设最后服务的请求时在磁道 345 上,并且读写头正在朝磁道 0 移动)
磁头 磁道访问的顺序
磁头朝磁道 0 移动 345,123,105,0
磁头回滚至 999,朝磁道 0 移动 0,999,874,692,475,376
  • 磁头总共移动的磁道数 = (345-0)+(999-0)+(999-376) = 1967

2.6 C-LOOK 调度算法

  • 算法思路:基于循环扫描算法,在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。
  • 序列:123,874,692,475,105,376
  • 算法运行:(假设最后服务的请求时在磁道 345 上,并且读写头正在朝磁道 0 移动)
磁头 磁道访问的顺序
磁头朝磁道 0 移动 345,123,105
没有更小的磁道号,磁头朝磁道 0 移动 105,874,692,475,376
  • 磁头总共移动的磁道数 = (345-105)+(874-105)+(874-376) = 1507

3 磁盘的管理

3.1 磁盘的初始化

  • 低级格式化(物理格式化):将磁盘的各个磁道划分为扇区。管理扇区所需要的各种数据结构一般存放在头、尾两个部分,包括扇区校验码(如奇偶校验、CRC 循环冗余校验码等,校验码用于校验扇区中的数据是否发生错误)。
  • 磁盘分区:每个分区由一个或多个柱面组成(即分为我们熟悉的 C盘、D盘、E盘)。
  • 逻辑格式化:创建文件系统。包括创建文件系统的根目录、初始化存储空间管理所用的数据结构。

3.2 引导块和操作系统引导过程

3.2.1 引导块(初始块)

  • 计算机开机时需要进行一系列初始化的工作,这些初始化工作是通过执行初始化程序(即 boot 程序,或自举程序)完成的。
  • ROM 中只存放很小的“自举装入程序”。
  • 完整的自举程序放在磁盘的启动块(即引导块/启动分区)上,启动块位于磁盘的固定位置。
  • 拥有启动分区的磁盘称为启动磁盘或系统磁盘。
  • 引导硬盘和非引导硬盘:即装了操作系统的硬盘和没有装操作系统的硬盘。

3.2.2 操作系统引导过程

  • 激活 CPU:CPU 读取 ROM 中的 boot 程序,开始执行 BIOS 的指令。
  • 硬件自检:启动 boot 程序后,检查硬件是否有故障。
  • 加载带有操作系统的硬盘:硬件自检后,BIOS 读取 boot sequence,把控制权交给启动顺序排在第一位的存储设备。若发现该存储设备是非引导硬盘,则去检查下一个存储设备,如果找不到引导硬盘,则宕机。
  • 加载主引导记录 MBR:CPU 通过 MBR 去硬盘哪个主分区去找操作系统,执行磁盘引导程序,扫描分区表。
  • 加载活动分区(又称主分区,即安装了操作系统的分区):MBR 中记录哪些分区是活动分区,通过 MBR 开始加载活动分区的第一个扇区。
  • 加载分区引导记录 PBR:活动分区的第一个扇区又称为 PBR,从根目录下找到完整的操作系统初始化程序(即启动管理器)并执行,完成“开机”的一系列动作。

3.3 坏块

  • 坏了、无法正常使用的扇区就是“坏块”。这属于硬件故障,操作系统是无法修复的。
  • 对于简单结构的磁盘:逻辑格式化时将坏块标记出来。(坏块对操作系统不透明
  • 对于复杂结构的磁盘:磁盘控制器维护一个坏块链,并管理备用扇区。(坏块对操作系统透明

4 固态硬盘

项目 描述
原理 EEPROM(电可擦除 ROM)
组成 多个闪存芯片,每个芯片有多个块,每个块有多个页
读写特性 以“页”为单位读写,支持随机访问(读快、写慢)
擦除特性 以“块”为单位擦除,一个块如果被擦除次数过多会损坏
磨损均衡技术 动态磨损均衡(优先写入擦除次数较少的块)、静态磨损均衡(自动检测并迁移分配数据,使其寿命更长)
优点 噪音小,读写速度快,抗震
缺点 造价高
posted @ 2023-01-11 16:00  漫舞八月(Mount256)  阅读(713)  评论(0编辑  收藏  举报