从理论到实践:零拷贝技术的全面解读

目录

一、I/O 工作方式

        1.1 DMA

二、零拷贝

        2.1 传统数据拷贝

        2.2 Java 应用数据处理

        2.3. 零拷贝流程

三、零拷贝案例

四、总结


一、I/O 工作方式

        磁盘可以说是计算机系统中最慢的硬件之一,读写速度相差内存10倍以上,所以针对磁盘的优化技术非常多。下面以文件传输为切入线分析 I/O 的工作方式。

        在没有 DMA 技术前,I/O 是这样工作的,如下图:

  1. 用户发起 read 调用,CPU 将对应的指令给磁盘控制器,然后返回;
  2. 磁盘控制器收到指令后,开始准备数据,会把数据放到磁盘控制器的内存缓冲区中,然后产生一个中断;
  3. CPU 收到中断信号后,停下手头的工作,接着把磁盘控制器的数据一次一个字节的读到自己的寄存器中,然后再把寄存器里的数据写到内存中,而在数据传输期间,CPU 无法执行其它任务。

        可以看到,整个传输过程,都需要 CPU 亲自搬运数据,,而且这个过程是阻塞的,CPU 不能做其他的工作,简单的搬运几个字符问题不大,如果是搬运大量的数据,肯定忙不过来。于是 DMA 技术诞生了。

        1.1 DMA

        DMA(Direct Memory Access,直接内存访问)技术是一种在计算机系统中用于高效数据传输的技术,它允许数据在设备和内存之间直接传输,而无需 CPU 的干预。DMA 技术显著提高了数据传输的速度和系统的整体性能,因为它减少了 CPU 的负担,使得 CPU 可以专注于其他更重要的任务。

        工作流程图如下:

  1. 用户进程调用 read 方法,向操作系统发出 I/O 请求,请求读取数据到自己的内存中,进程进入阻塞状态;
  2. 操作系统收到请求后,进一步将 I/O 请求发送到 DMA,然后让 CPU 执行其他任务;
  3. DMA 将请求发送到磁盘;
  4. 磁盘收到请求后,把数据从磁盘读取到缓冲区中,当磁盘控制器的缓冲区读满后,向 DMA 发起中断信号,告知自己缓冲区已满;DMA 收到磁盘的信号,将磁盘控制器缓冲区中的数据拷贝到内核缓冲区,此时不占用 CPU;
  5. 当 DMA 读了足够多的数据,就会发出中断信号给 CPU;
  6. CPU 收到 DMA 信号,知道数据准备好了,于是将数据从内核拷贝到内核空间,系统调用返回。

        可以看到,整个数据传输过程,CPU不在参与数据搬运的工作,而是全程由DMA完成,但是CPU在这个过程中也是必不可少的,因为传输什么数据,从哪里传输到哪里,都需要CPU来告诉DMA控制器。

二、零拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超越不平凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值