在非dma场景中,在读取磁盘期间,存储设备/磁盘内容是否先进入CPU寄存器,然后进入主存?



我正在学习计算机组织,但对以下概念感到困惑。在非dma场景中,所有磁盘读取都按照以下顺序进入主存:

磁盘存储面->磁盘寄存器-> CPU寄存器->主存

与写操作类似,顺序为:

主存-> CPU寄存器->磁盘寄存器->磁盘存储面

(我知道在DMA场景中,CPU只启动传输,之后磁盘的内容直接传输到主存)。

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

PS:请原谅我的初级术语,但我希望我传达了我想问的问题。

是的,你所描述的是过去用可编程i/O代替DMA的糟糕情况。

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

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


re:内存映射文件:与数据如何从磁盘进入页面缓存无关(反之亦然)。mmap()仅仅意味着你的进程的地址空间包含了OS用来缓存文件内容的相同页面的共享映射。

最新更新