linux 共享記憶體

2021-06-25 16:25:05 字數 766 閱讀 6079

共享記憶體解決的問題是:

任意兩個程序之間的通訊如果是有名管道,是沒有辦法對管道中間的資料獲取讀和寫操作的,只能是兩段的資料,那麼如何對所有的資料進行操作---共享記憶體

共享記憶體也是通過核心來完成

命令:ipcs –m/-p/-s

共享記憶體的工作機制如下所示:

首先linux系統執行的每乙個程式,都是乙個程序,核心會給每乙個程序分配一些資源,叫做pcb(程序控制塊)

每乙個程序事先要申請能夠訪問核心態中的一塊記憶體單元,這塊單元就是共享塊,可以是乙個檔案,對該檔案進行讀寫操作

但是每乙個程序對該檔案的操作如何做到是同乙個檔案呢?

這裡有乙個key值,用來標識該檔案,可以使用ls –i命令檢視,利用該key值就可以對該共享記憶體進行操作

對共享記憶體的處理過程

使用過程:

1、先獲得key  

ftok()可以得到乙個key值

2、向核心申請(類似malloc)

shmget()

申請的size必須是記憶體頁的整數倍

key可以從ftok得到,也可以為ipc_private

3、將申請到的共享記憶體對映到使用者空間(繫結)

4、像使用普通記憶體空間一樣使用此空間

5、如果不再使用,要先將位址對映解除掉

6、釋放申請的共享記憶體

7、刪除共享記憶體標記  

Linux 共享記憶體

一 概念 共享記憶體是被多個程序共享的一部分物理記憶體,是程序間共享資料的最快的一種方法。二 實現 分為兩個步驟 1 建立共享記憶體。2 對映共享記憶體。1 建立 int shmget key t key,int size,int shm 當key的取值為 ipc private 時,將建立一塊新的...

linux共享記憶體

linux共享記憶體使用 標頭檔案 include 1 建立共享記憶體 int shmget key t key,size t size,int shm 建立成功以後會返回乙個共享記憶體id,建立失敗返回 1。2 獲取共享記憶體 void shmat int shmid,const void shm...

LINUX共享記憶體

共享記憶體允許兩個或多個程序共享給定的儲存區域。它是程序間共享資料最快的一種方法。通過共享記憶體,程序可以將一段記憶體連線到自己的儲存空間。所有程序都可以訪問共享記憶體中的資料,共享記憶體中的任何修改,所做的改動將立刻被可以訪問該段共享記憶體的程式看到。共享記憶體並未給資料提供同步機制,所以常常需要...