DAM(Direct Memory Access)

本文详细解析了DMA(直接内存访问)如何通过减少CPU中断,以及IOP(输入输出处理机)如何独立管理IO,从而大幅提高CPU处理能力,优化系统性能。

cpu 和 IO 之间的协作关系

占用-->中断-->异步(IOP专门做IO操作)

以往的io操作都需要经过cpu之手,在以前,cpu要一直轮询io系统,io操作是否已经结束,在这期间,cpu不能做其他的事情,效率极低,后来中断机制的出现,使得cpu的效率大大提高,主要的方法有轮询和菊花链。但是他们都需要cpu通过执行程序来实现。直到DMA出现。
DMA的出现使得CPU从大量的中断负载中得到释放,CPU的效率显著提高。DMA 全称为 Direct Memory Access ,中文译为直接内存访问,通过io设备读取的数据不必再由操守,而是直接把读取到的数据存入内存,然后再由内存传送数据到寄存器,再由cpu处理,整个过程,大概为:

io设备向DMAC发起DMA传输请求
DMAC 接到请求后,向cpu发出请求,并且将其请求信号加到cpu的HOLD保持请求输入端上
cpu接到请求后对DMAC作出回应,将其响应信号加到DMAC的HLDA保持响应输出端上,同时向DMAC预置主存首地址以及交换数据个数和读写命令,并且放弃对系统总线的控制权,此时,DMAC获得系统总线的控制权
DMAC将接到的响应后,将响应转交给io设备,开始数据的传输。
数据传输完毕后,DMAC将HOLD信号设置为无效并加到cpu上
cpu接到HOLD信号判定为无效,就知道数据传输完毕,同时把HLDA信号设置为无效加到DMAC上,并且重新获得系统总线的控制权
总之,在系统进行DMA数据交换的过程中,cpu都不得获得系统总线的控制权,在此过程当中,cpu只需开始和结束的对DMAC进行响应,其余的时间,cpu可以处理其他的事情,比如处理中断之前的作业。

iop的出现,通道结构又被称作输入输出处理机为iop,iop独立于cpu,是一个专门管理io的处理机。它把cpu从众多的io操作中释放出来,减少了cpu的负担,与此同时,系统的io操作都由iop来负责, 并且一个iop能够控制许多的设备进行io操作,还能实现iop的复用,无疑减少了中断次数,提高了cpu的效率。

### DAM、PCACHE 和 DCACHE 的缓存机制与实现原理 #### 1. **DAM (Direct Access Memory)** DAM 是一种用于快速数据传输的技术,通常被设计用来支持处理器与其他外设之间的高效通信。它允许外部设备直接访问内存而无需 CPU 干预,从而提高系统的整体性能[^3]。 具体来说,DAM 提供了一种硬件级别的通道来加速数据流的传递。这种技术可以减少软件层面对数据移动的需求,使得复杂的操作可以直接通过 DMA 控制器完成。DMA 请求可以通过优先级调度算法进行管理,确保高带宽需求的任务能够获得足够的资源分配。 ```python # 假设我们有一个简单的 DMA 调度程序 def dma_transfer(source, destination, size): """ Simulates a basic DMA transfer between two memory regions. :param source: Source address of the data block to be transferred :param destination: Destination address where the data will be written :param size: Size of the data block in bytes """ for i in range(size): # Directly copy byte by byte without involving CPU cycles destination[i] = source[i] # Example usage source_buffer = bytearray([i for i in range(256)]) destination_buffer = bytearray(256) dma_transfer(source_buffer, destination_buffer, len(source_buffer)) print(destination_buffer[:10]) # Output first 10 elements as verification ``` --- #### 2. **PCACHE (Program Cache)** PCACHE 主要负责存储指令代码以便于重复执行时能更快加载到 CPU 中。它的主要目标是缩短取指时间并优化流水线效率。 当一个新指令首次被执行时,该指令会被读入 PCACHE;如果后续再次遇到相同的指令,则可以从高速缓冲区立即取出而不是重新从主存中检索。这不仅减少了延迟还降低了功耗开销。 - **特点**: - 使用方式类似于 LRU(Least Recently Used)替换策略。 - 支持多路组相联结构以提升命中率。 - 对 Flash 或 ROM 进行映射时可能涉及特定地址转换逻辑。 --- #### 3. **DCACHE (Data Cache)** 相比之下,DCACHE 更侧重于临时保存最近使用的变量或计算结果等实际运行期间产生的动态数值型数据。由于其频繁更新特性决定了需要更灵活的设计方案来应对不同场景下的请求模式变化。 例如,在某些架构下可能会区分 Store Buffer 来暂存待写回的数据项直到条件成熟后再统一提交给底层物理介质;而对于只读属性较强的查询类工作负载则更多依赖 Forwarding 技术提前预测潜在冲突位置进而规避不必要的等待现象发生。 - **区别对比**: | 特性 | PCACHE | DCACHE | |--------------|----------------------------------|--------------------------------| | 存储对象 | 指令 | 数据 | | 替换频率 | 较低 | 高 | | 访问粒度 | 字节/半字 | 单词或多单词 | --- ### 总结说明 综上所述,无论是 DAM 所代表的大规模批量搬运能力还是 PCACHE 及 DCACHE 各自针对不同类型信息所构建起来的小范围局部优化框架都体现了现代嵌入式系统对于速度追求背后复杂精妙平衡艺术所在之处[^1][^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值