在同一内存空间中打开两个程序
Opening two programs in a same memoryspace
是否可以将两个完全独立的程序启动到同一个内存区域范围内?
例如,我有 skype.exe
和 opera.exe
,我想以允许它们共享公共内存的方式启动它们。对我来说听起来像是穿线。
如果它们是两个独立的程序运行那么你必须确保数据在它们之间以独立的方式传递。假设这两个程序是 运行,第一个程序计算第二个程序需要的一些数据。最简单的做法是将第一个程序的数据打印到一个文件中,并在文件末尾带有一些状态(以表明其他程序可以安全地开始读取它)。在另一个程序中,您有一个 while 循环,它每隔一段时间检查该文件中最后一行的状态。
另一种选择是使用一些库,例如 MPI,它实现了消息传递协议。
同时提出的问题比较多,我试着剖析一下:
- 现代OS上的进程定义有自己的虚拟地址space。所以 运行 在同一个地址 space 中设置两个进程,如果不修改 OS 就不可能发生。
- 即使可以进行这样的修改,这也不是一个完美的想法:对线程之间共享的内存的访问由显式内置于线程中的同步原语控制。没有这样的机制来管理两个进程之间的内存访问,没有明确设计所以
- 如果在进程之间如此设计共享内存根本不需要它们 运行 在同一虚拟地址 space 中:共享内存段几乎存在于所有现代 OS 以促进这一点。同样,必须明确设计这些进程才能使用此功能。
是否可以将两个完全独立的程序启动到同一个内存区域范围内?
例如,我有 skype.exe
和 opera.exe
,我想以允许它们共享公共内存的方式启动它们。对我来说听起来像是穿线。
如果它们是两个独立的程序运行那么你必须确保数据在它们之间以独立的方式传递。假设这两个程序是 运行,第一个程序计算第二个程序需要的一些数据。最简单的做法是将第一个程序的数据打印到一个文件中,并在文件末尾带有一些状态(以表明其他程序可以安全地开始读取它)。在另一个程序中,您有一个 while 循环,它每隔一段时间检查该文件中最后一行的状态。
另一种选择是使用一些库,例如 MPI,它实现了消息传递协议。
同时提出的问题比较多,我试着剖析一下:
- 现代OS上的进程定义有自己的虚拟地址space。所以 运行 在同一个地址 space 中设置两个进程,如果不修改 OS 就不可能发生。
- 即使可以进行这样的修改,这也不是一个完美的想法:对线程之间共享的内存的访问由显式内置于线程中的同步原语控制。没有这样的机制来管理两个进程之间的内存访问,没有明确设计所以
- 如果在进程之间如此设计共享内存根本不需要它们 运行 在同一虚拟地址 space 中:共享内存段几乎存在于所有现代 OS 以促进这一点。同样,必须明确设计这些进程才能使用此功能。