IO模型
关键概念
内核空间、用户空间
- 操作系统的核心是内核,独立于其他应用程序,可以访问底层会保护的硬件,Linux为了防止用户进程直接操作内核,将虚拟地址空间,分成了用户空间和内核空间,用户空间就是用户进程所在的空间。
进程切换
- 为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行。这种行为被称为进程切换。因此可以说,任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。
从一个进程的运行转到另一个进程上运行,这个过程中经过下面这些变化:
- 保存处理机上下文,包括程序计数器和其他寄存器。
- 更新PCB信息。
- 把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。
- 选择另一个进程执行,并更新其PCB。
- 更新内存管理的数据结构。
- 恢复处理机上下文。
进程的阻塞
- 正在执行的进程,由于期待的某些事件未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无新工作做等,则由系统自动执行阻塞原语(Block),使自己由运行状态变为阻塞状态。可见,进程的阻塞是进程自身的一种主动行为,也因此只有处于运行态的进程(获得CPU),才可能将其转为阻塞状态。当进程进入阻塞状态,是不占用CPU资源的。
进程缓存区、内核缓冲区
- 缓冲区的出现是为了减少频繁的系统调用,由于系统调用需要保存之前的进程数据和状态等信息,而结束调用之后回来还需要恢复之前的信息,为了减少这种耗时耗性能的调用于是出现了缓冲区。在linux系统中,每个进程有自己独立的缓冲区,叫做进程缓冲区,而系统内核也有个缓冲区叫做内核缓冲区。
- 操作系统使用read函数把数据从内核缓冲区复制到进程缓冲区,write把数据从进程缓冲区复制到内核缓冲区中
文件描述符fd
- 文件描述符(File descriptor)是一个用于表述指向文件的引用的抽象化概念。
- 文件描述符在形式上是一个非负整数。
- 实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。
- 当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。
- 在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。
五种模型
- 阻塞IO
- 非阻塞IO
- IO复用模型
- 信号驱动IO模型
- 异步IO
php-fpm 多进程同步阻塞模式
Redis I/O事件模型-epoll
MySQL 单进程多线程
本作品采用《CC 协议》,转载必须注明作者和本文链接