我已经知道mprotect()syscall在bsd中有4种保护模式,但我的问题是如何实现这种保护(硬件或软件实现)?
假设我们将特定页面的保护设置为prot_none,这是真的取决于我使用的硬件还是通过在页面表中的指定页面上设置一些标志来实现某种软件技巧。
硬件上的这种保护似乎在MMU上失效,但我不确定。
有关mprotect和分页的更多信息,请访问:
BSD man page
Paging - Wiki

最佳答案

页面保护是在硬件和软件辅助下实现的。基本上,您希望实现以下目标:
当用户进程想要对特定内存页执行某些操作时(硬件对此负责),自动输入内核上下文。
让内核代码对访问过程做一些事情,以维护mprotect保证(这发生在从p.1中触发的硬件陷阱处理程序调用的软件中)。
是的,没有mmu p.1就无法工作,因此在uclinux(设计用于支持没有mmu的处理器的linux版本)上,mprotect没有实现(因为不可能透明地调用p.2中的代码)。

关于linux - mprotect:如何实现内存保护,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23903221/

10-11 19:35
查看更多