机械硬盘就是一套精密的唱机:盘片、磁头、磁道、扇区、柱面;慢的不是读,是找——而这一章所有办法都在减少找。
5.1~5.5 都在绕开磁盘的速度差,这一节回到它本身,看看它究竟慢在哪儿,也是本章的收口。
一、结构:一套精密的唱机
盘片——表面涂了磁性材料,数据就记在上面,正反两面都能用;一个硬盘里通常叠着好几片。 磁头——贴着盘片飞,负责读和写;离得极近,所以硬盘怕震动。 磁道——盘片上的一圈圈同心圆,每一圈叫一条磁道。 扇区——磁道再切成小段,读写就是以扇区为单位一块一块来的。 柱面——多片盘上半径相同的磁道合起来叫一个柱面,跨盘片换磁头比挪磁头快,所以数据常按柱面排。
二、读一次要经历什么
要读一块数据,得走三步: 一、寻道——把磁头移到目标磁道上去,纯机械移动,最贵的一步。 二、旋转等待——等盘片转到那个扇区下面。转速固定,平均要等半圈。 三、传输——真正把数据读出来。这一步其实是电信号,很快。 于是总时间 = 寻道 + 旋转延迟 + 传输——前两项都是机械动作,占了大头。
三、三个时间各是多少
以 7200 转/分的硬盘为例:每秒 120 圈,转一圈 8.33 毫秒,平均旋转延迟 4.17 毫秒。 寻道通常几毫秒,旋转等待几毫秒——加起来十毫秒上下。 而传输呢?连续读一磁道的数据只要不到一毫秒。 所以对比很清楚:找一次要十毫秒,读一大批才花一毫秒。
四、于是所有优化都指向同一个方向
既然找贵、读便宜,那么所有办法都在一句话里:别找,或者一次多读点。 顺序访问优于随机访问——顺着读最省找的时间。 连续存放优于分散存放——文件系统拼命让同一文件的数据挨着放。 缓存有用——找过的地方留一份,下次就不用找了(5.2)。 SSD 有用——干脆取消【找】这个动作(5.4)。 回过头看,这一章六节讲的其实是同一件事:怎么少让 CPU 等磁盘找数据。
五、动手 Demo:了解一下磁盘的物理结构
机械硬盘的内部就是一套非常精密的唱机:盘片、磁头、磁道、扇区、柱面。 读一次要经历:寻道 → 旋转等待 → 传输。
for rpm in (5400, 7200, 15000):
rps = rpm / 60.0
print("%d 转/分:每秒 %.0f 圈,转一圈 %.2f 毫秒,"
"平均旋转延迟 %.2f 毫秒" % (rpm, rps, 1000.0 / rps, 500.0 / rps))
实跑输出:
--------------------------------------------------------------------
了解一下磁盘的物理结构
--------------------------------------------------------------------
机械硬盘的内部其实就是**一套非常精密的唱机**:
部件 作用
--------------------------------------------------------
盘片 表面涂磁性材料,数据就记在上面,正反两面都能用
磁头 贴着盘片飞,负责读和写;离得太近,所以怕震动
磁道 盘片上的一圈圈同心圆,每一圈叫一条磁道
扇区 磁道再切成小段,读写以一块一块为单位
柱面 多个盘片上半径相同的磁道合起来叫一个柱面
算一下容量,再看速度瓶颈在哪儿:
参数 取值 算出来
----------------------------------------------------------
盘片数 × 面数 2 片 × 2 面 = 4 面 4 组读写面
每面磁道数 100000 条
每磁道扇区数 1000 个
每扇区字节数 512 字节
总容量 4 × 100000 × 1000 × 512 约 204.8 GB
转速 每秒转几圈 转一圈 平均旋转延迟
-----------------------------------------------------------
5400 转/分 90 圈 11.11 毫秒 5.56 毫秒
7200 转/分 120 圈 8.33 毫秒 4.17 毫秒
15000 转/分 250 圈 4.00 毫秒 2.00 毫秒
两条结论:
**定位是毫秒级的,内存是纳秒级的**——两者差着上百万倍
**磁盘慢的不是【读】,是【找】**——顺着一圈读下去其实不慢
7200 转的盘,转一圈 8.33 毫秒、平均等半圈 4.17 毫秒,再算上几毫秒的寻道——一次随机读就要十毫秒左右。 而连续读一磁道只要不到一毫秒:磁盘慢的不是读,是找。
30 秒实验
- 用 5400 转的转速算一遍旋转延迟,和 7200 转比差多少。
- 想想为什么播放一个大视频文件很流畅,而打开一堆小文件却很慢。
常见误区
- 以为硬盘慢在【读得慢】。慢在【找】,连续读其实不慢。
- 以为寻道和旋转延迟可以省掉。它们是机械动作,只能绕开不能加快。
自测三问(点开对答案)
1. 机械硬盘的几个主要部件是什么? —— 盘片、磁头、磁道、扇区、柱面。 2. 读一次数据要经历哪三步? —— 寻道(移动磁头)→ 旋转等待(等盘片转到位置)→ 传输数据。 3. 哪一步最贵,为什么? —— 寻道和旋转等待,都是机械动作、以毫秒计;传输是电信号,快得多。- ☐ 下一章(第六章 自己动手压缩数据)
相关笔记
- 程序加载到内存后才能运行 — 回过头看那道速度差
- 节约内存的编程技巧 — 省下来的不只是内存
- 内存的物理结构十分简单 — 内存那边为什么不用找
- 💻 计算机是怎样跑起来的 · 索引 — 讲硬件是怎么搭起来的
- ⚙️ 程序是怎样跑起来的 · 索引