可以设置虚拟地址空间限制吗?

时间:2014-10-15 13:19:37

标签: linux virtual-memory

我当前的问题是我必须决定内存地址是属于进程A还是B.因此,我想到的唯一解决方案是在不同的虚拟地址空间中运行进程(我的意思是进程应该使用不同的虚拟地址范围)但我不知道这是否可行。

示例:
假设进程A有自己的虚拟地址空间,并使用0到10范围内的虚拟地址。进程B类似地拥有自己的虚拟地址空间,并使用相同范围内的虚拟地址。现在我有第三方获得这样的地址,并且必须决定它属于哪个进程。如果进程A只使用0到4范围内的虚拟地址,进程B只能使用5到10范围内的虚拟地址,那么第三方可以轻松判断该地址属于哪个进程。

1 个答案:

答案 0 :(得分:0)

根据定义,每个(Linux或Posix)process都有自己的(虚拟)address space,并在virtual memory中执行其(用户登陆)指令。因此,进程A中的地址0x1234567不会引用与进程B中的相同地址0x1234567相同的内存。

当然,物理地址是不同的,这要归功于MMU

因此,不同的进程具有不同的地址空间。他们可能会使用shared memory分享一些细分,但这并不常见。参见例如shm_overview(7)& mmap(2)

了解proc(5)并尝试

cat /proc/self/maps

了解运行cat命令的进程的地址空间。然后尝试

cat /proc/$$/maps

了解shell进程的地址空间,

cat /proc/$(pidof Xorg)/maps

了解Xorg服务器的地址空间。

另请阅读Advanced Linux Programming

请注意,只有Linux kernel管理和关注物理地址(RAM模块的地址)。详细了解MMU s。

带有RLIMIT_AS的{​​{3}}系统调用可用于限制地址空间。