IPC 程序間通訊 剖析

2021-10-24 02:47:21 字數 883 閱讀 3270

程序之間需要進行同步和資料交換

程序都要依靠核心來實現彼此之間的同步以及通訊。 —— 《linux 核心》第十九章 程序通訊 第一段最後一句。

每個程序各自有不同的使用者位址空間,任何乙個程序的全域性變數,在另乙個程序中都看不到,所以程序之間要交換資料必須通過核心。

程序1把資料從使用者空間拷貝到核心緩衝區,程序2再從核心緩衝區把資料讀走,核心提供的這種機制稱為程序間通訊。

通過訊號量與其他程序進行同步(訊號量)

向其他程序傳送訊息或者從其他程序接收訊息(訊息佇列)

和其他程序共享一段記憶體區(共享記憶體)

ipc資料結構是在程序請求 ipc 資源(訊號量、訊息佇列或者共享記憶體區)時動態建立的。

每個 ipc 資源都是持久的:除非被程序顯式地釋放,否則永遠駐留在記憶體中(直到系統關閉)。

包括那些不共享祖先程序所建立資源的程序。

由於乙個程序可能需要同型別的多個 ipc 資源,因此每個新資源都是使用乙個 32 位的 ipc 關鍵字來標識的。

ipc 識別符號由核心分配給 ipc 資源,在系統內部是唯一的,而 ipc 關鍵字可以由程式設計師自由地選擇。

當兩個或者更多的程序要通過乙個 ipc 資源進行通訊時,這些程序都要引用該資源的 ipc 識別符號。

根據新資源是訊號量、訊息佇列還是共享記憶體區,分別呼叫 semget()、msgget() 或者 shmget() 函式建立 ipc 資源。

這三個函式的主要目的都是從 ipc 關鍵字(作為第乙個引數傳遞)中匯出相應的 ipc 識別符號,程序以後就可以使用這個識別符號對資源進行訪問。

如果還沒有 ipc 資源和 ipc 關鍵字相關聯,就建立乙個新的資源。

程序間通訊IPC

這兩天學習了 unix 的程序間通訊 ipc,這裡面有幾個很重要的基本概念,特別是訊息佇列和我的畢設很有關係,因此多說幾句。以前學習的程序間通訊方式,一般都是經由 fork 或exec 開啟檔案,或經過檔案系統。而 ipc是程序間通訊方式的統稱。下面一一道來。一 管道 管道是最老的 ipc形式。管道...

程序間通訊 IPC

part2 index1.html part2 index2.html linux至少支援如下ipc機制 同時支援posix和system v方式 streams ipc機制,linux本身不支援,有乙個單獨的安裝包 可以跨pc的程序通訊 互斥鎖或條件變數 動態初始化 不能使靜態分配 在共享記憶體中...

程序間通訊IPC

乙個大型的應用系統,往往需要眾多程序協作,程序間通訊的重要性顯而易見。首先,程序間通訊至少可以通過傳送開啟檔案來實現,不同的程序通過乙個或多個檔案來傳遞資訊,事實上,在很多應用系統裡,都使用了這種方法。但一般說來,程序間通訊 ipc interprocess communication 不包括這種似...