I/O操作为什么不需要cpu

简单回答就是:不是不需要是需要很少

IO所需要的CPU资源非常少。大部分工作是分派给DMA完成的。

先不谈传统的5大IO模型,先说说并发(Concurrence)。一个非常不严谨的解释就是同时做A和B两件事。先做一会儿进程A,然后上下文切换,再做一会儿B。过一会儿在切回来继续做A。因此给我们造成一个假象,我们同时在做A和B两件事。这就是著名的进程模型。

但是,如果计算机内部不止CPU一个部件在工作呢?如果A这件事CPU可以分派给其他部件帮它完成呢?情况是不是就完全不一样了?系统IO正好是这样一个完美的例子。

对于磁盘IO,真实发生的场景可能是这样的:

CPU说:硬盘兄帮我把我要看的小电影拷贝一份到主存,谢谢,亲。
硬盘说:好的!我考完了叫你。
CPU说:么么哒!那我打游戏去啦!

CPU打撸啊撸 (100纳秒过去了)

硬盘说:小C我考完了。
CPU说:电影我来啦!

所以,正因为这样派发任务,通讯,等待的过程,并发系统才彰显出它的意义。当然实际过程可能比这个复杂一万倍。比如CPU是不会直接和硬盘对话的,他们之间有个中间人,叫DMA(Direct Memory Access)芯片.

CPU计算文件地址 ==> 委派DMA读取文件 ==> DMA接管总线 ==> CPU的A进程阻塞,挂起 ==> CPU切换到B进程 ==> DMA读完文件后通知CPU(一个中断异常) ==> CPU切换回A进程操作文件

DMA控制器类似于一个小的CPU, 有自己的寄存器(记录主存地址和取到的字的count等).

CPU可以发起一个DMA请求, 传入读写操作类型, 相关I/O设备地址, 内存的起始地址, 要操作的字数.然后DMA就可以获取总线的控制权, 将一大块内存和外部I/O读入或写出.等操作完成后, 再通知CPU. 释放总线控制权.缺点是:系统总线也是一种资源, DMA操作期间, 当处理器需要访问总线时, 执行速度会变慢.但是总得来说, DMA是一种高效传输方式.

参考

I/O会一直占用CPU吗?
https://www.zhihu.com/question/27734728

为何IO操作不需要CPU?
https://www.zhihu.com/question/31259327/answer/147547667

猜你喜欢

转载自blog.csdn.net/weixin_37989267/article/details/111041650