步骤 4 / 7
内核检查参数,然后代办
内核不信任程序传来的任何东西,先检查再干活。
内核先确认请求合理:这个文件描述符你打开过吗?你给的内存地址真的属于你吗? 不合法就返回错误(比如 EBADF、EFAULT),而不是让整个系统崩溃,这和后端从不信任前端参数是同一个道理。 检查通过后,内核才通过驱动把文字交给终端。
操作系统
程序不能直接碰硬件,想读写文件、上网、打印,都得通过“系统调用”这扇门请内核代办。
以 Linux(x86-64)上一个程序往终端打印一行字为例。
步骤 4 / 7
内核不信任程序传来的任何东西,先检查再干活。
内核先确认请求合理:这个文件描述符你打开过吗?你给的内存地址真的属于你吗? 不合法就返回错误(比如 EBADF、EFAULT),而不是让整个系统崩溃,这和后端从不信任前端参数是同一个道理。 检查通过后,内核才通过驱动把文字交给终端。
| 当前状态 | 发生了什么 |
|---|---|
| 用户态 | 程序想打印文字,但无权直接操作硬件 |
| 用户态 | 程序发起 write 系统调用 |
| 用户态 → 内核态 | CPU 切换模式,内核接手 |
| 内核态 | 检查参数,通过后驱动硬件完成输出 |