用户空间和内核空间
用户空间:用户空间是常规进程所在的区域,是非特权的空间,在该空间运行的代码不能访问硬件设备
内核空间:是操作系统所在的区域,是特权空间,能与设备控制器通讯,控制着用户区域进程的运行状态,最重要的是所有的I/O都直接或间接的通过内核空间。
运行内容 | 是否有特权 | 是否可以访问硬件 | |
---|---|---|---|
用户进程 | 常规进程 | 否 | 否 |
内核进程 | 操作系统 | 是 | 是 |
I/0模型
对于网络的I/O操作,可以分为两个准备阶段和操作阶段。
准备阶段:判断数据是否能够操作(即等待数据是否可用),在内核空间进行。
操作阶段:从内核缓冲区拷贝数据到用户缓冲区,这是实际的I/O操作。
同步&异步
同步/异步是用户空间的调用
同步 I/O:用户调用系统I/O服务,如果内核空间没有数据,进程将被挂起,内核着手把数据读进内存。
异步 I/O:用户发起系统调用,系统会立即返回,如果没有数据,就返回特定标识,由系统负责等待数据,数据到达就通知用户。
实际上同步与异步是针对应用程序与内核的交互而言的。同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。异步过程中进程触发IO操作以后,直接返回,做自己的事情,IO交给内核来处理,完成后内核通知进程IO完成。如下图所示:
阻塞&非阻塞
阻塞/非阻塞是内核空间的调用
阻塞:内核空间判断数据是否到达,没有到达就处于等待状态。
非阻塞:内核判断数据是否到达,如果未到达就立即返回。
简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞。如下图所示:
参考资料
https://www.cnblogs.com/Anker/p/3254269.html
https://blog.youkuaiyun.com/qq_32725491/article/details/78679414
https://blog.youkuaiyun.com/lengxiao1993/article/details/78154467
https://www.cnblogs.com/MRRAOBX/articles/3617440.html