linux-IO控制器内存_内核内存_用户内存的拷贝

项目介绍一下从产生IO数据到程序员手中的复制过程

前景声明:

  • 因为硬盘读写是物理机械动作(寻找扇区,磁盘转圈),不像cpu是电子动作,所以要围绕减少物理动作去优化io。

  • 刷盘: 就是主动将pageCache中的数据写到硬件控制器中。


非异步IO. 即阻塞io或sendfile零拷贝都属于非异步IO

数据传递过程如下:

  1. 硬件控制器(是硬件芯片上的程序). 产生数据(比如网卡,磁盘)

  2. pageCache,它是内核空间的内存段(承上启下硬件数据与用户空间数据). (内核内存指 地址小于n的内存)

  3. 用户空间. 程序员们写的业务代码用的内存段 (内存地址大于n的内存)

  • 读会调用硬件控制器的api,把数据读到pageCache中,内核把pageCache中读到用户空间供开发者使用

  • 写会把数据拷贝到pageCache中,直接返回,然后内核异步其将pageCache中的内存调用硬件控制器的api。

  • 硬件控制器内部有时钟,独立的计算单元。专用于数据复制,可以与cpu并行。

  • pageCache本质是lru队列,

  • 非异步io的缺点

处理大文件会把pageCache瞬间打满,导致其他程序用不上这块缓存。

而且非异步io的零拷贝不能对数据加工处理,只能发送文件。


异步IO. mysql等数据库系统用的就是异步io加b+树

数据传递过程如下:

1.硬件控制器(是硬件芯片上的程序)

2.直接内存(绕过了pageCache,不会复制到pageCache里)

3.用户空间(回调方法句柄,程序员们写的接受IO数据的回调方法)

异步io不用pagecache,它只能用直接内存(内核内存),而且硬件控制器复制完了后会主动告诉你。

硬件控制器会往传参进来的直接内存里读写数据,读或写完数据后产生中断事件,回调内核的方法句柄,然后内核方法通知用户态的方法句柄。

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

备案信息公示
京ICP备18003381号
京ICP备18003381号-1