前言
大家看操作系统教科书的时候,可能会看到操作系统的目的之一,就是为了让计算机能够异步地进行IO操作,以此来避免CPU处于长时间等待状态,浪费资源;而在学习IO命令和进行网络编程的时候,又发现有一些函数是异步的,有些函数是同步的。
那么IO操作到底是异步的还是同步的?这个问题曾经困扰了我好久,今天打算整理一下我的思考。
从不同的层面理解IO操作
首先我们要学会从不同的层面去看IO操作。
大家都知道,从计算机的模型是分层的,最底层是计算机硬件层,也就是实际的物理设备;再往上是操作系统层,负责调度系统资源,并提供给用户系统调用接口;最上层才是用户程序层,用来实现各种各样的功能。而在不同的层次,IO的性质也是不一样的。在这里我先说上个问题的结论:
在操作系统的层面来讲,至少是对于现代的操作系统来说,所有IO都是异步的;而从用户程序层面讲,IO是异步还是同步是由用户决定的。
操作系统层面的IO
前边说到: “在操作系统的层面来讲,至少是对于现代的操作系统来说,所有IO都是异步的”。 要理解这句话,我们首先要回顾一下操作系统的历史:
在计算机诞生之初,是没有操作系统的概念的。那个时候所有任务都是串行执行的,也可以说,IO操作是同步的。计算机从打孔纸上读取数据