跳到内容
⌘
linux/internals
流程
主题
关于
← 返回地图
read() —— 一次系统调用的完整旅程
一个进程,一个字节,我们跟随它从 libc 一路到磁盘并返回。
SYSCALL · ring 3 → ring 0
HARDWARE
Your program
read(fd, buf, 4096)
glibc
syscall(SYS_read, …) → SYSCALL
Syscall entry
entry_SYSCALL_64 → ksys_read()
VFS / ext4
f_op->read_iter → ext4_file_read_iter
Page cache
filemap_get_pages()
Block layer
submit_bio() → mq-deadline
NVMe device
DMA → RAM
⏸ 暂停
↺ 重新播放
第 1 / 6
1
用户空间调用 read()
你的程序调用 read(fd, buf, n)。glibc 进行封装:参数被放入寄存器,然后发出 SYSCALL 指令。
2
CPU 陷入内核
3
VFS 选择正确的文件系统
4
页缓存:命中还是未命中?
5
块层送到设备
6
回到用户空间