内存零拷贝详解

本文详细介绍了内存零拷贝的原理与优化方法,通过分析操作系统、DMA和中断的角色,揭示了减少数据复制以提高效率的过程。零拷贝主要包括mmap和sendfile两种技术,前者通过映射内存减少一次拷贝,后者直接从内核缓冲区到网络,避免了用户态拷贝。
摘要由CSDN通过智能技术生成

目录

前置知识

标准设备

 标准协议

利用中断减少CPU开销

利用DMA进行继续优化

零拷贝

零拷贝之mmap

零拷贝之sendfile


前置知识

标准设备

一个标准的硬件设备包括两部分:

  1. 面向系统其他部分展现的硬件接口(类似于软件的接口),供其他硬件或软件调用
  2. 内部结构,包括设备相关的特定实现,负责具体实现设备展示给系统的抽象接口

 标准协议

一个标准设备的接口包含三个寄存器,通过读写这些寄存器,操作系统可以控制设备的行为:

  • 一个状态(status)寄存器,可以读取并查看设备的当前状态
  • 一个命令(command)寄存器,用于通知设备执行某个具体任务
  • 一个数据(data)寄存器,将数据传给设备或从设备接收数据

操作系统与标准设备的交互:

  • 第1步,操作系统通过反复读取状态寄存器,等待设备进入可以接收命令的就绪状态。我们称之为轮询(polling)设备(基本上,就是问它正在做什么)。
  • 第2步,操作系统下发数据到数据寄存器。例如,你可以想象如果这是一个磁盘,需要多次写入操作,将一个磁盘块(比如4KB)传递给设备。如果主CPU参与数据移动(就像这个示例协议一样),我们就称之为编程的I/O(programmedI/O,PIO)。
  • 第3步,操作系统将命令写入命令寄存器;这样设备就知道数据已经准备好了,它应该开始执行命令。最后一步,操作系统再次通过不断轮询设备,等待并判断设备是否执行完成命令(有可能得到一个指示成功或失败的错误码)。

缺点:轮询过程比较低效,等待设备就绪和等待设备执行完成命令浪费大量CPU时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值