关于假脱机技术的问题

假脱机是由进程控制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

相关推荐

大佬们,在大厂实习的都是几百一天???
爱睡觉的冰箱哥:实习工资这个不都是公开的吗,a不了,字节400,快手350,有些有房补餐补这样
点赞 评论 收藏
分享
05-30 12:03
山西大学 C++
offer来了我跪着接:不是骗子,等到测评那一步就知道为啥这么高工资了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务