美文网首页RPC专题
IO 基础——用户空间与内核空间

IO 基础——用户空间与内核空间

作者: aliex | 来源:发表于2020-07-24 14:22 被阅读0次

为了能更好理解程序中IO的操作,我们首先需要了解一下计算机中关于IO的知识。在这篇文章中重点掌握三个知识点:

  • 计算机的组成;
  • 用户空间与内核空间;
  • 网络访问一个文件的IO过程;

1. 计算机的组成

现代计算机是由硬件、操作系统组成,操作系统通过内核与硬件交互。操作系统可以划分为:内核与应用两部分,内核提供进程管理、内存管理、网络等底层功能,封装了与硬件交互的接口,通过系统调用提供给上层应用使用。


os.png

2. 用户空间与内核空间

由于CPU某些指令比较危险,如果错用会导致系统崩溃,为了保护系统,操作系统将内存空间划分为了两部分:

  • 内核空间;
  • 用户空间;

当进程运行在内核空间时,它就处于内核态;当进程运行在用户空间时,它就处于用户态。

当我们需要进行IO操作时,如读写硬盘文件、读写网卡数据等,进程需要切换到内核态,否则无法进行这样的操作,无论是从内核态切换到用户态,还是从用户态切换到内核态,都需要进行一次上下文的切换。一般情况下,应用不能直接操作内核空间的数据,需要把内核态的数据拷贝到用户空间才能操作。

3. IO示例

假如有一个网络请求想访问服务器上的某个静态文件,我们来看一下在这个示例中服务器的具体IO流程。


io.png

整个过程如下:

  1. 进程发起一个系统调用sys_read,读取磁盘的文件;
  2. DMA将磁盘文件数据拷贝到内核空间的read缓冲区;
  3. CPU把内核空间read缓冲区数据拷贝到用户空间的缓冲区;
  4. 进程发起一个系统调用socket_write,向网卡写数据;
  5. CPU把用户空间缓冲区的数据拷贝到内核空间的socket缓冲区;
  6. 最后DMA把内核空间的socket缓冲区数据拷贝到网卡;

可以看到,在整个过程中进行了四次的数据拷贝,而且也进行了四次的上下文切换。这种IO操作的效率是比较低的,因为进行了多次数据拷贝,如果希望提高IO效率,可以减少其中的数据拷贝,后面讲到的零拷贝技术就是为了减少IO操作过程中的数据拷贝次数。

PS:DMA即直接存储器访问,可以看作CPU的一个辅助硬件访问的芯片,在进行内存与IO设备数据传输时,不需要CPU来控制,直接通过DMA进行。

相关文章

  • IO 基础——用户空间与内核空间

    为了能更好理解程序中IO的操作,我们首先需要了解一下计算机中关于IO的知识。在这篇文章中重点掌握三个知识点: 计算...

  • Java NIO

    Java IO 的底层原理 缓冲处理、内核空间与用户空间 缓冲与缓冲的处理方式,是所有I/O操作的基础。术语“输入...

  • Binder机制小结

    by hzwusibo 20190504 1.Linux内核基础知识: (1)用户空间/内核空间: 用户空间指的是...

  • java io知识个人理解

    java io知识 内核空间和用户空间 从安全的角度考虑,读写io操作必须在内核中进行,完成后再传到用户空间 bi...

  • Linux I/O模式及select、poll机制

    Linux IO模式及 select、poll、epoll详解 一. 涉及概念 用户空间与内核空间 进程间切换 进...

  • 高并发I/O

    准备知识 用户态与内核态 操作系统将虚拟空间分成用户空间与内核空间。用户进程不能访问内核空间。只有系统调用才可以访...

  • Java IO 底层原理

    1.Java的IO操作都是由操作系统来执行的,且发生在内核空间 2.用户空间和内核空间 用户空间就是JVM的堆(进...

  • JavaNIO-MappedByteBuffer

    内核空间与用户空间 Kernel space 是 Linux 内核的运行空间,User space 是用户程序的运...

  • Linux IO详解

    IO涉及到的概念 1.用户空间与内核空间 操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也...

  • 中级Android开发应该了解的Binder原理

    一、基础概念 Linux的进程空间是相互隔离的。 Linux将内存空间在逻辑上划分为内核空间与用户空间。Linux...

网友评论

    本文标题:IO 基础——用户空间与内核空间

    本文链接:https://www.haomeiwen.com/subject/czmjlktx.html