『阿男的工程世界』*让我们简单聊一下IO(3)*
接下来阿男给大家讲一讲DMA
,DMA
全称Direct Memory Access
,这个是做什么用的呢?
早期的计算机设计下,硬件如果要使用内存里面的数据,CPU要负责这些内存的操作:把内存的数据传给硬件设备,把硬件设备的数据写入内存。这些操作要占用CPU的时钟周期,因为是CPU执行指令。
最要命是,有的硬件速度很慢,这样的话CPU执行内存操作指令的时候,就需要等着这个硬件设备。要知道CPU的时间是非常宝贵的,因为CPU还要处理其他硬件设备发过来的信号,也就是中断请求
,等着硬件和内存的交互就太慢了。
为了优化这块的性能,就产生了Direct Memory Access
的概念,就是让硬件可以直接访问内存。具体是这样的:添加一个硬件,叫做DMA Controller
,就是一个芯片,然后硬件有对内存访问的需要时,就发指令给这个Controller
,需要传输的数据信息也发给Controller
,然后就不管了,CPU去做自己的事情,由Controller
负责具体的数据传输。等数据传完以后,Controller
给CPU发中断信号,告诉CPU,数据已经处理完成了,这样CPU就可以做接下来的事情。
我们看到了DMA
是如何协调这里的硬件速度不一致的。阿男上面给大家说的这个架构,叫做ISA
,早期的ISA
架构传输速度并不是很快,而且需要专门的DMA Controller
芯片。
现在我们的计算机主流是PCI
架构,这个架构下,没有了DMA Controller
,取而代之的叫做Memory Bus
,也就是内存总线
。一般是直接和北桥芯片
连接,而南桥芯片
要做的是跟CPU要Memory Bus
的访问权,实现DMA
。北桥芯片
现在一般做进CPU内部,南桥芯片
一般还是独立的,负责和"慢速"的IO设备相连,比如USB控制器啥的。
所以说DMA
就是一种让CPU无需过多介入,让硬件直接访问内存,但是是在CPU管控的条件下,访问内存。数据处理完后,CPU再介入后续的工作。
为什么要强调CPU管控?因为操作系统的安全性,依赖于操作系统可以控制程序和硬件能访问内存的什么部分什么内容,而操作系统的实现依赖CPU的架构设计实现。