直接回答:CPU 用特权级隔离代码:内核态(x86 的 ring 0)可执行全部指令、访问全部内存和硬件;用户态(ring 3)受限,不能直接操作硬件、不能访问内核与其他进程的内存。用户程序需要内核服务(IO、分配内存、创建进程)时通过系统调用陷入内核态。

展开解析:系统调用的过程:程序调用库函数(如 read)→ 库函数把系统调用号放入约定寄存器,执行陷入指令(x86-64 为 syscall,早期用 int 0x80 软中断)→ CPU 切换到内核态,跳到内核预设入口 → 内核保存用户态现场,按调用号查系统调用表(sys_call_table)分发到 sys_read 等实现 → 执行完毕恢复现场,通过 sysret/中断返回切回用户态,返回值交还程序。整个过程有明确的性能代价:特权级切换、现场保存、部分实现还伴随缓存/TLB 影响,所以频繁的小系统调用是性能杀手(用缓冲 IO、批量调用缓解)。追问方向:vDSO 如何让 gettimeofday 这类调用不进内核、中断与系统调用的入口有何异同。