I/O设备

需熟练掌握I/O控制方式和软件层次,常在选择题中考察。

设备类型

以linux系统为例,说明系统的I/O设备类型

  1. 块设备(Block Devices):
    • 块设备以固定大小的块(通常为512字节或4KB)为单位进行数据读写。
    • 代表性的块设备包括硬盘驱动器(如SATA、SSD)、USB闪存驱动器、CD/DVD驱动器等。
    • 块设备通常用于存储文件系统,支持随机访问和缓存。
  2. 字符设备(Character Devices):
    • 字符设备以字符流为单位进行数据读写,没有块的概念。
    • 代表性的字符设备包括键盘、鼠标、串口设备、声卡等。
    • 字符设备通常用于实时数据流、交互性输入/输出。
  3. 网络设备(Network Devices):
    • 网络设备允许计算机通过网络与其他计算机通信。
    • 代表性的网络设备包括以太网适配器(Ethernet Adapter)、Wi-Fi适配器、调制解调器(Modem)等。

I/O控制方式

  • 程序直接控制方式
  • 中断驱动方式
  • DMA方式

I/O软件层次

用户层I/O软件
设备独立性软件
设备驱动程序
中断处理程序
硬件
I/O软件层次
  1. 用户层I/O软件:
    • 目的:提供简单、易用的界面供用户级程序访问I/O设备。
    • 特点:这层通常是库函数或系统调用的形式,如C语言的printfscanf或UNIX的readwrite等。
    • 功能:文件操作、控制台I/O、网络通信等。
  2. 设备独立性软件:
    • 目的:为不同的I/O设备提供统一的接口,从而使用户层软件和设备驱动程序之间解耦。
    • 特点:它隐藏了硬件的特定细节,使上层软件不必为每种特定的设备编写不同的代码。
    • 功能:命名、保护、设备独立的I/O操作、错误处理等。
  3. 设备驱动程序:
    • 目的:为每种I/O设备提供专门的接口和管理。
    • 特点:设备驱动是操作系统中与硬件直接交互的部分,通常由硬件制造商提供。
    • 功能:初始化设备、处理设备的细节、数据传输、错误处理等。每种设备(如磁盘、网卡、打印机等)都有自己专门的驱动程序。
  4. 中断处理程序:
    • 目的:响应来自I/O设备的中断请求。
    • 特点:当I/O设备完成任务或需要注意时,它会发送一个中断信号给CPU。中断处理程序负责捕获这个中断并执行相应的处理。
    • 功能:保存当前CPU的状态、处理中断请求、恢复CPU状态等。

I/O应用程序接口

操作系统通常会提供一套设备I/O应用程序接口(API)。这套API为应用程序提供了一种标准化的方式来请求I/O操作,而无需关心底层硬件的细节。

I/O API的主要目的之一是为应用程序提供一个与硬件无关的接口。这意味着应用程序可以使用相同的API调用来读写不同的设备,而不需要知道这些设备的具体实现细节。