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

1 磁盘的构造和性能

1.1 磁盘的构造

在这里插入图片描述

在这里插入图片描述

  • 盘片:磁盘由多个盘片组成。
  • 盘面:一个盘片有两个盘面。
  • 磁道:磁盘的盘面被划分成一个个磁道,一个同心圆环就是一个磁道。
  • 扇区:一个磁道又被划分成一个个扇区,每个扇区就是一个“磁盘块”。各个扇区存放的数据量相同。
  • 柱面:所有盘面中相对位置(或编号)相同的磁道组成一个柱面。磁道数与柱面数相等
  • 磁头和磁臂:所有的磁头都是连在同一个磁臂上的,因此所有磁头只能“共进退”。“磁头”移动到想要读/写的扇区所在的磁道。磁盘会转起来,让目标扇区从磁头下面划过,才能完成对扇区的读/写操作。
  • 地址结构:可用【柱面号(磁道号),盘面号(磁头号),扇区号】决定任意一个磁盘块的位置。
  • 磁盘容量的计算公式:磁盘容量 = 柱面数 * 每个柱面的磁道数 * 每个磁道的扇区数 * 扇区大小
  • 块/簇:在 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 读取并处理完成后,又是上面类似的过程,于是总结如下:

过程时间
读取并处理 A5ms
转到 B25ms
读取并处理 B5ms
转到 C25ms
读取并处理 C5ms
转到 D25ms
读取并处理 D5ms
转到 E25ms
读取并处理 E5ms
转到 F25ms
读取并处理 F5ms
转到 G25ms
读取并处理 G5ms
转到 H25ms
读取并处理 H5ms
转到 I25ms
读取并处理 I5ms

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

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

在这里插入图片描述

(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)
组成多个闪存芯片,每个芯片有多个块,每个块有多个页
读写特性以“页”为单位读写,支持随机访问(读快、写慢)
擦除特性以“块”为单位擦除,一个块如果被擦除次数过多会损坏
磨损均衡技术动态磨损均衡(优先写入擦除次数较少的块)、静态磨损均衡(自动检测并迁移分配数据,使其寿命更长)
优点噪音小,读写速度快,抗震
缺点造价高
  • 14
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值