首页 > 其他分享 >传统IO过程以及零拷贝简单介绍

传统IO过程以及零拷贝简单介绍

时间:2023-07-26 10:55:13浏览次数:40  
标签:DMA 用户 内核 IO 简单 缓冲区 拷贝

传统IO过程

  • 整个IO过程涉及到三个部分,分别是用户缓冲区,内核缓冲区(PageCache)以及硬件。用户态CPU发起IO请求,即发起read()系统调用,随后进程阻塞,用户态切换到内核态。内核态DMA发起IO请求与硬件进行DMA拷贝到内核缓冲区中,之后内核缓冲区与用户缓冲区进行CPU拷贝,至此read()函数调用结束数据返回,唤醒阻塞进程,内核态切换到用户态。
  • 写的过程涉及用户缓冲区、内核缓冲区(Socket缓冲区)、网卡设备。首先CPU发起写的IO请求,当前进程阻塞,由用户态切换到内核态,进行CPU拷贝,将用户缓冲区中的数据拷贝到Socket缓冲区中,接着DMA控制器发起DMA请求进行DMA拷贝到网卡中,拷贝完成write()函数结束返回,内核态切换到用户态。

零拷贝

关键在于用MMAP()系统调用代替原来的read()系统调用,做一个映射,数据不走用户缓冲区了,减少CPU拷贝

标签:DMA,用户,内核,IO,简单,缓冲区,拷贝
From: https://www.cnblogs.com/jintaocode/p/17581856.html

相关文章

  • RabbitMQ由于x-message-ttl设置与代码不一致导致declareQueue时IO异常
    具体异常:Causedby:com.rabbitmq.client.ShutdownSignalException:channelerror;protocolmethod:#method<channel.close>(reply-code=406,reply-text=PRECONDITION_FAILED-inequivalentarg'x-message-ttl'forqueue'queryResult'invho......
  • Mahout协同推荐简单实例
    Mahout给我们提供的强大的协同过滤算法。需要新建一个基于Maven的工程,下面是pom.xml需要导入的包。<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0ht......
  • 机器翻译 | Improving Neural Machine Translation Robustness via Data Augmentation
    论文地址:https://arxiv.org/abs/1910.03009动机神经机器翻译(NMT)模型在翻译干净文本时已被证明是强大的,但它们对输入中的噪声非常敏感。改进NMT模型的鲁棒性可以看作是对噪声的“域”适应的一种形式。最先进的方法严重依赖于大量的反向翻译数据。最近创建的基于噪声文本的机......
  • UnrealEngine:BindAction() BindAxis()
     BindAction()绑定的函数会在输入事件发生时执行,BindAxis()绑定的函数每帧都会执行BindAction()用来监听外设是否到达某个状态,BindAxis()监听的是外设状态的变化量BindAction()绑定的函数无参数BindAxis()绑定的函数有一个参数,该参数就是外设状态的变化量 ......
  • 【题解】Educational Codeforces Round 150(CF1841)
    赛时过了A-E,然后就开摆了,为什么感觉C那么无厘头[发怒][发怒]排名:25thA.GamewithBoard题目描述:Alice和Bob玩游戏,他们有一块黑板。最初,有\(n\)个整数\(1\)。Alice和Bob轮流操作,Alice先手。轮到时,玩家必须在棋盘上选择几个(至少两个)相等的整数,擦除它们,然后写一个......
  • 1.c++入门以及简单顺序结构
    1.c++入门以及简单顺序结构编程就是教计算机解决问题,编程语言就是和计算机沟通时用到的语言——严欣怡一、编写一个简单的C++程序#include<iostream>usingnamespacestd;intmain(){ cout<<"你好C++,我是严欣怡."; return0;}二、语法基础变量1.变量的概念变......
  • 1.c++入门以及简单顺序结构题目
    #1.c++入门以及简单顺序结构题目##1.计算(a+b)*c的值```c++inta,b,c;cin>>a>>b>>c;cout<<(a+b)*c;return0;```##2.带余除法```c++inta,b;cin>>a>>b;cout<<a/b<<""<<a%b;``````c++//c++中取余结果只与%前面的正负有关系cout<<......
  • 1.C++入门以及简单顺序结构
    1.C++入门以及简单顺序结构编程就教计算机解决问题,编程语言就是和计算机沟通时用到的语言——金思宸一、编写一个简单的c++程序#include<iostream>usingnamespacestd;intmain(){ cout<<"你好c++"; return0;}2、语法基础变量1.变量的概念变量本子是一个装东......
  • cookie+session(这里使用redistemplate代替)实现单点登录流程
     user发起资源请求(带上回调的路径方便回调),通过判断是否浏览器的cookie中是否存在登录过的痕迹,比如有人登了,然后存了一个cookie到浏览器如果拿到了cookie是有东西的,则带上这个cookie的内容返回给client,如果没有东西,则继续登录,向session中存入userInfo,并给浏览器设置cookie......
  • 30 天精通 RxJS (02):Functional Programming 基本观念
    FunctionalProgramming是Rx最重要的观念之一,基本上只要学会FP要上手Rx就不难了!FunctionalProgramming可以说是近年来的显学,各种新的函式编程语言推出之外,其他旧有的语言也都在新版中加强对FP的支持!什么是FunctionalProgramming?FunctionalProgramming是一种编程......