IO设备根据数据的存取和传输进行的分类
一、 常见的I/O设备有哪些?
首先,我们可以按功能直观地列举一些常见的I/O设备:
人机交互设备 (Human Interface Devices):
输入: 键盘、鼠标、触摸板、触摸屏、麦克风、摄像头、扫描仪。
输出: 显示器、打印机、音箱、耳机、投影仪。
存储设备 (Storage Devices):
硬盘驱动器(HDD)、固态硬盘(SSD)、U盘、SD卡、光驱(CD/DVD/Blu-ray)、磁带机。
网络通信设备 (Network Communication Devices):
网卡(NIC)、调制解调器(Modem)、Wi-Fi适配器、蓝牙适配器。
其他设备:
各种传感器(如温度、GPS)、时钟、定时器等。
二、 I/O设备的分类、特点及举例
尽管I/O设备五花八门,但从操作系统I/O子系统的角度看,最重要、最根本的分类方式是根据其数据交换的单位和特性来划分。主要分为以下三大类:
1. 块设备 (Block Devices)
核心特点:
数据单位: 信息存储在大小固定的**块 (Block)**中。块是这类设备进行数据读写的基本单位。
可寻址性: 每个块都有自己唯一的地址。你可以直接访问任意一个块,而无需访问它前面的块。
访问方式: 支持随机访问 (Random Access) 或直接访问。可以进行seek操作来定位到任意块。
I/O命令: 其接口中的命令通常是“读/写一整块”或“读/写连续的多个块”。
独立性: 通常是可以独立于操作系统工作的设备(例如,你可以把一块硬盘拆下来装到另一台电脑上)。
传输速率: 通常较高。
典型设备举例:
硬盘驱动器 (HDD)
固态硬盘 (SSD)
U盘、SD卡等闪存设备
光盘 (CD/DVD/Blu-ray)
本质上,所有用于持久化存储、构成文件系统的设备,都是块设备。
2. 字符设备 (Character Devices)
核心特点:
数据单位: 数据以字符 (Character)或字节 (Byte) 为单位,形成一个数据流。
可寻址性: 不可寻址。它不具备块的概念,你无法直接定位到“第n个字节”。
访问方式: 主要是顺序访问 (Sequential Access)。数据像水流一样,只能一个接一个地被读取或写入。通常不支持seek操作。
I/O命令: 其接口中的命令是get(获取一个字符)或put(发送一个字符)。操作系统和库函数通常会对此进行缓冲,使用户可以按行读写。
传输速率: 差异极大,从很慢(键盘)到很快(显卡帧缓冲)都有可能。
典型设备举例:
键盘、鼠标: 产生一个字符/坐标的数据流。
打印机: 接收一个字符流并打印。
串行端口 (COM): 在设备间传输字节流。
声卡: 产生或接收音频采样数据流。
本质上,所有以数据流方式进行交互的、非存储类的设备,大多属于字符设备。
3. 网络设备 (Network Devices)
核心特点:
网络设备足够特殊,以至于操作系统通常将其作为独立的一类来处理,而不是简单归为块设备或字符设备。
数据单位: 数据以大小可变的网络包 (Packet) 为单位进行交换。
寻址方式: 它有自己独特的地址(如MAC地址、IP地址),但这不是块地址。
访问方式: 它的接口(API)与前两者完全不同。程序员不使用标准的read/write,而是使用专门的套接字接口 (Socket API),如send()和receive()。
交互特性: 交互是异步和不可靠的(对于UDP等协议)。数据包可能丢失、乱序或重复。需要复杂的协议栈(如TCP/IP)来处理这些问题。
典型设备举例:
以太网卡 (NIC)
Wi-Fi 适配器
蜂窝网络调制解调器 (Cellular Modem)
总结与对比表格
特性
块设备 (Block Device)
字符设备 (Character Device)
网络设备 (Network Device)
基本数据单位
块 (Block),大小固定
字节/字符 (Byte/Character),形成数据流
包 (Packet),大小可变
是否可寻址
是,每个块都有唯一的地址
否
是,但使用IP/MAC等网络地址
主要访问方式
随机访问 (Random Access)
顺序访问 (Sequential Access)
面向报文/流 (Message/Stream Oriented)
标准I/O接口
read, write, seek
read, write (通常不支持seek)
独立的套接字(Socket)接口 (send, receive)
典型设备
硬盘 (HDD/SSD)、U盘、光驱
键盘、鼠标、打印机、串口
网卡、Wi-Fi适配器