zoukankan      html  css  js  c++  java
  • 用户态、内核态及零拷贝

    用户空间:user space。

    内核空间:kernel space。

    应用程序在访问磁盘文件时,会先利用DMA技术把文件内容读取到内核缓冲区,然后再把内容从内核缓冲区copy到用户缓冲区中。如果程序要输出,则会把用户缓冲区的内容再copy到内核的socket缓冲区中,利用DMA输出。以下是原理图:

     mmap():利用DMA将文件内容拷贝到内核缓冲区,然后应用程序和操作系统共享这块区域,从而减少了内核缓冲区到用户缓冲区的这一步拷贝。以下是原理图:

    sendfile():sendfile利用DMA技术将文件内容读取到内核缓冲区,然后将带有文件位置和长度信息的缓冲区描述符添加到socekt缓冲区去,此过程不需要将数据从操作系统内核缓存区拷贝到socket缓存区。sendfile只适用于文件到socket的传输。以下是原理图:

    splice():splice在两个文件描述符之间移动数据,不需要数据在内核空间和用户空间来回拷贝。splice利用了linux的管道缓冲区机制,所以至少一个描述符要为管道。splice不限于sendfile的功能,允许任意两个文件之间相互连接。

  • 相关阅读:
    Pythonlistsort()
    [转]Python中文乱码问题深入分析
    使用dom4j时SelectNodes()方法报错
    Xpath语法
    wust2012级软件工程新生经验交流会草稿
    Eclipse中部分快捷键
    Dom4j解析XML学习代码
    html5 cocos2d
    mfc mfc100ud.dll丢失问题
    c# 类操作 窗体
  • 原文地址:https://www.cnblogs.com/koushr/p/5873404.html
Copyright © 2011-2022 走看看