关于假脱机技术的问题

假脱机是由进程控制I/O设备把数据送入内存中的输入缓冲区然后放到输入井中。网上的答案都是内存中开辟的缓冲区是为了解决磁盘和cpu速度的矛盾,我就不理解了,直接和I/O交互的是内存中的缓冲区,我感觉不管是I/O设备和内存交互还是和外存交互速度都比较慢,既然都是要放入输入井的,为什么要多此一举经过中间的内存缓冲区呢?求大神解答!
全部评论
谈一下个人理解: 数据一定是先会从磁盘copy到内存的,这点毋庸置疑。 首先,因为磁盘的速度远低于IO的速度,数据不可能直接从磁盘走到IO,那样IO会一直等待非常缓慢的磁盘。而且内存中有页,每次从磁盘中copy很多的数据到页中,只有缺页的时候才会从缓慢的磁盘中去取数据。 再有,磁盘数据到内存走的是DMA芯片,这个芯片是独立于CPU之外的专门负责将外部数据加载到内存的芯片,所以磁盘数据到内存的过程并不占用CPU,CPU只用给DMA芯片一个指令就可以去干其他事情了。但是如果数据要直接从磁盘到IO,不走内存,那就无法经过DMA(因为DMA是面向内存的),这时候只能由CPU去介入copy数据,将磁盘数据扔进IO,而CPU搬数据远没有DMA高效,再有磁盘又比乌龟还慢,效率可想而知有多么低。 所以数据一定会先由DMA搬入内存,再由CPU介入从内存copy到IO。 其实真正可以优化的地方是内存到IO的过程,内存也分为内核区和用户区,不同的策略会有非常大的效率影响,可以看一下linux的mmap和sendFile的设计思想,就是针对内存到IO之间的优化。
点赞 回复 分享
发布于 2019-06-29 18:46

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务