在非 DMA 场景下,存储 device/disk 内容是否先进入 CPU 寄存器,然后在磁盘读取期间进入主内存?

In non-DMA scenario, does a storage device/disk content go to CPU registers first and then to main memory during a disk read?

我正在学习计算机组织,但正在为以下概念而苦苦挣扎。在非 DMA 场景下,所有磁盘读取是否按照以下顺序进入主内存:

Disk storage surface -> Disk registers -> CPU registers -> Main memory

与写入类似,序列是:

Main memory -> CPU registers -> Disk registers -> Disk storage surface

(我知道在DMA场景下,CPU只发起传输,之后磁盘内容直接传输到主存)。

如果是,在 DMA 出现之前,上述序列是否是一个严重的瓶颈,因为整体 CPU 寄存器的容量与主内存和存储磁盘相比要小得多?或者它是如此之快以至于人类用户在非 DMA 模式下不会注意到?

PS:请多多包涵我的粗略用语,但我希望我表达了我想问的问题。

是的,你所描述的是在过去糟糕的日子里发生的事情 programmed-I/O 而不是 DMA。

例如,IDE 磁盘控制器硬件过去不太标准化,因此 Linux 驱动程序默认编程为 I/O(即复制循环使用 x86 IN instructions,因为 ATA 早于内存映射 I/O 寄存器很常见)。为了获得不错的性能,您必须在启动脚本中手动启用 DMA。

但在此之前,通过手动启用 DMA 检查它不会导致锁定,或者 far 更糟糕的是导致数据损坏。


回复:内存映射文件:与数据如何从磁盘进入页面缓存(反之亦然)无关。 mmap() 只是意味着您进程的地址 space 包含 OS 用于缓存文件内容的相同页面的共享映射。