【问题标题】:Two processes with same virtual and physical address space in linux(shared huge pages)linux中具有相同虚拟和物理地址空间的两个进程(共享大页面)
【发布时间】:2015-11-06 21:22:52
【问题描述】:
我知道共享内存的创建(使用普通页面),其中创建的进程的虚拟地址和附加到它的进程的虚拟地址是不同的。但它们在内部会映射到同一个物理地址帧。
在我们的项目中,我们分配大页面(连续的和不可交换的内存),并使用第三方 API(英特尔 DPDK)来创建/附加共享内存(从大页面)。我观察到访问大页面的虚拟地址在所有进程中都是相同的。
这可能吗?我很想知道这怎么可能?
【问题讨论】:
标签:
linux
memory
memory-management
operating-system
【解决方案1】:
两个进程的虚拟地址相同!没错!主进程映射虚拟地址和物理地址后,将映射信息写入文件;从进程读取文件并做同样的映射!
【解决方案2】:
如果您只想知道来自两个进程的相同虚拟地址可以映射到相同的物理页面,那么答案是肯定的。在这种情况下没有任何问题。但是,如果在创建共享页面时,您总是为共享物理页面的所有进程获得相同的地址,它是唯一的,但正如您所说您正在使用某些 API,那么它与该 API 功能相关(您的问题的一部分)。如果您确定确实是这种情况,那么在我看来,这是一个可以被利用的漏洞。您应咨询有关当局/专家以传达您的发现。