1. 程式人生 > >進程通信

進程通信

必須 單機 相對 mes 設置 交換 格式化 api函數 基於

進程通信是指進程之間的信息交換。
一、低級通信——進程之間的互斥和同步
信號量機制是有效的同步工具,但作為通信工具缺點如下:
(1)效率低(通信量少)
(2)通信對用戶不透明(程序員實現,操作系統只提供共享存儲器供代碼操作)
二、高級進程通信
用戶直接利用操作系統提供的一組通信命令,高效地傳送大量數據的通信方式。
操作系統隱藏了進程通信的細節,對用戶透明,減少了通信程序編制上的復雜性。

進程通信的類型

高級通信機制可歸結為四大類
1、共享存儲器系統(操作存儲區方式)
相互通信的進程共享某些數據結構或共享存儲區,進程之間能夠通過這些空間進行通信。
a、基於共享數據結構的通信方式(低級)

諸進程公用某些數據結構,借以實現諸進程間的信息交換。
如生產消費問題,定義共享的數據結構:n個長度的有界緩沖區。
程序員:提供對公用數據結構的設置及對進程間同步的處理。
操作系統:提供共享存儲器。
特點:復雜、低效率,還只適合傳遞相對少量的數據。


b、基於共享存儲區的通信方式(高級)

在存儲器中劃出了一塊共享存儲區,諸進程可通過對共享存儲區中數據的讀或寫來實現通信。
進程通信前先向系統申請獲得共享存儲區中的一個分區,並指定該分區的關鍵字;
若系統已經分給了其他進程,則將該分區的描述符返回給申請者,申請者把獲得的共享存儲分區連接到本進程上;此後,便可像讀、寫普通存儲器一樣地讀、寫該公用存儲分區。多進程借助該區通信。

2、消息傳遞系統(發--收方式)
最廣泛使用的一種,進程間的數據交換,以格式化的消息為單位。屏蔽底層復雜操作。
單機:操作系統底層編程中的消息傳遞系統調用;
計算機網絡:消息稱為報文。程序員直接利用系統提供的一組通信命令(原語)進行通信。(④客戶機-服務器系統)
如socket編程,利用函數庫的send、receive等命令即可實現網絡通信


3、管道通信(中間文件方式)
所謂“管道”,是指用於連接一讀進程和一寫進程以實現通信的一個共享文件,又名pipe文件。
向共享文件輸入的寫進程以字符流形式將大量的數據送入管道;而接收管道輸出的讀進程則從管道中接收(讀)數據。
首創於UNIX系統。其管道機制需提供三方面的協調能力:互斥、同步、確定對方是否存在。


4、Client-Server system
套接字(Socket)
一個套接字就是一個通信標識類型的數據結構,包含了通信目的的地址,端口號,傳輸層協議、進程所在的網絡地址,以及針對C\S程序提供的不同系統調用(API函數)等。
系統中所有的連接都持有唯一的一對套接字及端口連接,從而方便地區分來自不同應用程序進程或網絡連接的通信,確保通信雙方間邏輯鏈路的唯一性。

消息傳遞通信的實現方法


1)直接通信方式
發送進程利用OS所提供的發送命令(原語),直接把消息發送給目標進程。此時,發送進程和接收進程都以顯式方式提供對方的標識符。通常利用系統通信命令(原語):
Send(Receiver, message);
Receive(Sender, message);
2)間接通信方式
基於共享數據結構的實體用來暫存發送給目標進程的消息;接收進程則從該實體中,取出對方發送給自己的消息。通常把這種實體稱為信箱。
消息在信箱中可以安全地保存,只允許核準的目標用戶隨時讀取。既可實時通信,又可非實時通信。


系統為信箱通信提供原語:
1)信箱的創建和撤消
信箱名
權限屬性
私用信箱
公用信箱
共享信箱
共享者名稱
2)信箱消息的發送和接收
進程之間利用信箱進行通信時,必須使用共享信箱。
Send(mailbox, message);
Receive(mailbox, message);


3.消息傳遞系統的實現
單機和網絡環境下的高級進程通信廣泛采用“消息傳遞”方式,需要考慮的問題:
通信鏈路的建立
消息格式
同步方式


4.消息緩沖隊列通信機制
美國Hansan提出,在RC 4000系統上實現。後被廣泛應用於本地進程通信。
不需管理鏈路
定義簡單數據結構(亦即消息格式)
實現發送和接收的操作原語

技術分享圖片

進程通信