我最近正在处理与虚拟内存相关的系统调用。从我的手册中mmap
我知道,设置标志时它可以非常强大MAP_FIXED
,在内存中的任何地方创建新的映射。
MAP_FIXED
不要将 addr 解释为提示:将映射放置在该地址。addr 必须适当对齐:对于大多数体系结构,页面大小的倍数就足够了;但是,某些架构可能会施加额外的限制。 如果 addr 和 len 指定的内存区域与任何现有映射的页面重叠,则现有映射的重叠部分将被丢弃。如果无法使用指定的地址,mmap() 将失败。渴望可移植的软件应谨慎使用 MAP_FIXED 标志,记住进程内存映射的确切布局允许在内核版本、C 库版本和操作系统版本之间发生显着变化。仔细阅读 NOTES 中关于这个标志的讨论!
我的问题是,为什么有一个不同的系统调用mprotect
from mmap
,因为它可以通过创建一个具有相同andmmap
的新映射来完成完全相同的工作,并设置你想要的新的?fd
offset
prot
在我看来,所有关于 VM 的操作最终都可以用mmap
and来完成munmap
,因为这些操作基本上只是在玩页表。有人可以告诉我这是否是个坏主意吗?