当发生磁盘读取或磁盘写入时,数据会去哪里?

当发生磁盘读取或磁盘写入时,数据会去哪里?

我知道有一种磁盘控制器包含一个缓冲区,但我想知道 CPU 是否直接从这个缓冲区读取,或者数据是否必须先进入内存中的特定位置,然后允许 CPU 读取?

还有人知道缓冲区叫什么吗?DMA 与这一切有何关系?

答案1

对于磁盘读取,数据流基本上是:

  • 当读/写组件到达请求的柱面后,选择请求的读/写头。
  • 在每个扇区,读取扇区 ID。如果读取的扇区号与请求的扇区号匹配,则读取扇区数据。
  • 扇区数据被读取为串行位流,并转换为字节。
  • 扇区的字节存储在扇区缓冲区(通常是控制器中的 SRAM);这扇区缓冲区与“磁盘缓存”不同。
  • 一旦读取了整个扇区,就会使用 ECC 来验证数据,甚至可能进行更正。
  • 一旦验证通过,扇区数据将从控制器传输到主机 PC。注意:此扇区缓冲区这一点并不为人所知,而且有种普遍的错误信息,认为主机(例如 ATA)接口的传输速度受 R/W 头的比特率约束或限制。这完全是错误的,因为这两个数据传输是独立且连续的操作,而不是并发的。
  • 由于 PC 通过 ATA 接口从磁盘控制器接收数据,因此 PC 可以使用程控输入/输出(CPU 重复读取 ATA 端口的数据寄存器并将值复制到目标内存)或直接接入(DMA 控制器设置为将 N 个字节从 ATA 端口的数据寄存器复制到内存缓冲区,无需进一步的 CPU 干预)。
  • 接收数据的 PC 内存“缓冲区”可能是应用程序的缓冲区(使用块 I/O 系统调用),或者可能是文件系统控制下的内部系统缓冲区,或者如果数据来自交换区域(或页面文件),甚至是程序或数据内存。

写入磁盘类似,只是数据从 PC 传输到磁盘控制器,计算 ECC,找到请求的扇区,然后将数据从扇区缓冲区写入盘片。

额外加分:

阅读“分散-聚集“转移,使用DMA 链接以及内存地址和缓冲区长度的分散-集中列表。“分散-集中”传输允许使用非连续的内存缓冲区来聚集磁盘 I/O 请求,而不是使用一个大的连续内存缓冲区。

答案2

它进入内核为磁盘驱动程序分配的特定内存区域。我认为它没有具体命名。此内存区域通常配置为环形缓冲区根据操作系统的不同,该内存可能会被再次复制到用户空间供应用程序使用。

直接接入是“直接内存访问”,这意味着磁盘驱动器的控制器可以直接写入 RAM,而无需 CPU 反复询问是否有更多数据可用(称为轮询 - 事情用过的完成所有操作后,控制器将中断 CPU,让其知道数据现在可用。

如果你对更低的级别感到好奇,司机会让读写控制呼叫。

相关内容