|「计算机组成原理」:现代存储器的结构( 四 )


  • 寻道时间:为了读取到目标扇区 , 会先控制传动臂将读/写头移动到该扇区对应的磁道上 , 该时间称为寻道时间 。 影响因素:依赖于读/写头之前的位置 , 以及传动臂在盘面上移动的速度 。 通常为3~9ms , 最大时间可为20ms 。 - 旋转时间:当读/写头处于目标磁道时 , 需要等待目标扇区的第一个位旋转到读/写头下 。 影响因素:目标扇区之前的位置 , 以及磁盘的旋转速度 。 T_{max , rotation} = frac{1}{RPM} cdot frac{60s}{1min}, 平均旋转时间为一半
  • 传送时间:当读/写头处于目标扇区的第一位时 , 就可以进行传送了影响因素:磁盘旋转速率 , 以及每条磁道的扇区数$$ T_{max , rotation} = frac{1}{RPM} cdot frac{1}{平均每条磁道的扇区数} times frac{60s}{1min} $$
可以发现:寻道时间和旋转时间是主要影响部分 , 并且两者大致相等 , 通常可以寻道时间乘2来估计访问时间 。
由于磁盘构造的复杂性 , 现代磁盘将其抽象为B个扇区大小的逻辑块序列 , 编号为0,1,...,B-1 , 通过磁盘中的磁盘控制器来维护逻辑块号和实际扇区之间的映射关系 。 为此需要通过磁盘控制器对磁盘进行格式化:
  • 会用表示扇区的信息填写在扇区之间的间隙
  • 表示出表面有故障的柱面 , 并且不进行使用
  • 在每个区会预留一组柱面作为备用 , 没有映射为逻辑块 。 当损坏时 , 磁盘控制器会将数据复制到备用柱面 , 则磁盘就可以继续正常工作了 。
当从磁盘读取数据到主存 , 需要以下步骤:
  1. 操作系统发送一个命令到磁盘控制器 , 读取某个逻辑块号
  2. 磁盘控制器上的固件执行快速表查找 , 得到该逻辑块号翻译成一个三元组(盘面 , 磁道 , 扇区)
  3. 磁盘控制器解释三元组信息 , 将读/写头移动到对应的扇区
  4. 将读取到的信息放到磁盘控制器的缓冲区中
  5. 将缓冲区中的数据保存到主存中 。

|「计算机组成原理」:现代存储器的结构
本文插图

如上图所示是一个总线结构实例 。 对于像图形卡、鼠标、键盘、监视器这类输入/输出设备 , 都是通过I/O总线连接到CPU和主存的 , 比如Intel的外围设备互联(Peripheral Component Interconnect , PCI)总线 , 在PCI模型中 , 系统中所有的设备共享总线 , 一个时刻只能有一台设备访问这些线路 , 目前PCI总线已被PCEe总线取代了 。 虽然I/O总线比系统总线和内存总线慢 , 但是能容纳种类繁多的第三方I/O设备 。
  • 通用串行总线(Universal Serial Bus , USB)控制器:USB总线是一个广泛使用的标准 , 连接许多外围I/O设备 , 而USB控制器作为连接到USB总线的设备的中转站 。
  • 图形卡(或适配器):包含硬件和软件逻辑 , 负责CPU在显示器上画像素 。
  • 主机总线适配器:用于将一个或多个磁盘连接到I/O总线 , 使用主机总线接口定义的通信协议 , 磁盘接口包括SCSI和SATA , 通常SCSI磁盘比SATA磁盘速度更快更昂贵 , 且SCSI主机总线适配器可以支持多个磁盘驱动器 , 而SATA只能支持一个 。
  • 网络适配器:可以通过将适配器插入到主板上空的插槽 , 从而连接到I/O总线 。
注意:系统总线和内存总线是与CPU相关的 , 而PCI总线这样的I/O总线被设计成与底层CPU无关 。
CPU会在地址空间中保留一块地址用于与I/O设备通信 , 每个地址称为I/O端口(I/O Port) , 而连接到总线的设备会被映射到一个或多个端口 , 则处理器可通过端口地址来访问该I/O设备 , 该技术称为内存映射I/O(Memory-mapped I/O) 。
假设磁盘控制器映射到端口0xa0 , 探讨磁盘的读取过程: