Linux系統中的程序間通訊方式

2021-08-14 04:00:47 字數 1704 閱讀 1035

unix程序間通訊方式: 包括管道(pipe), 有名管道(fifo), 和訊號(signal)。

管道(pipe):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係(父子程序)的程序間使用。另外管道傳送的是無格式的位元組流,並且管道緩衝區的大小是有限的(管道緩衝區存在於記憶體中,在管道建立時,為緩衝區分配乙個頁面大小)。

有名管道 (fifo): 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。

訊號(signal): 訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。

system v程序通訊方式:包括訊號量(semaphore), 訊息佇列(message queue), 和共享記憶體(shared memory)。

訊號量(semaphore):訊號量是乙個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段。

訊息佇列(message queue):訊息佇列是由訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

共享記憶體(shared memory ):共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問。共享記憶體是最快的 ipc 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號量,配合使用,來實現程序間的同步和通訊。

rpc:remote procedure call 遠端過程呼叫

socket:當前最流行的網路通訊方式, 基於tcp/ip協議的通訊方式.

system v是at&t的第乙個商業unix版本(unix system iii)的加強。傳統上,system v被看作是兩種unix「風味」之一(另乙個是bsd)。為了提供與其它系統的相容性,linux也支援三種system ⅴ的程序間通訊機制:訊息、訊號量(semaphores)和共享記憶體,linux對這些機制的實施大同小異。我們把訊號量、訊息和共享記憶體統稱system v ipc的物件,每乙個物件都具有同樣型別的介面,即系統呼叫。就像每個檔案都有乙個開啟檔案號一樣,每個物件也都有唯一的識別號,程序可以通過系統呼叫傳遞的識別號來訪問這些物件,與檔案的訪問一樣,對這些物件的訪問也要驗證訪問許可權,system v ipc可以通過系統呼叫對物件的建立者設定這些物件的訪問許可權。

鎖機制:包括互斥鎖、條件變數、讀寫鎖

互斥鎖提供了以排他方式防止資料結構被併發修改的方法。

讀寫鎖允許多個執行緒同時讀共享資料,而對寫操作是互斥的。

條件變數可以以原子的方式阻塞程序,直到某個特定條件為真為止。對條件的測試是在互斥鎖的保護下進行的。條件變數始終與互斥鎖一起使用。

訊號量機制(semaphore):包括無名執行緒訊號量和命名執行緒訊號量

訊號機制(signal):類似程序間的訊號處理

執行緒間的通訊目的主要是用於執行緒同步,所以執行緒沒有像程序通訊中的用於資料交換的通訊機制。

Linux系統中的程序 執行緒間通訊

linux系統中的程序間通訊方式主要以下幾種 同一主機上的程序通訊方式 unix程序間通訊方式 管道 pipe 有名管道 fifo 和訊號 signal system v程序通訊方式 訊號量 semaphore 訊息佇列 message queue 共享記憶體 shared memory 網路主機間...

Linux程序間通訊

程序間通訊 ipc interprocess communication 基本機制 訊號 管道及命名管道 訊息佇列 共享主存 訊號量 套接字。訊號 全稱軟中斷訊號,是在軟體層次上對中斷機制的一種模擬,它也是程序間通訊機制中唯一的非同步通訊機制。linux訊號處理函式可分為訊號安裝函式 訊號傳送函式和...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...