版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

進程通信

百度百科
原創(chuàng)
全球最大中文百科全書
收藏

原因

為了提高計算機系統(tǒng)的效率.增強計算機系統(tǒng)內(nèi)各種硬件的并行操作能力.操作系統(tǒng)要求程序結(jié)構(gòu)必須適應(yīng)并發(fā)處理的需要.為此引入了進程的概念。進程是操作系統(tǒng)的核心,所有基于多道程序設(shè)計的操作系統(tǒng)都建立在進程的概念之上。目前的計算機系統(tǒng)均提供了多任務(wù)并行環(huán)境.無論是應(yīng)用程序還是系統(tǒng)程序.都需要針對每一個任務(wù)創(chuàng)建相應(yīng)的進程。進程是設(shè)計和分析操作系統(tǒng)的有力工具。然而不同的進程之間.即使是具有家族聯(lián)系的父子進程.都具有各自不同的進程映像。由于不同的進程運行在各自不同的內(nèi)存空間中.一方對于變量的修改另一方是無法感知的.因此.進程之間的信息傳遞不可能通過變量或其它數(shù)據(jù)結(jié)構(gòu)直接進行,只能通過進程間通信來完成。

并發(fā)進程之間的相互通信是實現(xiàn)多進程間協(xié)作和同步的常用工具.具有很強的實用性,進程通信是操作系統(tǒng)內(nèi)核層極為重要的部分。

分類

根據(jù)交換信息量的多少和效率的高低,進程通信分為如下低級通信和高級通信。

低級通信

由于進程的互斥和同步,需要在進程間交換一定的信息,故不少學者將它們也歸為進程通信。只能傳遞狀態(tài)和整數(shù)值(控制信息)。

特點:傳送信息量小,效率低,每次通信傳遞的信息量固定,若傳遞較多信息則需要進行多次通信。

編程復(fù)雜:用戶直接實現(xiàn)通信的細節(jié),容易出錯。

高級通信

提高信號通信的效率,傳遞大量數(shù)據(jù),減輕程序編制的復(fù)雜度。

提供三種方式:

1.共享內(nèi)存模式

2.消息傳遞模式

3.共享文件模式1

基本進程通訊方法

共享存儲(間接通信)

Shared-memory:相互通訊的進程有共享存儲區(qū).進程間可以通過直接讀寫共享存儲區(qū)的變量來交互數(shù)據(jù),同步與互斥在并發(fā)程序設(shè)計時安排進入程序。操作系統(tǒng)提供這樣的共享存儲區(qū)及同步互斥工具。

最為快捷有效的方式之一,UNIX系統(tǒng)中常被使用。內(nèi)存共享區(qū)的互斥要通過其它機制實現(xiàn);數(shù)據(jù)的發(fā)送方不關(guān)心數(shù)據(jù)由誰接收,數(shù)據(jù)的接收方也不關(guān)心數(shù)據(jù)是由誰發(fā)送的,存在安全隱患。

消息傳遞

message-passing:通過操作系統(tǒng)的相應(yīng)系統(tǒng)調(diào)用進行消息傳遞通訊。分為直接和間接兩種:

直接通信方式:點到點的發(fā)送

Send (DestProcessName, Message);

Receive (SourceProcessName, Message);

基本思想:進程在發(fā)送和接收消息時直接指明接收者或發(fā)送者進程ID。

缺點:必須指定接收進程ID。(UNIX的信號機制類似這種形式)

間接通信方式:以信箱為媒介進行傳遞,可以廣播

Send (MailBox, Message);

Receive (MailBox, Message);

間接通信方式(信箱命名法)

基本思想:系統(tǒng)為每個信箱設(shè)一個消息隊列,消息發(fā)送和接收都指向該消息隊列。

缺點:必須有一個通訊雙方共享的一個邏輯消息隊列( UNIX的PIPE,F(xiàn)IFO及IPC消息傳遞機制都屬于這種形式),使用時消息發(fā)送者約定寫方式打開信箱,消息接受者約定讀方式打開信箱或同時讀寫打開。

優(yōu)點:很容易建立雙向通訊鏈(只要對信箱說明為讀寫打開)。

管道通信

是一種信息流緩沖機構(gòu), UNIX系統(tǒng)中管道基于文件系統(tǒng),在內(nèi)核中通過文件描述符表示。管道以先進先出(FIFO)方式組織數(shù)據(jù)傳輸。

實現(xiàn)方法:

調(diào)用pipe()函數(shù)創(chuàng)建管道

int pipe(int fd[2]);

fd[0]為管道里的讀取端

fd[1]則為管道的寫入端。

通過write()函數(shù)寫入信息

int write (int handle,char *buf,unsigned len)

進程通過read()函數(shù)讀取信息

int read (int handle,void *buf,unsigned len)

特點

1.管道是一個單向通信信道,如果進程間要進行雙向通信,通常需要定義兩個管道。

2.管道通過系統(tǒng)調(diào)用read(), write()函數(shù)進行讀寫操作。

