【问题标题】:mprotect : how is memory protection implementedmprotect : 内存保护是如何实现的
【发布时间】:2014-07-17 04:20:35
【问题描述】:
我已经知道 mprotect() 系统调用在 BSD 中有 4 种保护模式,但我的问题是这种保护是如何实现的(硬件或软件实现)?
假设我们将特定页面的保护设置为 PROT_NONE ,这真的取决于我正在使用的硬件还是通过在页表中的指定页面上设置一些标志来某种软件技巧。
似乎这种对硬件的保护依赖于MMU,但我不确定。
您可以在以下位置找到有关 mprotect 和分页的更多信息:
BSD man page
Paging - Wiki
【问题讨论】:
标签:
linux
paging
bsd
mmu
mprotect
【解决方案1】:
页面保护通过软件辅助在硬件中实现。基本上,您要实现以下目标:
- 当用户进程想要对特定内存页执行某些操作时自动进入内核上下文(硬件负责此操作)。
- 让内核代码对访问进程执行某些操作,以维护
mprotect 保证(这发生在从第 1 页中触发的硬件陷阱处理程序调用的软件中)。
是的,没有 MMU p.1 将无法工作,因此在 ucLinux(旨在支持没有 MMU 的处理器的 Linux 版本)mprotect 上没有实现(因为不可能从 p.1 调用代码。 2 透明)。