系统调用是有一个 CPU 运行等级的提升问题. 用户代码在 3 级, 操作系统代码在 0 级.
open 是对在 Ring 3 级对系统调用的一个包装. 所有的系统函数只有一个系统调用入口, int $0x80, 在这条指令之前把调用的函数对应的功能号放到 %eax 寄存器. 这条指令产生一个中断, CPU 切换到中断处理程序, 运行等级从 Ring 3 级切换到 Ring 0 级. 开始在内核中运行. 内核再根据 %eax 中的功能号来调用不同的函数. sys_open 就是内核中处理 open 对应的功能号的函数.