【发布时间】:2020-12-05 05:14:40
【问题描述】:
我最近在处理与虚拟内存相关的系统调用。从mmap 的手册中我知道,当设置MAP_FIXED 标志时,它可以非常强大,在内存中到处创建新的映射。
MAP_FIXED
不要将 addr 解释为提示:将映射准确地放置在 那个地址。 addr 必须适当对齐:对于大多数 架构页面大小的倍数就足够了; 然而,一些架构可能会施加额外的 限制。 如果addr和len指定的内存区域 重叠任何现有映射的页面,然后重叠 部分现有映射将被丢弃。如果 指定的地址不能使用,mmap() 会失败。 渴望便携的软件应该使用 MAP_FIXED 小心地标记,记住一个确切的布局 允许进程的内存映射发生显着变化 内核版本、C 库版本和操作 系统发布。仔细阅读这个标志的讨论 在笔记中!
我的问题是,考虑到mmap 可以通过使用相同的fd 和offset 创建新映射并设置你想要新的prot?
在我看来,所有关于VM的操作最终都可以通过mmap和munmap来完成,因为这些操作基本上只是在玩页表。有人能告诉我这是不是一个坏主意吗?
【问题讨论】:
标签: linux memory-management system-calls mmap mprotect