组成原理-存储磁盘及其调度算法
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) |
组成 | 多个闪存芯片,每个芯片有多个块,每个块有多个页 |
读写特性 | 以“页”为单位读写,支持随机访问(读快、写慢) |
擦除特性 | 以“块”为单位擦除,一个块如果被擦除次数过多会损坏 |
磨损均衡技术 | 动态磨损均衡(优先写入擦除次数较少的块)、静态磨损均衡(自动检测并迁移分配数据,使其寿命更长) |
优点 | 噪音小,读写速度快,抗震 |
缺点 | 造价高 |
以上是关于组成原理-存储磁盘及其调度算法的主要内容,如果未能解决你的问题,请参考以下文章