当前位置:首页 > 经验 >

零拷贝和非零拷贝有什么区别(零拷贝通俗理解)

来源:原点资讯(www.yd166.com)时间:2022-10-24 22:34:18作者:YD166手机阅读>>

为什么要有 DMA 技术?

在没有 DMA 技术前,I/O 的过程是这样的:

  • CPU 发出对应的指令给磁盘控制器,然后返回;

  • 磁盘控制器收到指令后,于是就开始准备数据,会把数据放入到磁盘控制器的内部缓冲区中,然后产生一个中断

  • CPU 收到中断信号后,停下手头的工作,接着把磁盘控制器的缓冲区的数据一次一个字节地读进自己的寄存器,然后再把寄存器里的数据写入到内存,而在数据传输的期间 CPU 是无法执行其他任务的。

为了方便你理解,我画了一副图:

零拷贝和非零拷贝有什么区别,零拷贝通俗理解(5)

可以看到,整个数据的传输过程,都要需要 CPU 亲自参与搬运数据的过程,而且这个过程,CPU 是不能做其他事情的。

简单的搬运几个字符数据那没问题,但是如果我们用千兆网卡或者硬盘传输大量数据的时候,都用 CPU 来搬运的话,肯定忙不过来。

计算机科学家们发现了事情的严重性后,于是就发明了 DMA 技术,也就是直接内存访问(Direct Memory Access) 技术。

什么是 DMA 技术?简单理解就是,在进行 I/O 设备和内存的数据传输的时候,数据搬运的工作全部交给 DMA 控制器,而 CPU 不再参与任何与数据搬运相关的事情,这样 CPU 就可以去处理别的事务。

那使用 DMA 控制器进行数据传输的过程究竟是什么样的呢?下面我们来具体看看。

零拷贝和非零拷贝有什么区别,零拷贝通俗理解(6)

具体过程:

  • 用户进程调用 read 方法,向操作系统发出 I/O 请求,请求读取数据到自己的内存缓冲区中,进程进入阻塞状态;

  • 操作系统收到请求后,进一步将 I/O 请求发送 DMA,然后让 CPU 执行其他任务;

  • DMA 进一步将 I/O 请求发送给磁盘;

  • 磁盘收到 DMA 的 I/O 请求,把数据从磁盘读取到磁盘控制器的缓冲区中,当磁盘控制器的缓冲区被读满后,向 DMA 发起中断信号,告知自己缓冲区已满;

  • DMA 收到磁盘的信号,将磁盘控制器缓冲区中的数据拷贝到内核缓冲区中,此时不占用 CPU,CPU 可以执行其他任务;

  • 当 DMA 读取了足够多的数据,就会发送中断信号给 CPU;

  • CPU 收到 DMA 的信号,知道数据已经准备好,于是将数据从内核拷贝到用户空间,系统调用返回;

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

早期 DMA 只存在在主板上,如今由于 I/O 设备越来越多,数据传输的需求也不尽相同,所以每个 I/O 设备里面都有自己的 DMA 控制器。

零拷贝和非零拷贝有什么区别,零拷贝通俗理解(7)

传统的文件传输有多糟糕?

如果服务端要提供文件传输的功能,我们能想到的最简单的方式是:将磁盘上的文件读取出来,然后通过网络协议发送给客户端。

传统 I/O 的工作方式是,数据读取和写入是从用户空间到内核空间来回复制,而内核空间的数据是通过操作系统层面的 I/O 接口从磁盘读取或写入。

代码通常如下,一般会需要两个系统调用:

read(file, tmp_buf, len);write(socket, tmp_buf, len);

代码很简单,虽然就两行代码,但是这里面发生了不少的事情。

零拷贝和非零拷贝有什么区别,零拷贝通俗理解(8)

栏目热文

深拷贝和浅拷贝的实现原理(深拷贝浅拷贝零拷贝的区别是什么)

深拷贝和浅拷贝的实现原理(深拷贝浅拷贝零拷贝的区别是什么)

用js处理数据的时候经常遇到这样一个问题,需要保留原始数据不变情况下,进行一系列数据操作,这时候需要制作一份原始数据的副...

2022-10-24 22:36:32查看全文 >>

直接复制和浅拷贝和深拷贝的区别(深拷贝与浅拷贝示意图)

直接复制和浅拷贝和深拷贝的区别(深拷贝与浅拷贝示意图)

概述今天主要来看看Python中的浅拷贝和深拷贝内容,这里用一个实例来说明~需求:将一个列表的数据复制到另一个列表中。思...

2022-10-24 22:39:34查看全文 >>

高拷贝和低拷贝的区别(深拷贝浅拷贝零拷贝的区别是什么)

高拷贝和低拷贝的区别(深拷贝浅拷贝零拷贝的区别是什么)

一、如何判断我的质粒是高拷贝还是低拷贝质粒?高拷贝质粒每 1 ml LB 培养物应产生 3-5 ug DNA,而低拷贝质...

2022-10-24 22:41:09查看全文 >>

深拷贝和浅拷贝有哪些应用

深拷贝和浅拷贝有哪些应用

大家好我是发哥,本期说说C 深拷贝和浅拷贝。对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存...

2022-10-24 22:41:01查看全文 >>

谈谈你对浅拷贝和深拷贝的理解(零拷贝和深拷贝)

谈谈你对浅拷贝和深拷贝的理解(零拷贝和深拷贝)

先说下自己的理解吧,浅拷贝,即在定义一个类A,使用类似A obj; A obj1(obj);或者A obj1 = obj...

2022-10-24 22:24:54查看全文 >>

深拷贝和浅拷贝的相同点(深拷贝和浅拷贝举例)

深拷贝和浅拷贝的相同点(深拷贝和浅拷贝举例)

前言在阿里Java开发手册中,有这么一条建议:慎用 Object 的 clone 方法来拷贝对象。对象 clone 方法...

2022-10-24 22:29:41查看全文 >>

禾秆草泡水喝的功效(禾秆草图片)

禾秆草泡水喝的功效(禾秆草图片)

广东有三宝——陈皮、咸榄、禾秆草!不少“老广”都会有居家自备“三宝扎”的习惯:用陈皮包裹橄榄,再用禾秆草捆扎,置入粗盐罐...

2022-10-24 22:52:32查看全文 >>

禾秆草功效与禁忌(禾秆草有什么功能)

禾秆草功效与禁忌(禾秆草有什么功能)

广东三宝广东三宝是指:老姜、陈皮、禾秆草。前两样好理解,但是禾秆草,也就是稻草,怎么也能入选“三宝”呢?禾杆草为什么被广...

2022-10-24 22:53:23查看全文 >>

为什么稻草灰可以吃(稻草灰功效与作用)

为什么稻草灰可以吃(稻草灰功效与作用)

来源:上游新闻-重庆晨报俗话说:“民以食为天!”不同的地域特征和生活习性,烹制出不同的美味。稻草成灰,原本平凡无奇,但与...

2022-10-24 22:22:59查看全文 >>

禾麻草图片功效作用(野麻子治什么病)

禾麻草图片功效作用(野麻子治什么病)

2020年7月22日,贵州省毕节市威宁自治县,中药材一一禾麻草(荨麻)。[陶泽祥 摄影]禾麻草霍麻草禾麻荨麻,...

2022-10-24 22:16:20查看全文 >>

文档排行