I/O 系统调用 (I/O System Call) 是用户程序请求操作系统内核执行数据读写操作的标准接口

核心逻辑

由于安全限制,用户程序无法直接访问硬件(磁盘、网卡)。必须通过系统调用陷入内核态,由内核代为执行。

  1. 特权切换:触发软中断,CPU 从 用户态 (User Mode) 切换到 内核态 (Kernel Mode)
  2. 上下文切换:内核保存当前进程寄存器状态,执行 I/O 操作后再恢复。
  3. 数据拷贝:通常涉及数据在“内核缓冲区”与“用户缓冲区”之间的复制。

常见调用

调用功能场景
read文件描述符 读取数据读取文件、接收网络包
write向文件描述符写入数据写入磁盘、发送网络包
open获取文件描述符准备操作某个资源
close释放文件描述符结束资源占用

极简流程

sequenceDiagram
    participant U as 用户程序
    participant K as 内核 (Kernel)
    participant H as 硬件 (Disk/Net)
    
    U->>K: read(fd, buf) [系统调用]
    K->>H: 读取数据
    H-->>K: 返回数据
    K->>U: 拷贝数据到 buf 并返回

系统调用是昂贵的。频繁的调用会导致大量的上下文切换,这也是为什么高性能架构(如 Redis)会尽量减少系统调用或使用批量处理。