生活随笔
收集整理的這篇文章主要介紹了
进程通信(转)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
1、定義: 進程通訊是指
進程之間的信息交換。 在
進程之間要傳送大量數據時,就需要使用進程通訊。 進程
互斥和同步需要交換一定的信息,它們也可歸為進程通訊,屬于
低級的進程通訊。
低級的原因在于 (1)、
效率低,生產者每次只能向緩沖池投放一個產品(消息),消費者每次只能從緩沖池中取得一個消息 (2)、
通訊對用戶不透明,OS職位進程之間的通訊提供了共享存儲其。
2、進程通訊特點:
使用方便。OS隱藏了實現進程通訊的具體細節,向用戶提供了一組用于實現高級通信的命令(原語),用戶可方便的直接利用它實現進程之間的通信,或者說,通信過程對用戶是透明的,這樣大大減少了通信程序編制上的復雜性。高效的傳送大量的數據。用戶可以直接利用高級通訊命令(原語)高效地傳送大量的數據。 3、進程通信的分類
在該系統中,相互通信的進程共享某些
數據結構或
共享存儲區,進程能通過這些空間進行通信。
3.1、共享存儲器系 (1)、基于
共享數據結構的通信方式。在這種通信方式中,要求諸進程
公用某些數據結構,借以實現諸進程間的信息交換,如在生產者-消費者問題中的有界緩沖區。操作系統僅提供共享存儲器,由程序員負責對公共數據結構的設置及對進程間同步的處理。這種通信方式僅
適用于傳遞相對較少的數據,通信效率低下,屬于低級通信。 (2)、基于
共享存儲區的通信方式。為了傳輸大量數據,在
內存中劃出了一塊共享存儲區域,諸進程可通過對該共享區的讀或寫交換信息,實現通信,數據的形式和位置甚至訪問控制都是進程負責,而不是OS。這種通信方式屬于高級通信。
需要通信的進程在通信前,像系統申請獲得共享存儲區中的一個分區,并將其附加到自己的地址空間中,便可對其中的數據進行正常讀、寫,讀寫完成或不再需要時,將歸還給共享存儲器。
3.2、管道通信系統
所謂“
管道”,是指用于
連接一個讀進程和
一個寫進程以實現它們之間通信的一個
共享文件,又名pipe文件。 向管道(共享文件)提供輸入的發送進程(即寫進程)以字符流形式將大量的數據送進管道;而接受管道輸出的接受進程(即讀進程)則從管道中接收(讀)數據。 為了協調雙方的通信,管道機智必須提供下面三方面的協調能力
互斥,即當一個進程正在對pipe執行讀/寫操作時,其他(另一)進程必須等待。同步,指當寫(輸入)進程把一定數量(如4KB)的數據寫入pipe,便去睡眠等待,知道讀(輸出進程)取走數據后再把它喚醒,當讀進程讀一空pipe時,也應睡眠等待,直到讀(輸出)進程取走數據后把它喚醒。確定對方是否存在,只有確定了對方已存在時才能進行通信。 3.3、消息傳遞系統
不借助任何共享存儲區或數據結構,而是以格式化的消息(messag)為單位,為通信的數據封裝在消息中,并利用操作系統提供的一組通信命令(原語),在進程間進行信息傳遞,完成進程間的數據交換。 分類:
直接通信方式,指發送進程利用OS所提供的發送原語,直接把消息發送給目標進程;間接通信方式,指發送和接受進程,都通過共享中間實體(簡稱郵箱)的方式進行消息的發送和接受,完成進程間的通信。 3.4、客戶-服務器系統
在網絡環境的各種應用領域已成為當前主流的通信實現機制,主要的實現方法分三類:套接字、遠程過程調用和遠程方法調用。 (1)、套接字(Socket)
套接字,源IP地址和目的IP地址以及源端口號和目的端口號的組合稱為套接字。其用于標識客戶端請求的服務器和服務。套接字分為以下兩類:
- 基于文件型:通信進程都運行在同一臺機器的環境中,套接字是基于本地文件系統支持的,一個套接字關聯到一個特殊的文件,通信雙方通過這個特殊文件的讀寫實現通信,其原理類似于前面所講的管道。
- 基于網絡型:該類型通常采用的是非對稱方式通信,即發送者需要提供接收者命名。通信雙發的進程運行在不同的主機的網絡環境下,被分配了一堆套接字,一個屬于接收進程(或服務進程),一個屬于發送進程(或客戶進程)。
優勢:不僅適用于同一臺計算機內部的進程通信,也適用于網絡環境中不同計算機間的進程通信。 java編程示意圖: ??????? socket連接的過程中如果使用的是TCP連接需要在連接的時候進行”三次握手“,斷開連接的時候需要進行”四次分手“。 (2)、遠程過程調用和遠程方法調用 ??????? 遠程過程(函數)RPC(RemoteProcedure Call),是一個通信協議,用于通過網絡連接的系統。該協議允許運行于一個主機(本地)系統上的進程調用另外一臺主機(遠程)系統上的進程,而對程序員表現為常規的過程調用,無需額外的編程。 ??????? 負責處理遠程過程調用的進程有兩個,一個是本地客戶進程,另一個是遠程服務器進程,這兩個進程通常也被稱為網絡守護進程。主要負責在網絡間的進程傳遞,一般情況下,這兩個進程都是處于阻塞狀態,等待消息。 名詞解析: ??????? 存根:在本地客戶端,每個能夠獨立運行的遠程過程都擁有一個客戶存根,本地進程調用遠程過程實際是調用該過程關聯的存根;與此類似,在每個遠程進程所在的服務器端,其所對應的實際可執行的進程也存在一個服務器存根與其關聯。本地客戶存根與對應的遠程服務器存根一般也是處于阻塞狀態,等待消息。 主要步驟: 本地過程調用者以一般方式調用遠程過程在本地關聯的客戶存根,傳遞相應的參數,然后將控制權轉移給客戶存根;客戶存根執行,完成包括過程名和調用參數等信息的消息建立,將控制權轉移給本地客戶進程;本地客戶進程完成與服務器的消息傳遞,將消息發送給遠程服務器進程;遠程服務器進程接收信息后轉入執行,并根據其中的遠程過程名找到對應的服務器存根,將消息轉給該存根;該服務器存根接收到消息后,由阻塞狀態轉入執行狀態,拆開消息從中取出過程調用的參數,然后以一般方式調用服務器上關聯的過程;在服務器端的遠程過程運行完畢后,將結果返回給與之關聯的服務器存根;該服務器存根獲得控制權執行,將結果打包為消息,并將控制權轉移給遠程服務器進程;遠程服務器進程將消息發送會客戶端;本地客戶進程接收到消息后,根據其中的過程名將消息存入關聯的客戶存根,再將控制權轉移給客戶存根;客戶存根從消息中取出結果,返回給本地調用者進程,并完成控制權的轉移。 ??? ??????? 上面的主要作用在于:將客戶過程的本地調用轉化為客戶存根,再轉化為服務器過程的本地調用,對客戶與服務器來說,它們的中間步驟是不可見的,因此,調用者在整個過程中并不知道該執行時在遠程還是在本地。 http://www.cnblogs.com/0201zcr/p/4619705.html
轉載于:https://www.cnblogs.com/softidea/p/4621511.html
總結
以上是生活随笔為你收集整理的进程通信(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。