mprotect:如何实现内存保护

时间:2014-05-28 05:10:03

标签: linux paging bsd mmu mprotect

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

让我们说如果我们将特定页面的保护设置为PROT_NONE,它是否真的取决于我使用的硬件或者它的一些软件技巧,通过在指定的上设置一些标志页表中的页面。

似乎我们对MMU上的硬件保护有所不同,但我对此并不确定。

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

BSD man page

Paging - Wiki

1 个答案:

答案 0 :(得分:1)

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

  1. 当用户进程想要使用特定内存页面执行某些操作时,自动输入内核上下文(硬件负责此操作)。
  2. 让内核代码对访问过程执行某些操作,以维护mprotect保证(这种情况发生在从第1页中触发的硬件陷阱处理程序调用的软件中)。
  3. 是的,没有MMU p.1就行不通,所以在ucLinux(一个支持没有MMU的处理器的Linux版本)上没有实现mprotect(因为它不可能调用来自第2页透明)。