Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

第五十一章:内核态与用户态

复习

  • 操作系统需要管理所有程序共享的硬件资源。

TL;DR

  • CPU 用不同特权级区分内核代码与普通程序。
  • 用户态程序不能直接执行危险指令或任意访问硬件。

正文

  若任意程序都能关闭中断、改写页表或直接控制磁盘,它一次错误就可能伤及整个系统。仅靠“程序员请小心”不够,保护必须由 CPU 执行。于是处理器提供至少两种运行状态:内核态拥有较高权限,用户态只能执行受限指令。

  普通应用在用户态运行。它尝试进行特权操作时,CPU 会阻止它,并转入内核预设的处理流程。操作系统因此可以规定谁能访问设备、谁能改动内存映射。

  隔离不是为了为难程序,而是让不相干的程序可以放心共处。可应用仍需打开文件、申请内存。它怎样在不越界的前提下请内核代劳?

思考题

为什么让应用自己检查“我是否有权限”不足以形成保护?

小结

  • 内核态可执行特权操作,用户态受到限制。
  • 权限检查依赖 CPU 强制执行,不能只依赖应用自觉。

思考题答案(仅供参考)

  有问题或恶意的应用可以跳过自己的检查;只有硬件拒绝越权指令,规则才无法被它单方面取消。

协议

本文采用 CC BY-NC-SA 4.0 协议发布。