2012-11-06 39 views
5

當我瀏覽shmat的手冊頁時。它被描述爲API的原始功能是將與其相關聯的存儲器段與其調用進程的地址空間相關聯。用於附加共享內存段的shmat

我的問題如下。

  • 該術語附加看起來通用於我。我發現在理解連接涉及到的底層活性時有困難。
  • 這是什麼意思映射一段內存

回答

1

這裏有一個很好的解釋:http://www.makelinux.net/alp/035

「在Linux中,每個進程的虛擬內存被分爲網頁每個進程從內存中的地址保持映射到這些虛擬內存頁面,其中包含實際數據雖然,每個進程都有自己的地址,多進程的映射可以指向同一個頁面,允許的內存共享」

+0

好像他們錯了(反過來)。每個進程都有自己的虛擬地址空間,並維護從虛擬空間到數據所在物理內存中頁面幀的映射。 –

2

使用它作爲char *ptr=shmat(seg_id,NULL,0); 它通過功能shmget()與包含此過程中高度重視創建的段ID以上代碼。

seg_id是新建段的段ID NULL意味着操作系統將負責該段的起始地址的用戶的代表 0read/write

每當一個過程附加到共享內存標誌那麼它必須被拆卸以便使其他進程可以通過附連到該段訪問它

以分離(如果資源的鎖定機構是存在的。):shmdt(ptr);