同步和异步:关注消息通信机制.发出调用后,同步等待调用返回结果,异步则不等待结果,被调用者通过他的方式通知调用者
阻塞与非阻塞:关注等待调用结果时的状态.发出调用等待结果时,阻塞式会挂起直到得到结果,非阻塞不会挂起
Principles of IO software
IO软件目标
设备独立性(device independence)
程序可对任意IO设备访问,无需事先指定
统一命名(uniform naming)
为实现设备独立性
文件或设备的名字都应是简单的字符串或整数(所有文件和IO设备都采用相同的方式寻址)
错误处理(error handling)
错误应尽可能在接近硬件的层面处理(控制器->设备驱动程序->高层软件)
同步(synchronous)异步(asynchronous)传输
同步即阻塞式,异步即中断驱动式
IO设备如果是同步的程序更易编写,所以操作系统将实际上是中断驱动的操作为用户提供为阻塞式(某些性能要求的程序可用异步)
缓冲(buffering)
数据离开一个设备后不能直接存放到目的地
某些实时约束(音频设备)设备需要不间断的输入,所以将数据预先防止到输出缓冲区中防止缓冲区欠载
共享设备和独占设备
某些IO设备可同时让多个用户使用(磁盘),某些则必须独占(磁带机)
独占设备引入各种问题,如死锁
三种实现IO的手段
程序控制IO(programmed IO)
即让CPU做全部工作
打印字符串:
- 用户进程发出系统调用获得IO设备,如果设备被占用就系统调用失败返回错误代码,或阻塞直到设备可用.
- 然后操作系统将字符串缓冲区复制到内核中一个数组里,如果设备可用就将字符发送给设备的数据寄存器
- 操作系统查看设备是否就绪接收下一个字符(一般是由设备的另一个寄存器表明状态),然后继续忙等待发送
缺点:
- IO会占用全部CPU时间(因为忙等待)(所以常用于嵌入式系统)