DMA控制器的引入

话说cpu的主要工作是读取程序指令流来执行,指令主要包括两部分,一部分是运算,自己搞定,一部分是控制数据在设备之间的传输,这是通过与设备的设备管理器或者设备适配器交互来搞定的。无非也就是读写设备控制器的寄存器。

甚至于这种读写设备控制器的寄存器,也没有亲历亲为,只是把地址或者加上数据传到总线上,中间经过了一些列路由才到了设备控制器那里。这进一步减轻了cpu的复杂度。这样看来,cpu的工作并不繁琐啊,他的负担看起来已经够轻的了,还需要进一步减轻吗,或者还有减轻的可能吗?

答案是肯定的。还是回到我们在《cpu解读3:读写硬盘的指令》中。cpu想读取硬盘数据,而硬盘最小的数据单元是一个扇区,也就是512字节。而pio读取模式下,cpu与磁盘控制器打交道,每次只能从磁盘控制器里读取2个字节的数据,这样,就要循环执行这个指令,直到读取完整个扇区。

初一看,这个过程没什么问题。但是用户体验会很不好。因为读盘数据,数据在io总线上传输也很慢,cpu每次读2个字节的内容作一次传送,大部分时间其实是在等待,而这个时候cpu又不能干别的,只是机械的重复执行一条指令,这样很浪费cpu资源。

那有没有好的解决方案呢,还真有人想了个绝妙的解决方案。因为设备之间交互数据,本身数据就不需要进cpu。对他们的控制,无非是通知他们一个准备发数据,一个准备收数据,这种通知无非也就是往总线上收发信号就行,cpu完全可以把这个工作交给单独的第三方设备来完成。当然,这个设备就叫dma控制器。cpu先与dma控制器交互,告诉他监管哪两个设备之间交互数据,等他们交互完了,再通知cpu。 这样,程序想读取硬盘数据,就不需要使用insw与磁盘控制器一个字一个字的交互了,只需要告诉dma控制器,我想将硬盘哪几个扇区读到内存哪个位置就行了,而dma控制数据交互的时候,cpu可以干些别的工作。 这样cpu工作就大大减轻了,同时程序控制也方便多了。

所以,dma控制器想法的提出,肯定得到大家的一致认可,所以大家一起坐下来订一个dma规范,让各个设备来支持这种dma传输模式,包括我们ide接口规范里,肯定会加了一些dma方面的内容,自然我们的ide硬盘就可以用dma来读写数据了。这样的读取流程又多了一个环节,程序控制cpu, cpu控制dma控制器,dma控制器控制磁盘控制器,磁盘控制器再控制我们的ide硬盘。是不是有一点软件设计模式的味道呢?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值