I/O(Input/Output,输入/输出)是计算机系统中 数据在核心组件(如 CPU、内存)与外部设备(如磁盘、网络、键盘、显示器)之间传输的过程。它是操作系统和硬件交互的核心环节,直接影响系统性能。
1. I/O 的核心概念
- 输入(Input):外部设备向计算机传递数据(如键盘输入、磁盘读取)。
- 输出(Output):计算机向外部设备发送数据(如屏幕显示、文件写入)。
- 本质:解决 CPU 与低速设备之间的速度 mismatch(CPU 纳秒级 vs 磁盘毫秒级)。
2. I/O 的常见类型
按设备分类
| 类型 | 设备示例 | 特点 |
|---|---|---|
| 存储 I/O | 硬盘(HDD/SSD)、U 盘 | 低速、块设备(按数据块读写) |
| 网络 I/O | 网卡(NIC)、TCP/IP 通信 | 延迟高、受带宽和协议影响 |
| 人机交互 I/O | 键盘、鼠标、显示器、打印机 | 实时性要求高,数据量小 |
| 系统间 I/O | 管道(Pipe)、共享内存 | 进程间通信(IPC)机制 |
按数据传输方式
- 同步 I/O:进程发起 I/O 后需等待完成才能继续(如
read()阻塞调用)。 - 异步 I/O:进程发起 I/O 后立即返回,通过回调/通知机制处理结果(如
io_uring)。 - 阻塞 vs 非阻塞:是否立即返回(如
O_NONBLOCK标志)。
3. I/O 的工作原理
关键参与者
- CPU:发起 I/O 指令(如
in/out指令或内存映射访问)。 - 设备控制器(如磁盘控制器、网卡):管理硬件设备的具体操作。
- 驱动程序:操作系统内核中与设备控制器通信的模块。
- 缓冲区:内存中的临时存储区域(减少直接访问设备的次数)。
典型流程(以磁盘读取为例)
- 用户进程 调用
read()系统调用。 - 内核 检查缓冲区:
- 若数据在缓冲区(缓存命中),直接返回;
- 若未命中,向 磁盘控制器 发送读取命令。
- 磁盘控制器 从磁盘读取数据到 DMA(直接内存访问)缓冲区,避免占用 CPU。
- 磁盘控制器 通过中断通知 CPU 数据就绪。
- 内核 将数据从内核缓冲区拷贝到用户空间,
read()返回。
4. I/O 的性能瓶颈与优化
常见瓶颈
- 速度差异:CPU/内存速度远高于 I/O 设备(如磁盘 I/O 延迟是内存的 10 万倍)。
- 系统调用开销:用户态与内核态的上下文切换。
- 数据拷贝:多次拷贝(如网络数据从网卡→内核→用户空间)。
优化技术
- 缓冲(Buffering):减少直接 I/O 操作(如磁盘缓存)。
- DMA(Direct Memory Access):设备直接访问内存,无需 CPU 介入。
- 零拷贝(Zero-copy):如
sendfile()避免内核-用户空间拷贝。 - 异步 I/O:如 Linux 的
io_uring,避免阻塞。 - I/O 多路复用:如
select/poll/epoll管理多个 I/O 事件。
5. I/O 在操作系统中的体现
- 文件系统:抽象磁盘 I/O 为文件操作(如
open/read/write)。 - 网络协议栈:处理网络 I/O(如 Socket API)。
- 设备管理:通过设备驱动统一接口(如
/dev/sda)。
6. 常见问题
Q:为什么 I/O 慢会影响整个系统?
- CPU 等待:同步 I/O 会导致进程阻塞,CPU 空闲。
- 高负载:大量任务因 I/O 阻塞堆积(如
load average飙升)。
Q:如何监控 I/O 性能?
- Linux 工具:
iostat -x 1 # 查看磁盘 I/O 吞吐量和延迟 dstat # 综合监控 CPU、磁盘、网络 sar -b 1 3 # 统计块设备 I/O
总结
- I/O 是计算机与外界交互的桥梁,涉及 CPU、设备、驱动、缓冲区的协作。
- 性能关键点:减少等待、避免冗余拷贝、利用异步/并发机制。
- 实际影响:数据库、Web 服务器等 I/O 密集型应用的性能直接受 I/O 效率制约。

被折叠的 条评论
为什么被折叠?



