IO模型

关键概念

内核空间、用户空间

  • 操作系统的核心是内核,独立于其他应用程序,可以访问底层会保护的硬件,Linux为了防止用户进程直接操作内核,将虚拟地址空间,分成了用户空间和内核空间,用户空间就是用户进程所在的空间。

进程切换

  • 为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行。这种行为被称为进程切换。因此可以说,任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。

从一个进程的运行转到另一个进程上运行,这个过程中经过下面这些变化:

  1. 保存处理机上下文,包括程序计数器和其他寄存器。
  2. 更新PCB信息。
  3. 把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。
  4. 选择另一个进程执行,并更新其PCB。
  5. 更新内存管理的数据结构。
  6. 恢复处理机上下文。

进程的阻塞

  • 正在执行的进程,由于期待的某些事件未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无新工作做等,则由系统自动执行阻塞原语(Block),使自己由运行状态变为阻塞状态。可见,进程的阻塞是进程自身的一种主动行为,也因此只有处于运行态的进程(获得CPU),才可能将其转为阻塞状态。当进程进入阻塞状态,是不占用CPU资源的。

进程缓存区、内核缓冲区

  • 缓冲区的出现是为了减少频繁的系统调用,由于系统调用需要保存之前的进程数据和状态等信息,而结束调用之后回来还需要恢复之前的信息,为了减少这种耗时耗性能的调用于是出现了缓冲区。在linux系统中,每个进程有自己独立的缓冲区,叫做进程缓冲区,而系统内核也有个缓冲区叫做内核缓冲区
  • 操作系统使用read函数把数据从内核缓冲区复制到进程缓冲区,write把数据从进程缓冲区复制到内核缓冲区中

文件描述符fd

  • 文件描述符(File descriptor)是一个用于表述指向文件的引用的抽象化概念。
  • 文件描述符在形式上是一个非负整数。
  • 实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。
  • 当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。
  • 在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。

五种模型

  • 阻塞IO
  • 非阻塞IO
  • IO复用模型
  • 信号驱动IO模型
  • 异步IO

php-fpm 多进程同步阻塞模式
Redis I/O事件模型-epoll
MySQL 单进程多线程

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!