有没有办法强迫一个进程共享另一个进程的地址空间?

时间:2018-12-18 16:30:35

标签: multithreading unix process thread-safety address-space

这是一个纯粹的理论问题。就我而言,每个进程具有不同的寻址空间,并且一个进程中的每个线程共享相同的内存空间?

是否存在一种方法,尤其是在某些UNIX系统中,可以更改该行为。更清楚地说,要使两个进程共享相同的地址空间? 还是要使来自同一进程的两个线程具有不同的地址空间?

2 个答案:

答案 0 :(得分:1)

我认为您应该阅读this

共享内存-是可以由多个程序同时访问的内存,目的是在它们之间提供通信或避免冗余副本。共享内存是在程序之间传递数据的有效方法。

答案 1 :(得分:1)

是的。有关如何执行此操作的示例,请使用Google gvisor或臀部。简而言之,您将从“母亲”流程开始,该流程将forks()创建新的子代。这些子项由ptrace()进行管理,该函数将其与内核隔离。然后,母进程会根据需要操纵子进程的地址空间。使它们相同是一种选择。

通常涉及一些引导技巧,因此当孩子调用fork()时,母亲会分叉并执行一个已知的二进制文件(例如:空格布局),然后继续将原始的fork()ers复制到新的。