2012-03-02 46 views
2

我有家庭作业问题:进程如何引用不在其地址空间中的对象(例如文件或其他进程)?

Explain how a process can refer to objects that are not in its 
address space (for example, a file or another process)? 

我知道,每个进程都与定义在这个过程中(got that from this book)访问所有存储资源映射的地址空间中创建。我认为这个问题的第二部分没有意义。一个进程如何引用另一个进程的对象?操作系统是不是想限制它?也许我没有正确理解这个问题。无论如何,如果我正确地理解了这个问题,唯一可行的方法就是使用我相信的内核。

+0

对于特定的系统调用(例如mmap,shm等),操作系统可以选择设置1:N的页面映射,而不是通常的1:1。这是基于每个页面的,所以通常的规则不会被“违反”,特定的例外被授予。 – Flexo 2012-03-02 17:00:21

回答

1

如果你是在一般意义上的问题,那么它是一个没有。在正常情况下,操作系统不允许一个进程访问另一个进程的虚拟地址空间。 然而,有些方法可以创建一个受控环境,使用各种技术可以完成这样的事情。

一个完美的例子是调试器。它使用进程跟踪机制(如从/ proc文件系统读取或使用ptrace()系统调用)获取对另一个地址空间的读写权限。

还有一个共享内存的概念,其中一个特定的内存片段在两个进程之间显式共享,并且可以通过共享内存对象进行控制。

0

我已经研究过了,并且对问题的文件部分有了答案。

第一一个地址空间的是,一个螺纹 可以参考地址的集合。通常这些地址引用内存中的可执行文件 。某些操作系统允许程序员使用 地址空间中的地址读取和写入文件的内容。这是通过打开文件,然后将文件中的每个字节绑定到地址空间中的地址来完成的。

问题本的第二部分是什么,我会回答:

大多数操作系统将不允许从另一个 过程中阅读地址。这意味着巨大的安全风险。我还没有听说过任何 操作系统,它使您可以从当前进程不属于的 线程读取数据。所以总之我相信这不会是 成为可能。

1

您可以作为调试器附加到应用程序。或者如果使用Windows,你可以使用windows hooks