第十九章 I/O子系统
I/O特点
I/O设备有三种常见类型:字符设备(键盘、鼠标等),块设备(磁盘驱动器、光驱等),网络设备(无线网卡、蓝牙等)。不同类型的设备访问特征不同。
- 字符设备:以字节为单位顺序访问,访问使用get()、put()函数;
- 块设备:读写以一个数据块为单位,访问既可以使用get()、put()函数,也可以使用文件系统接口,或者将文件映射到内存;
- 网络设备:交互复杂,接收格式化的网络报文,访问使用专门的网络报文收发接口——send/receive;
I/O结构
如下是整个计算机系统的结构:
I/O的结构层次如下:
下面考虑一个完整的I/O请求的生命周期:
I/O数据传输
访问设备的数据可通过CPU指令(in/out)实现,这种方式便于实现但是消耗CPU(时间与数据量成正比)。或者直接通过内存访问,只需要在传输数据的开始和结束使用CPU,传输数据过程不影响CPU,在高吞吐量的I/O设备中使用该方式。
处理设备请求有两种方式:轮询与设备中断;设备中断效率高,设备中断的I/O处理流程如下:
Linux I/O子系统
Linux I/O系统结构如下图所示: