【发布时间】:2014-12-10 14:17:28
【问题描述】:
我目前的问题是我必须决定一个内存地址是属于进程 A 还是 B。因此我想到的唯一解决方案是在不同的虚拟地址空间中运行进程(我的意思是进程应该为他们的虚拟地址使用不同的范围),但我不知道这是否可能。
示例:
假设进程 A 有自己的虚拟地址空间并使用 0 到 10 范围内的虚拟地址。进程 B 同样有自己的虚拟地址空间并使用相同范围内的虚拟地址。现在我有一个第三方获得了这样的地址,并且必须决定它属于哪个进程。如果进程 A 只使用 0 到 4 范围内的虚拟地址,而进程 B 只使用 5 到 10 范围内的虚拟地址,那么第三方可以很容易地判断该地址属于哪个进程。
【问题讨论】:
-
您从哪个角度以及为什么提出这个问题?你在编写内核模块吗(我希望不是)?
-
每个进程都在自己完全独立的(虚拟)地址空间中运行,需要从 0 到 2^32-1(或 2^64-1)的地址。给定一个特定的地址,无法判断该地址来自哪个进程,因为许多不同的进程实际上可能使用该地址。如果您是通过 IPC 或网络或其他方式从进程中获取原始指针,那么您需要认真重新考虑一些设计问题...
-
对,但是是否有可能将使用的虚拟地址限制为例如一个进程为 0 到 2^31,另一个进程为 2^31 到 2^32-1?
-
在一般情况下,不会 - 您可以通过将大量额外选项传递给编译器、汇编器和链接器来实现类似的效果,但它会很脆弱,如果你曾经想要扩展到三个或更多进程,这将是一个令人头疼的问题。更好的解决方案是修复“获得这样一个地址并必须决定它属于哪个进程的第三方”——恕我直言,这是一种非常糟糕的设计方法。也许对你真正想要完成的事情进行更高层次的描述会是一个好主意......
-
嗯,我知道如果没有更多关于我想要完成的信息的信息,这似乎是一个糟糕的设计。无论如何,我对这个“设计”没有影响,只是想知道这种可能性是否存在。您的回答对我有帮助,所以我必须寻找其他方法。
标签: linux virtual-memory