步骤 2 / 7
发起系统调用:敲响内核的门
系统调用是程序进入内核的唯一受控入口。
程序调用 printf,最终由 C 库(glibc)执行 x86-64 的 syscall 指令,并带上“我要哪种服务”的编号。 这条指令触发“陷入”,把控制权交给内核。 程序只能说“我要什么”,跳到内核的哪段代码由内核事先定好;用 strace 就能看到一个程序发出的全部系统调用。
操作系统
程序不能直接碰硬件,想读写文件、上网、打印,都得通过“系统调用”这扇门请内核代办。
以 Linux(x86-64)上一个程序往终端打印一行字为例。
步骤 2 / 7
系统调用是程序进入内核的唯一受控入口。
程序调用 printf,最终由 C 库(glibc)执行 x86-64 的 syscall 指令,并带上“我要哪种服务”的编号。 这条指令触发“陷入”,把控制权交给内核。 程序只能说“我要什么”,跳到内核的哪段代码由内核事先定好;用 strace 就能看到一个程序发出的全部系统调用。
| 当前状态 | 发生了什么 |
|---|---|
| 用户态 | 程序想打印文字,但无权直接操作硬件 |
| 用户态 | 程序发起 write 系统调用 |