使用DMA控制器8257/8237直接访问内存

假设连接到输入输出端口的任何设备想要将数据传输到存储器,首先它将发送输入输出端口地址和控制信号,输入输出读取到输入输出端口,然后它将发送存储器地址和存储器写入信号到必须传输数据的存储器。在正常的输入输出技术中,处理器忙于检查下一个输入输出操作是否完成了任何输入输出操作,因此这种技术很慢。

null

通过实现直接内存访问(DMA)技术,避免了输入输出端口和内存之间或两个内存之间数据传输缓慢的问题。这是更快的,因为微处理器/计算机被绕过,地址总线和数据总线的控制权交给DMA控制器。

  • 保持–保持信号
  • HLDA–保持确认
  • DREQ–DMA请求
  • DACK–DMA确认

图片[1]-使用DMA控制器8257/8237直接访问内存-yiteyi-C++库

假设在输入输出端口连接的软盘驱动器想要将数据传输到内存,则执行以下步骤:

  • 第一步: 首先,软盘驱动器将向DMAC发送DMA请求(DREQ),这意味着软盘驱动器需要其DMA服务。

  • 第二步: 现在,DMAC将向CPU发送保持信号。

  • 第三步: 在接受来自DMAC的DMA服务请求后,CPU将向DMAC发送保持确认(HLDA),这意味着微处理器已释放对地址总线的控制,数据总线连接到DMAC,并且在DMA服务期间绕过微处理器/计算机。
  • 第4步: 现在,DMAC将向连接在输入输出端口的软盘驱动器发送一个确认(DACL)。这意味着DMAC告诉软盘驱动器准备好DMA服务。
  • 第五步: 现在,在输入输出读取和存储器写入信号的帮助下,数据从软驱传输到存储器。

DMAC的模式:

1.单模式- 在这种情况下,只使用一个通道,这意味着只有一个DMAC连接到总线系统。

图片[2]-使用DMA控制器8257/8237直接访问内存-yiteyi-C++库

2.级联模式- 在使用多个通道的情况下,我们可以进一步级联更多的DMAC。

图片[3]-使用DMA控制器8257/8237直接访问内存-yiteyi-C++库

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享