一个系统如何能够限制进程能够写入内存集的区域-只读?特别是,假设硬件是而不能为内核执行这些权限,Linux内核如何执行这些权限?
我最初的猜测是,这些内存区域没有映射到进程的地址空间,因此每当进程尝试访问这些内存区域时,都会生成一个页面错误,这使得内核能够控制所有事务是否正常。我意识到这可能会大大降低性能,所以我在这里寻求帮助,了解是否有一种更聪明的方法来强制执行这些权限。
发布于 2015-07-24 06:08:57
执行内存保护的任务由MMU来处理。我不知道任何架构确实有MMU,但没有硬件支持内存权限。因此,我想我们在这里谈论的是无MMU系统。
长期以来,Linux需要MMU才能工作。如果你愿意的话,它仍然能做到,但这是对无MMU系统的一些支持。它来自一段时间前在上游合并的uClinux项目。但是,用NOMMU
编译的系统不能像普通的Linux系统那样工作(许多应用程序不能在它上工作),没有内存保护是它的局限性之一。
要直接回答您的问题,Linux上的内存保护取决于对它的硬件支持。如果它不存在,内核就不会试图模仿它。
现在,您的想法似乎很好(如果不切实际),但要做到这一点,您仍然需要虚拟内存支持,这需要某种MMU。如前所述,我不认为有任何系统确实有MMU,但不支持内存保护。不管怎样,Linux似乎不支持这种情况。
发布于 2015-07-25 00:33:01
在非分段系统中,有四种方法可以阻止对内存的访问,以限制对页面的访问。
页面表的设置是用硬件完成的。验证对表的访问是在硬件中完成的。
https://stackoverflow.com/questions/31594301
复制相似问题