2

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

有没有办法改变这种行为,尤其是在某些 UNIX 系统中。更清楚地说,让两个进程共享相同的地址空间?或者使来自同一进程的两个线程具有不同的地址空间?

4

2 回答 2

2

是的。谷歌 gvisor 或 rump 有关如何执行此操作的示例。简短的故事是你从一个母亲进程开始,它 forks() 来创建新的孩子。这些孩子由 ptrace() 管理,将它们与内核隔离开来。然后,母进程在它认为合适的时候操纵子进程的地址空间;使它们相同是一种选择。

通常涉及一些引导技巧,所以当一个孩子调用 fork() 时,Mother 分叉并执行一个已知的二进制文件(re:aspace 布局),然后继续将原始 fork()ers aspace 克隆到新的.

于 2018-12-18T21:54:04.160 回答
1

我想你应该读一下这个

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

于 2018-12-18T17:05:56.263 回答