操作系统-网络IO模型

荒凉一梦 提交于 2019-12-27 04:01:28

用户空间及内核空间

我们知道现代操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接访问内核,保证内核的安全,操作系统将虚拟存储空间划分为两部分——一部分为内核空间,一部分为用户空间。针对Linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF)供内核使用,称为内核空间;而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF)供各个进程使用,称为用户空间。每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享。于是从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。

寻址空间是用来干嘛的?和内存空间有何差别?

Linux寻址空间分配如下图所示:
在这里插入图片描述
有了用户空间和内核空间,整个Linux内部结构可以分为三部分,从最底层到最上层依次是:硬件–>用户空间–>内核空间。如下图所示:
在这里插入图片描述
需要注意的细节问题,从上图可以看出内核的组成:

  1. 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是用户空间还是内核空间,他们都处于虚拟空间中。
  2. Linux使用两级保护机制,0级供内核使用,3级供用户程序使用。

Linux 网络 IO 模型

阻塞IO(Blocking IO)

非阻塞IO(Non-Blocking IO)

IO复用(IO Multiplexing)

信号驱动的IO(Singal Driven IO)

异步IO

5中IO模型的对比

参考文档

NIO相关基础篇

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!