我当前的问题是我必须决定内存地址是属于进程A还是B.因此,我想到的唯一解决方案是在不同的虚拟地址空间中运行进程(我的意思是进程应该使用不同的虚拟地址范围)但我不知道这是否可行。
示例:
假设进程A有自己的虚拟地址空间,并使用0到10范围内的虚拟地址。进程B类似地拥有自己的虚拟地址空间,并使用相同范围内的虚拟地址。现在我有第三方获得这样的地址,并且必须决定它属于哪个进程。如果进程A只使用0到4范围内的虚拟地址,进程B只能使用5到10范围内的虚拟地址,那么第三方可以轻松判断该地址属于哪个进程。
答案 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}}系统调用可用于限制地址空间。