磁盘存储
![Laptop-hard-drive-exposed.jpg](https://img2020.cnblogs.com/blog/1846664/202004/1846664-20200421140855624-1788613820.jpg)
从磁盘上读信息的时间为毫秒级,从 DRAM 读比从磁盘读快 10 万倍,从 SRAM 读比从磁盘读快 100 万倍。
磁盘结构
![Cylinder Head Sector](https://img2020.cnblogs.com/blog/1846664/202004/1846664-20200420160741251-826132919.png)
- 磁道(
Track
) - 柱面(
Cylinder
) - 扇区(
Sector
) - 磁头(
Heads
) - 盘片(
Platters
)
每个碟片都有两面,因此也会相对应每碟片有 2 个磁头。
物理结构
磁盘是由盘片(platter
)构成的。每个盘片有两面或者称为表面(surface
),表面覆盖着磁性记录材料。盘片中央有一个可以旋转的主轴(spindle
),它使得盘片以固定的旋转速率旋转,通常是 5400 ~ 15000 转每分钟(Revolution Per Minute, RPM
)。磁盘通常包含一个或多个这样的盘片,并封装在一个密封的容器内。
每个表面是由一组称为磁道(track
)的同心圆组成的。每个磁道被划分为一组扇区(sector
)。每个扇区包含相等数量的数据位(通常是 512 字节),这些数据编码在扇区上的磁性材料中。扇区之间由一些间隙(gap
)分隔开,这些间隙中不存储数据位。间隙存储用来标识扇区的格式化位。
柱面:所有盘片表面上到主轴中心的距离相等的磁道的集合。
![一个盘片的视图](https://img2020.cnblogs.com/blog/1846664/202004/1846664-20200420162719403-1814659422.png)
![多个盘片的视图](https://img2020.cnblogs.com/blog/1846664/202004/1846664-20200420163103552-1961027596.png)
逻辑结构
![Disk-structure](https://img2020.cnblogs.com/blog/1846664/202004/1846664-20200420160807407-448963888.png)
- A:磁道
- B:扇面
- C:扇区
- D:簇(扇区组)
簇(Data cluster
)或者分配单元(allocation unit
)是操作系统中磁盘文件存储管理的单位,可为一个或多个物理扇区组成,由格式化时选定文件系统而定。簇是操作系统所使用的逻辑概念,而非磁盘的物理特性。
操作系统对硬盘进行读写时需要用到文件系统把硬盘的扇区组合成簇,并创建文件和树形目录制度,使操作系统对其访问和查找变得容易,这是因为操作系统直接对数目众多的扇区进行寻址会十分麻烦。
由于物理硬盘中扇区是磁盘最小的物理存储单元、在硬盘中存在的量很大并且每个扇区都必须有编号,所以操作系统无法对数目众多的扇区进行寻址。因此操作系统将相邻的扇区组合在一起,组成簇这一单位用以高效率地利用资源。文件系统是操作系统与硬盘驱动器之间的接口,当系统请求从硬盘里读取一个文件时,会请求相应的文件系统打开文件,簇包含的扇区数是由文件系统格式与分配单元大小而定。一般每个簇可以包括 2、4、8、16、32 或 64 个扇区。
磁盘操作
![HDDspin.jpg](https://img2020.cnblogs.com/blog/1846664/202004/1846664-20200421141503634-1056041571.jpg)
磁盘用 读/写 头(read/write head
) 来读写存储在磁性表面的位,而读/写头连接到一个传动臂的一端。通过沿着半径轴前后移动这个传动臂,驱动器可以将读/写头定位在盘面上的任何磁道上。这样的机械运动称为寻道(seek
)。一旦读/写头定位到了期望的磁道上,那么当磁道上的每个位通过它的下面时,读/写头可以感知这个位的值(读该位),也可以修改这个位的值(写该位)。有多个盘片的磁盘针对每个盘面都有一个独立的读/写头。读/写头垂直排列,一致行动。在任何时刻,所有的读/写头都位于同一个柱面上。
![一个盘片的视图](https://img2020.cnblogs.com/blog/1846664/202004/1846664-20200421142429951-1890451299.png)
![多个盘片的视图](https://img2020.cnblogs.com/blog/1846664/202004/1846664-20200421142455586-1619424675.png)
磁盘以扇区大小的块来读写数据。对扇区的访问时间(access time
)有三个主要的部分:寻道时间(seek time
)、旋转时间(rotational latency
)、传送时间(transfer time
):
-
寻道时间:为了读取某个目标扇区的内容,传动臂首先将读/写头定位到包含目标扇区的磁道上。移动传动臂的时间称为寻道时间。寻道时间 \(T_{seek}\) 依赖于读/写头以前的位置和传动臂在盘面上移动的速度。现代驱动器中平均寻道时间 \(T_{avg\,seek}\) 是通过几千次对随机扇区的寻道求平均值来测量的,通常为 3 ~ 9 ms。一次寻道的最大时间 \(T_{max\,seek}\) 可以高达 20 ms。
-
旋转时间:一旦读/写头定位到了期望的磁道,驱动器等待目标扇区的第一个位旋转到读/写头下。这个步骤的性能依赖于当读/写头到达目标扇区时盘面的位置和磁盘的旋转速度。在最坏情况下,读/写头刚刚错过了目标扇区,必须等待磁盘转一整圈。因此,最大旋转延迟,(以秒为单位)是
- 传送时间:当目标扇区的第一个位位于读/写头下时,驱动器就可以开始读或者写该扇区的内容了。一个扇区的传送时间依赖于旋转速度和每条磁道的扇区数目。因此,我们可以粗略地估计一个扇区以秒为单位的平均传送时间如下:
我们可以估计访问一个磁盘扇区内容的平均时间为平均寻道时间、平均旋转延迟和平均传送时间之和。
例如,考虑一个有如下参数的磁盘:
参数 | 值 |
---|---|
旋转速率 | 7200 RPM |
\(T_{avg\,seek}\) | 9 ms |
每条磁道的平均扇区数 | 400 |
对于这个磁盘,平均旋转延迟(以 ms 为单位)是
平均传送时间是
整个估计的访问时间是
- 访问一个磁盘扇区中 512 个字节的时间主要是寻道时间和旋转延迟。访问扇区中的第一个字节用了很长时间,但是访问剩下的字节几乎不用时间。
- 因为寻道时间和旋转延迟大致是相等的,所以将寻道时间乘 2 是估计磁盘访问时间的简单而合理的方法。
Typical HDD figures
HDD spindle speed [rpm] | Average rotational latency [ms] |
---|---|
4,200 | 7.14 |
4,800 | 6.25 |
5,400 | 5.55 |
7,200 | 4.16 |
10,000 | 3 |
15,000 | 2 |
参考
王达 内存与缓存
Computer Systems: A Programmer's Perspective, 3/E (CS:APP3e) Original Line Drawings and Graphs
Wikipedia Hard disk drive