Linux 程序間通訊 共享記憶體

2021-08-21 08:27:32 字數 1084 閱讀 8935

基本概念

共享記憶體區域是被多個程序共享的一部分物理記憶體,如果多個程序都把該記憶體區域對映到自己的虛擬位址空間,則這些程序就都可以直接訪問該記憶體區域,從而可以通過該區域進行通訊。共享記憶體是程序間共享資料的一種更快的方法,一旦這樣的記憶體對映到共享它的程序位址空間,這些程序間資料傳遞不在涉及到核心,換句話說是程序不在通過執行進入到核心的系統呼叫來傳遞彼此的資料。乙個程序向共享記憶體區域寫入了資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容,這塊共享虛擬記憶體的頁面,出現在每乙個共享該頁面程序的頁表中,但是它不需要在所有程序中的虛擬記憶體中都有相同的虛擬位址

共享記憶體與其他ipc 進行比較

優點:

缺點

共享記憶體有關函式

獲取key值

建立或開啟共享記憶體

將共享記憶體對映到自己的虛擬位址空間

將共享記憶體解除安裝掉

控制共享記憶體

命令列檢視刪除共享記憶體段

子程序向共享記憶體寫訊息,父程序讀

執行結果如下:

共享記憶體實現程序間通訊的原理共享記憶體就是在物理記憶體上的一塊空間,多個程序可以通過相同的方式得到相同的鍵值,在通過shmget()傳入相同的鍵值獲得相同的共享記憶體段,再通過shmat()將共享記憶體的位址(實體地址)對映到自己的虛擬位址空間,這樣就可以直接將資訊寫到共享記憶體區(實體地址)其他有相同共享記憶體識別符號的程序也可以向共享記憶體段寫入資訊,或者讀取資訊,這樣就實現了程序間通訊的目的

Linux程序間通訊 共享記憶體

共享記憶體是執行在同一臺機器上的程序間通訊最快的方式,因為資料不需要在不同的程序間複製。通常由乙個程序建立一塊共享記憶體區,其餘程序對這塊記憶體區進行讀寫。共享記憶體往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。首先要用的函式是shmget,它獲得乙個共享儲存識別符號。i nclu...

Linux程序間共享記憶體通訊

使用共享記憶體基本分四個步驟 獲得共享記憶體 shmget 對映共享記憶體shmat 解除對映shmdt 刪除共享記憶體shmctl 於是自己在網上找來了乙個例子看了下,並且用虛擬機器單獨跑了下共享記憶體的經典例程看了下,才知道了自己的問題出現 了 發現有時候只要自己親自將程式一步一步的去測,才知道...

Linux程序間通訊 共享記憶體

之前提到了程序間通訊的管道,訊息佇列,訊號量,然後其中訊號量是pv操作,操控的是乙個共享資源。在我們提到的ipc模組中,訊息佇列針對的是資料單元的資訊傳送,管道不屬於system v ipc的部分,所以按照乙個作業系統的整體來說,他應該也有著乙個關於位元組流的訊息傳輸,並且要比之前都要快,還要跟我們...