第五十二章:系统调用
复习
- 用户态程序不能直接操作关键硬件和全局资源。
TL;DR
- 系统调用是应用请求内核服务的受控入口。
- CPU 在调用时切换到内核态,内核检查请求后再返回用户态。
正文
应用想读文件时,不该自己驱动磁盘;它会发出 read 一类系统调用。这不是普通函数调用:程序把请求编号和参数放在规定位置,执行一条特殊指令;CPU 保存现场并切换到内核态,跳入内核的调用处理程序。
内核先确认参数是否合法、文件是否允许访问,再完成实际工作,把结果交回应用并恢复用户态。这样,方便的“读文件”留在应用手中,危险的设备操作仍被内核集中控制。
系统调用是操作系统向应用露出的门。走进这扇门前,先要分清桌面上的程序文件和正在运行的那份实体。
思考题
系统调用为什么不能只是用户态中的普通库函数?
小结
- 系统调用在用户态与内核态之间建立受控通道。
- 内核负责验证请求并操作受保护资源。
思考题答案(仅供参考)
普通函数没有改变 CPU 特权级的能力,不能安全地执行只有内核态允许的操作。
协议
本文采用 CC BY-NC-SA 4.0 协议发布。