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

Posted Mount256

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组成原理-存储磁盘及其调度算法相关的知识,希望对你有一定的参考价值。

文章目录

1 磁盘

1.1 磁盘的构成

  • 盘片:磁盘由多个盘片组成。
  • 盘面:一个盘片可能会有两个盘面。
  • 磁道:磁盘的盘面被划分成一个个磁道,一个同心圆环就是一个磁道。
  • 扇区:一个磁道又被划分成一个个扇区,每个扇区就是一个“磁盘块”。各个扇区存放的数据量相同。
  • 柱面:所有盘面中相对位置相同的磁道组成柱面。
  • 磁头和磁臂:所有的磁头都是连在同一个磁臂上的,因此所有磁头只能“共进退”。“磁头”移动到想要读/写的扇区所在的磁道。磁盘会转起来,让目标扇区从磁头下面划过,才能完成对扇区的读/写操作。
  • 地址结构:可用(柱面号,盘面号,扇区号)决定任意一个磁盘块的位置。

1.2 磁盘的性能参数

性能参数描述公式备注
寻道时间(寻找时间)在读/写数据前,将磁头移动到指定磁道所花的时间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 硬件层面上减少延迟时间的方法

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

1.4 相关例题

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

  • 旋转一圈的时间 = (60s / 7200) * 1000 = 8ms,旋转延迟时间 = 1/2 * 旋转一圈所用时间 = 4ms
  • 传输时间 = (60s / 7200) / 400 * 1000 = 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
  • 寻道时间 = 磁道数 * 平均寻找时间 = (b/N) * T
  • 传输时间 = 磁道数 * 旋转一圈的时间 = (b/N) * r
  • 注意一个道就作为一个簇,不用涉及定位扇区的时间(延迟时间)
  • 平均访问时间 = 寻道时间 + 传输时间 = (T+r) * (b/N)

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

以上是关于组成原理-存储磁盘及其调度算法的主要内容,如果未能解决你的问题,请参考以下文章

计算机系统磁盘结构和磁盘调度算法

磁盘读写的时间花费和调度算法(操作系统)

操作系统磁盘的结构&磁盘的调度算法

操作系统磁盘的结构&磁盘的调度算法

操作系统磁盘的结构&磁盘的调度算法

磁盘分区及系统引导