分類

1.匿名管道:只適用于父子進程之間通信;管道能夠把信息從一個進程的地址空間拷貝到另一個進程的地址空間。

2.命名管道:命名管道有自己的名字和訪問權(quán)限的限制,就像一個文件一樣。它可以用于不相關(guān)進程間的通信,進程通過使用管道的名字獲得管道。1

含義

兩個并行進程可以通過互相發(fā)送消息進行合作,消息是通過消息緩沖而在進程之間相互傳遞。

UNIX系統(tǒng)中的進程間的通訊有兩層含義:

---單一進程內(nèi)部各個模塊間的通訊

---作為單獨單位的各個不同進程間的通訊

前者沿襲了單任務(wù)操作系統(tǒng)中的模塊通訊方法;

后者必須保證各個進程在通訊過程中互不干擾從而保持其通信的一致性。

方式

1) 文件和記錄鎖定。

為避免兩個進程間同時要求訪問同一共享資源而引起訪問和操作的混亂,在進程對共享資源進行訪問前必須對其進行鎖定,該進程訪問完后再釋放。這是UNIX為共享資源提供的互斥性保障。

2)管道。

管道一般用于兩個不同進程之間的通信。當一個進程創(chuàng)建一個管道,并調(diào)用fork創(chuàng)建自己的一個子進程后,父進程關(guān)閉讀管道端,子進程關(guān)閉寫管道端,這樣 提供了兩個進程之間數(shù)據(jù)流動的一種方式。

3)FIFO。

FIFO是一種先進先出的隊列。它類似于一個管道,只允許數(shù)據(jù)的單向流動。每個FIFO都有一個名字,允許不相關(guān)的進程訪問同一個FIFO。因此也成為命名管。

4)消息隊列。

UNIX下不同進程之間可實現(xiàn)共享資源的一種機制;UNIX允許不同進程將格式化的數(shù)據(jù)流以消息形式發(fā)送給任意進程。對消息隊列具有操作權(quán)限的進程都可以使用msget完成對消息隊列的操作控制。通過使用消息類型,進程可以按任何順序讀消息,或為消息安排優(yōu)先級順序。

5)信號燈。

作為進程間通訊的一種方法,它不是用于交換大批數(shù)據(jù),而用于多進程之間的同步(協(xié)調(diào)對共享存儲段的存?。?。

6)共享內(nèi)存。

通過信號燈實現(xiàn)存儲共享(類似“紅燈停、綠燈行”)

優(yōu)缺點

幾種通信方法總結(jié)綜上所述.進程之間的多種通信方法各自有各自的優(yōu)點和缺點:如果用戶傳遞的信息較少.或是需要通過信號來觸發(fā)某些行為.前文提到的軟中斷信號機制不失為一種簡捷有效的進程間通信方式.但若是進程間要求傳遞的信息量比較大或者進程間存在交換數(shù)據(jù)的要求,那就需要考慮別的通信方式了。無名管道簡單方便.但局限于單向通信的工作方式.并且只能在創(chuàng)建它的進程及其子孫進程之間實現(xiàn)管道的共享:有名管道雖然可以提供給任意關(guān)系的進程使用.但是由于其長期存在于系統(tǒng)之中,使用不當容易出錯,所以普通用戶一般不建議使用。消息緩沖可以不再局限于父子進程.而允許任意進程通過共享消息隊列來實現(xiàn)進程間通信.并由系統(tǒng)調(diào)用函數(shù)來實現(xiàn)消息發(fā)送和接收之間的同步.從而使得用戶在使用消息緩沖進行通信時不再需要考慮同步問題.使用方便,但是信息的復(fù)制需要額外消耗CPU的時間.不適宜于信息量大或操作頻繁的場合。共享內(nèi)存針對消息緩沖的缺點改而利用內(nèi)存緩沖區(qū)直接交換信息,無須復(fù)制,快捷、信息量大是其優(yōu)點。但是共享內(nèi)存的通信方式是通過將共享的內(nèi)存緩沖區(qū)直接附加到進程的虛擬地址空間中來實現(xiàn)的。因此,這些進程之間的讀寫操作的同步問題操作系統(tǒng)無法實現(xiàn)。必須由各進程利用其他同步工具解決。另外,由于內(nèi)存實體存在于計算機系統(tǒng)中.所以只能由處于同一個計算機系統(tǒng)中的諸進程共享。不方便網(wǎng)絡(luò)通信。不同的進程通信方式有不同的優(yōu)點和缺點.因此.對于不同的應(yīng)用問題,要根據(jù)問題本身的情況來選擇進程間的通信方式。

一般來說,進程間的通信根據(jù)通信內(nèi)容可以劃分為兩種:即控制信息的傳送與大批數(shù)據(jù)傳送。有時也把進程間控制信息的交換稱為低級通信,而把進程間大批量數(shù)據(jù)的交換稱為高級通信。

內(nèi)容資源由項目單位提供