1

我已经知道 mprotect() 系统调用在 BSD 中有 4 种保护模式,但我的问题是这种保护是如何实现的(硬件或软件实现)?

假设我们将特定页面的保护设置为 PROT_NONE ,它真的取决于我正在使用的硬件还是通过在页表中的指定页面上设置一些标志来某种软件技巧。

似乎这种对硬件的保护依赖于我们拥有的MMU,但我不确定。

您可以在以下位置找到有关 mprotect 和分页的更多信息:

BSD 手册页

分页 - 维基

4

1 回答 1

1

页面保护通过软件辅助在硬件中实现。基本上,您要实现以下目标:

  1. 当用户进程想要对特定内存页面做某事时自动进入内核上下文(硬件对此负责)。
  2. 让内核代码对访问进程做一些事情以维护mprotect保证(这发生在从 p.1 中触发的硬件陷阱处理程序调用的软件中)。

是的,没有 MMU p.1 将无法工作,因此在 ucLinux(旨在支持没有 MMU 的处理器的 Linux 版本)mprotect上没有实现(因为不可能透明地从 p.2 调用代码)。

于 2014-05-28T05:40:16.217 回答