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

相關問題