跳转到内容

x86 汇编/直接内存访问

来自维基教科书,开放的书籍,开放的世界

直接内存访问

[编辑 | 编辑源代码]

直接内存访问芯片 (DMA) 是原始 IBM PC 的重要组成部分,并且已成为现代计算机系统不可或缺的组件。 DMA 允许其他计算机组件直接访问主内存,而无需处理器管理数据流。 这一点很重要,因为在许多系统中,处理器是数据流瓶颈,如果让 MPU 处理每次内存事务,将会大大降低系统速度。

原始 DMA 芯片被称为 8237-A 芯片,尽管现代变体可能是许多不同型号中的一种。

DMA 操作

[编辑 | 编辑源代码]

DMA 芯片可用于在两个内存位置之间移动大型数据块,或用于将数据块从外设移动到内存。 例如,DMA 通常用于在 PCI 总线和扩展卡之间移动数据,它还用于管理主内存 (RAM) 和辅助内存 (HDD) 之间的数据传输。 当 DMA 运行时,它控制着内存总线,MPU 无论出于何种原因都无法访问总线。 MPU 可以继续处理存储在其缓存中的指令,但一旦缓存为空,或者遇到内存访问指令,MPU 必须等待 DMA 操作完成。 DMA 可以比 MPU 更快地管理内存操作,因此等待时间通常不是速度问题。

DMA 通道

[编辑 | 编辑源代码]

DMA 芯片最多有 8 个 DMA 通道,其中一个通道可用于级联第二个 DMA 芯片,总共提供 14 个可用通道。 每个通道都可以被编程为从特定源读取,写入特定源等。 因此,DMA 有许多专用的 I/O 地址可用,用于写入必要的控制寄存器。 DMA 使用地址 0x0000-0x000F 用于标准控制寄存器,以及 0x0080-0x0083 用于页寄存器。

华夏公益教科书