磁盘能比RAM存储更大的信息,但是读取速度上比DRAM慢了10万倍,比SRAM慢了100万倍。
1. 磁盘构造
-
磁盘是由盘片(platter)构成
-
盘片中央有一个可以旋转的主轴,它使得盘片以固定的旋转速率旋转
-
每个盘片有两面或者称为表面,表面覆盖着磁性记录材料。
-
一个磁盘表面由一组磁道组成
-
一个磁道由一组扇区组成
-
每个扇区包含相等的数据位(通常512字节)
-
扇区之间由一些间隙(gap)分隔开,这些间隙中不存储数据位。间隙存储用来标识扇区的格式化位
-
磁盘是由一个或多个叠放在一起的盘片组成的,整个装置通常被称为磁盘驱动器(disk drive), 简称为磁盘
-
柱面指多个盘片驱动器的构造, 这里, 柱面是所有盘片表面上到主轴中心的距离相等的磁道的集合。例如, 如果一个驱动器有三个盘片和六个面, 每个表面上的磁道的编号都是一致的, 那么柱面k就是6个磁道k的集合
2.磁盘容量
三个因素:
- 记录密度(recordi ng dens ity)(位/英寸):磁道一英寸的段中可以放入的位数。
- 磁道密度(track dens ity)(道/英寸):从盘片中心出发半径上一英寸的段内可以有的磁道数。
- 面密度(areal dens ity)(位/平方英寸):记录密度与磁道密度的乘积。
最初:将每个磁道分为数目相同的扇区,扇区的数目是由最靠内的磁道能记录的扇区数决定的。为了保持每个磁道有固定的扇区数,越往外的磁道扇区隔得越开。随着面密度的提高,扇区之间的间隙(那里没有存储数据位)变得不可接受地大。
后来:柱面的集合被分割成不相交的子集合,称为记录区(recording zone) 。每个区包含一组连续的柱面。一个区中的每个柱面中的每条磁道都有相同数最的扇区,这个扇区的数量是由该区中最里面的磁道所能包含的扇区数确定的。
磁
盘
容
量
公
式
:
每
个
扇
区
的
字
节
数
∗
每
个
磁
道
的
平
均
扇
区
数
∗
每
个
盘
面
的
磁
道
数
∗
2
个
盘
面
∗
盘
片
数
量
磁盘容量公式:每个扇区的字节数 * 每个磁道的平均扇区数 * 每个盘面的磁道数 * 2个盘面 * 盘片数量
磁盘容量公式:每个扇区的字节数∗每个磁道的平均扇区数∗每个盘面的磁道数∗2个盘面∗盘片数量
3.磁盘操作
1.操作流程
磁盘用读/写头(read/write head)来读写存储在磁性表面的位, 而读写头连接到一个传动臂(actuator arm)一端, 如图所示。通过沿着半径轴前后移动这个传动臂, 驱动器可以将读/写头定位在盘面上的任何磁道上。这样的机械运动称为寻道(seek )。一旦读/写头定位到了期望的磁道上, 那么当磁道上的每个位通过它的下面时, 读/写头可以感知到这个位的值(读该位), 也可以修改这个位的值(写该位)。有多个盘片的磁盘针对每个盘面都有一个独立的读/写头, 如图所示。读/写头垂直排列, 一致行动。在任何时刻, 所有的读/写头都位于同一个柱面上。
磁盘总是密封的,如果进入灰尘会造成读写头冲撞,导致磁盘无法使用。
2.访问时间
磁盘以扇区大小的块来读写数据。对扇区的访问时间有三个主要的部分:寻道时间、旋转时间和传送时间。
1.寻道时间
是指读写头移动到目标磁道上的时间。
2.旋转时间
是指读写头移动到期望磁道之后,驱动器等待目标扇区的第一个位旋转到读写头下。
3.传送时间
当目标扇区的第一个位位于读/写头下时,驱动器就可以开始读或者写该扇区的内容了。
计算示例
(RPM是指转每秒)
可以看出,访问扇区的第一个字节废掉了大部分的时间,而读取剩下的扇区,并没有耗费很长时间。
4.逻辑磁盘块
为了对操作系统隐藏这样的复杂性,现代磁盘将它们的构造呈现为一个简单的视图,一个B个扇区大小的逻辑块的序列,编号为0, 1, …, B-1。磁盘封装中有一个小的硬件/固件设备,称为磁盘控制器,维护着逻辑块号和实际(物理)磁盘扇区之间的映射关系。当操作系统想要执行一个I/O操作时,例如读一个磁盘扇区的数据到主存,操作系统会发送一个命令到磁盘控制器,让它读某个逻辑块号。控制器上的固件执行一个快速表查找,将一个逻辑块号翻译成一个(盘面,磁道,扇区)的三元组,这个三元组唯一地标识了对应的物理扇区。控制器上的硬件会解释这个三元组,将读/写头移动到适当的柱面,等待扇区移动到读/写头下,将读/写头感知到的位放到控制器上的一个小缓冲区中,然后将它们复制到主存中。
为什么磁盘的最大使用量比磁盘容量要小
磁盘控制器必须对磁盘进行格式化,然后才能在该磁盘上存储数据。格式化包括用标识扇区的信息填写扇区之间的间隙,标识出表面有故障的柱面并且不使用它们,以及在每个区中预留出一组柱面作为各用,如果区中一个或多个柱面在磁盘使用过程中坏掉
了,就可以使用这些备用的柱面。因为存在着这些备用的柱面,所以磁盘制造商所说的格式化容量比最大容量要小。
5. 连接I/O设备
一个典型的I/O总线结构如下如所示,它连接了CPU、主存和I/O设备。
I/O总线比系统总线和内存总线慢,可以繁多的第三方IO设备,有以下几种类型:
- 通用串行总线(Universal Serial Bus, USB)控制器是一个连接到USB总线的设备的中转机构。
- 图形卡(或适配器)包含硬件和软件逻辑,它们负责代表CPU在显示器上画像素。
- 主机总线适配器将一个或多个磁盘连接到I/O总线,使用的是一个特别的主机总线接口定义的通信协议。
SCSI和SATA是两个比较常用的磁盘接口
SCSI 磁盘通常比SATA 驱动器更快但是也更贵。
SCSI 主机总线适配器(通常称为SCSI 控制器)可以支持多个磁盘驱动器。SATA 适配器只能支持一个驱动器。
- 其他的设备,例如网络适配器,可以通过将适配器插入到主板上空的扩展槽中
注意
:这里I/O总线只是一种简单抽象。
6.访问磁盘
CPU使用一种称为内存映射I/O的技术来向I/O设备发射命令。
在使用内存映射I/O的系统中, 地址空间中有一块地址是为与I/O设备通信保留的。每个这样的地址称为一个I/O端口。当一个设备连接到总线时,它与一个或多个端口相关联(或它被映射到一个或多个端口)。
下面将这个流程简单描述一下:
1.CPU发起磁盘读
假设磁盘控制器映射到端口0xa0。随后,CPU可能通过执行三个对地址0xa0的存储指令, 发起磁盘读
- 第一条指令是发送一个命令字, 告诉磁盘发起一个读, 同时还发送了其他的参数, 例如当读完成时, 是否中断CPU
- 第二条指令指明应该读的逻辑块号
- 第三条指令指明应该存储磁盘扇区内容的主存地址。
2.DMA传输
CPU发起指令之后,就去做别的事情去了。在磁盘控制器收到来自CPU的读命令之后, 它将逻辑块号翻译成一个扇区地址, 读
该扇区的内容, 然后将这些内容直接传送到主存, 不需要CPU的干涉。
设备可以自己执行读或者写总线事务而不需要CPU干涉的过程, 称为直接内存访问(DirectMemory Access, DMA)。这种数据传送称为DMA 传送CDMA transfer)。
3. 中断通知
在DMA 传送完成,磁盘扇区的内容被安全地存储在主存中以后,磁盘控制器通过给CPU 发送一个中断信号来通知CPU。基本思想是中断会发信号到CPU 芯片的一个外部引脚上。这会导致CPU 暂停它当前正在做的工作,跳转到一个操作系统例程。这个程序会记录下I/O已经完成,然后将控制返回到CPU 被中断的地方。