程序間的通訊方式

2022-08-25 16:06:26 字數 2242 閱讀 5929

一、概念

1、程序的概念

程序是作業系統的概念,每當我們執行乙個程式時,對於作業系統來講就建立了乙個程序,在這個過程中,伴隨著資源的分配和釋放。可以認為程序是乙個程式的一次執行過程。

2、程序通訊的概念

程序使用者空間是相互獨立的,一般而言是不能相互訪問的。但很多情況下程序間需要互相通訊,來完成系統的某項功能。程序通過與核心及其它程序之間的互相通訊來協調它們的行為。

二、程序通訊的應用場景

資料傳輸:乙個程序需要將它的資料傳送給另乙個程序,傳送的資料量在乙個位元組到幾兆位元組之間。

共享資料:多個程序想要操作共享資料,乙個程序對共享資料的修改,別的程序應該立刻看到。

通知事件:乙個程序需要向另乙個或一組程序傳送訊息,通知它(它們)發生了某種事件(如程序終止時要通知父程序)。

資源共享:多個程序之間共享同樣的資源。為了作到這一點,需要核心提供鎖和同步機制。

程序控制:有些程序希望完全控制另乙個程序的執行(如debug程序),此時控制程序希望能夠攔截另乙個程序的所有陷入和異常,並能夠及時知道它的狀態改變。

三、程序通訊的方式

1、管道

管道分為有名管道和無名管道

無名管道:是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係一般指的是父子關係。無名管道一般用於兩個不同程序之間的通訊。當乙個程序建立了乙個管道,並呼叫fork建立自己的乙個子程序後,父程序關閉讀管道端,子程序關閉寫管道端,這樣提供了兩個程序之間資料流動的一種方式。

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

2、訊號量

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

linux提供了一組精心設計的訊號量介面來對訊號進行操作,它們不只是針對二進位制訊號量,下面將會對這些函式進行介紹,但請注意,這些函式都是用來對成組的訊號量值進行操作的。它們宣告在標頭檔案sys/sem.h中。

semget函式

它的作用是建立乙個新訊號量或取得乙個已有訊號量。

semop函式

它的作用是改變訊號量的值。

semctl函式

該函式用來直接控制訊號量資訊。

3、訊號

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

4、訊息佇列

訊息佇列是訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少,管道只能承載無格式位元組流以及緩衝區大小受限等特點。訊息佇列是unix下不同程序之間可實現共享資源的一種機制,unix允許不同程序將格式化的資料流以訊息佇列形式傳送給任意程序。對訊息佇列具有操作許可權的程序都可以使用msget完成對訊息佇列的操作控制.通過使用訊息型別,程序可以按任何順序讀資訊,或為訊息安排優先順序順序。

5、共享記憶體

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

6、套接字

socket,即套接字是一種通訊機制,憑藉這種機制,客戶/伺服器(即要進行通訊的程序)系統的開發工作既可以在本地單機上進行,也可以跨網路進行。也就是說它可以讓不在同一臺計算機但通過網路連線計算機上的程序進行通訊。也因為這樣,套接字明確地將客戶端和伺服器區分開來。套接字的特性由3個屬性確定,它們分別是:型別協議

程序間的通訊方式,執行緒間的通訊方式 程序

當時做筆記的時候 忘了在 看到的了,有時間我再研究研究 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 namedpipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semo...

程序間通訊的方式?執行緒間通訊的方式?

管道 命名管道 訊號量 訊息佇列 訊號及共享記憶體只適用於本地程序間通訊,套接字則可用於遠端通訊,因而一般用於網路程式設計。部分概念解釋 匿名管道是在快取中開闢的輸出和輸入檔案流的空間,只能用於父子關係的程序之間。因為父子程序的輸入和輸出檔案描述符是一致的。命名管道是一種實際存在的fifo檔案,稱作...

程序間通訊方式

謝謝作者 用於程序間通訊 ipc 的四種不同技術 共享記憶體,臨界區,管道,訊息 1.訊息傳遞 管道,fifo,posix和system v訊息佇列 2.同步 互斥鎖,條件變數,讀寫鎖,檔案和記錄鎖,posix和system v訊號燈 3.共享記憶體區 匿名共享記憶體區,有名posix共享記憶體區,...