文章目录
  1. I/O特点
  2. I/O结构
  3. I/O数据传输
  4. Linux 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系统结构如下图所示: