第五十一章:内核态与用户态
复习
- 操作系统需要管理所有程序共享的硬件资源。
TL;DR
- CPU 用不同特权级区分内核代码与普通程序。
- 用户态程序不能直接执行危险指令或任意访问硬件。
正文
若任意程序都能关闭中断、改写页表或直接控制磁盘,它一次错误就可能伤及整个系统。仅靠“程序员请小心”不够,保护必须由 CPU 执行。于是处理器提供至少两种运行状态:内核态拥有较高权限,用户态只能执行受限指令。
普通应用在用户态运行。它尝试进行特权操作时,CPU 会阻止它,并转入内核预设的处理流程。操作系统因此可以规定谁能访问设备、谁能改动内存映射。
隔离不是为了为难程序,而是让不相干的程序可以放心共处。可应用仍需打开文件、申请内存。它怎样在不越界的前提下请内核代劳?
思考题
为什么让应用自己检查“我是否有权限”不足以形成保护?
小结
- 内核态可执行特权操作,用户态受到限制。
- 权限检查依赖 CPU 强制执行,不能只依赖应用自觉。
思考题答案(仅供参考)
有问题或恶意的应用可以跳过自己的检查;只有硬件拒绝越权指令,规则才无法被它单方面取消。
协议
本文采用 CC BY-NC-SA 4.0 协议发布。