如何为已分配的页面获取新的虚拟内存地址?

Posted

技术标签:

【中文标题】如何为已分配的页面获取新的虚拟内存地址?【英文标题】:How to a get a new virtual memory address to an already allocated page? 【发布时间】:2015-01-06 23:26:14 【问题描述】:

我可以为已分配的页面接收新的虚拟地址吗?

如果是,系统调用是什么? (最好在linux上)

【问题讨论】:

这似乎是一件很危险的事情。内核可能会处理所有事情,但仍然如此。我想知道您是否有特定的用例? 主要原因是free vul后删除使用。这样原始的虚拟地址将仍然存在并起作用,但将不再指向它们之前引用的内容(因为它将被重写)。 哦,我误会了,我虽然你想要两个不同的虚拟地址同时指向同一个物理页面!对不起。你可能想看看 mremap :linux.die.net/man/2/mremap 【参考方案1】:

不完全确定您在这里问的是什么,但是:

一点研究(第一个答案here)建议您可以通过mmap'ing /proc/PID/mem 在一般情况下执行此操作。没有尝试过,但假设它有效,它将允许您访问调用进程或(取决于安全性)其他进程的内存。

(据我所知)没有直接系统调用允许您在进程的地址空间中针对已分配给不同进程的页面创建新的虚拟地址。

(据我所知)没有直接的系统调用允许您在进程的地址空间中针对已分配给相同进程的页面创建新的虚拟地址,除了mmap 的结果。

关于使用mmap 分配给同一进程的页面,您可能需要查看mremapremap_file_pages

【讨论】:

是否有关于 linux 的内存管理系统调用和接口的通用文档?我尝试搜索但基本上失败了。

以上是关于如何为已分配的页面获取新的虚拟内存地址?的主要内容,如果未能解决你的问题,请参考以下文章

浅谈进程地址空间与虚拟存储空间

Linux系统编程进程地址空间和虚拟地址空间

Microsoft Azure系列之六 如何为Azure 云服务分配保留IP地址

深入理解计算机系统-虚拟内存笔记

虚拟内存

如何更改虚拟内存页面位置?