系统内核基础-数据拷贝过程

零拷贝,主要是指内核态数据和用户态数据的拷贝过程。

一、拷贝方式

1. CPU拷贝
     
在 DMA 技术出现之前,应用程序与磁盘之间的 I/O 操作都是通过 CPU 的中断完成的。每次用户进程读取磁盘数据时,都需要 CPU 中断将数  据读进暂存器,然后发起 I/O 请求等待数据读取和拷贝完成,然后写进其它地方,每次的 I/O 中断都导致 CPU 的上下文切换。

2. DMA拷贝
     
DMA(Direct Memory Access,直接存储器访问) ,在DMA之前的CPU复制,需要CPU将数据读进暂存器(区别于寄存器),然后写进其它地方,这个过程中,CPU被挤占,而DMA在拷贝时不影响CPU去运行其他任务。


具体流程:CPU对DMA控制器初始化,向I/O接口发出操作命令,I/O接口提出DMA请求。DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。

二、计算机处理的任务类类型


1、CPU密集型
        CPU密集型就是计算、逻辑判断量非常大而且集中的类型,因为主要占用cpu资源所以又叫cpu密集型,而且当计算任务数等于cpu核心数的时候,是cpu运行效率最高的时候。
特点:消耗cpu

2、 IO密集型
      IO密集型就是磁盘的读取数据和输出数据非常大的时候就是属于IO密集型
 由于IO操作的运行时间远远大于cpu、内存运行时间,所以任务的大部分时间都是在等待IO操作完成,IO的特点是cpu消耗小。


        例如:用户请求获取服务器中一张图片。

        read()过程:用户空间(user buffer)-->内核空间(kernel buffer)-->硬盘(Hardware)
        图片信息从硬盘加载到内核空间 发生了一次copy过程、  内核空间到用户空间
        又发生了一次copy过程。

        write()过程:用户空间-->内核空间(socket buffer)-->网卡
        图片信息从用户空间加载到内核空间 发生了一次copy过程、内核空间到网卡
        又发生了一次copy过程。


         整个过程发生了四次copy。数据本身没有改变

         

三、read()函数交互时序图

那么就有优化空间了,优化数据拷贝会有以下三个方向:

1. 数据没有改变,用户空间和内核空间是不是可以省略数据的copy可以建立映射

2. 数据只在内核态中处理完成。

3. 数据不经内核态处理。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

技术分子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值