I/O模型简述

一、什么是I/O

  宏观上讲,I/O是信息处理系统(例如计算机)与外部世界(可能是人或其他信息处理系统)之间的通信。输入(Input)是系统接收的信号或数据,输出(Output)是从其发送的信号或数据。另一方面,在某一个信息处理系统内部,各部件或组件之间的通信也时刻离不开着I/O。

二、I/O模型

  在介绍I/O模型前,先介绍几个与I/O模型有关的概念:阻塞、非阻塞、复用、信号驱动、同步、异步。

  1.阻塞:在被调用者返回消息之前,调用者一直被挂起(深睡眠),直到被调用者返回消息,调用者才继续往下工作。

  2.非阻塞:在被调用者返回消息之前,调用者不会被挂起,但会一次次询问被调用者。

  3.同步:等待被调用者返回消息前不做其他事。

  4.异步:被调用者将自己的运行状态通过状态、通知、或回调机制通知调用者。

  5.复用:通过I/O复用器来管理I/O,从而实现异步非阻塞。

  6.信息驱动:进程不再等待内核态的数据准备好,直接可以去做别的事情。

  以一次文件I/O请求为例,一般I/O请求分为两部分,如下图所示:

  用户空间的进程想要读取磁盘中的数据,大致会产生这么两个过程:

  1.由内核调用磁盘数据,将磁盘数据写入内核内存;

  2.再由用户进程向内核内存调用至用户空间进程的空间内存

  I/O类型:

  如果过程①和过程②都阻塞,就称为阻塞型I/O;如果过程①非阻塞二过程②阻塞,则程为非阻塞型I/O;如果过程①和过程②都为非阻塞则称为异步非阻塞型I/O。

  除以上模型之外还有复用型I/O和信号驱动型I/O:

  复用型I/O:用select, poll, epoll监听多个io对象,当io对象有变化(有数据)的时候就通知用户进程。

  信号驱动I/O:由内核通知我们何时可以启动一个I/O操作,而异步I/O模型是由内核通知我们I/O操作完成。

posted @ 2019-02-18 19:31 readygood 阅读(...) 评论(...) 编辑 收藏