1. 程式人生 > >第二章 程序通訊

第二章 程序通訊

一,程序通訊是指程序之間的資訊交換。

(1)低階通訊——程序之間的互斥和同步

        訊號量機制是有效的同步工具,但作為通訊工具缺點如下:

         (1)效率低(通訊量少)

         (2)通訊對使用者不透明(程式設計師實現,作業系統只提供共享儲存器供程式碼操作)

(2)高階程序通訊       

        使用者直接利用作業系統提供的一組通訊命令,高效地傳送大量資料的通訊方式。 作業系統隱藏了程序通訊的細節,對使用者透明,減少了通訊程式編制上的複雜性。

二,程序通訊的型別

1,共享儲存器系統(操作儲存區方式)     

     相互通訊的程序共享某些資料結構或共享儲存區,程序之間能夠通過這些空間進行通訊。

      (1)基於共享資料結構的通訊方式(低階)

          諸程序公用某些資料結構,藉以實現諸程序間的資訊交換。

          程式設計師:提供對公用資料結構的設定及對程序間同步的處理。

          作業系統:提供共享儲存器。

          特點:複雜、低效率,還只適合傳遞相對少量的資料。

      (2)基於共享儲存區的通訊方式(高階)

          在儲存器中劃出了一塊共享儲存區,諸程序可通過對共享儲存區中資料的讀或寫來實現通訊。

2,訊息傳遞系統(發--收方式)

  最廣泛使用的一種,程序間的資料交換,以格式化的訊息為單位。遮蔽底層複雜操作。

  (1)單機:作業系統底層程式設計中的訊息傳遞系統呼叫;

  (2)計算機網路:訊息稱為報文。程式設計師直接利用系統提供的一組通訊命令(原語)進行通訊。

(3)實現方式

    ①直接通訊方式

        傳送程序利用OS所提供的傳送命令(原語),直接把訊息傳送給目標程序。此時,傳送程序和接收程序都以顯式方式提供          對方的識別符號。通常利用系統通訊命令(原語):

        Send(Receiver, message);         Receive(Sender, message);

    ②間接通訊方式

        基於共享資料結構的實體用來暫存傳送給目標程序的訊息;接收程序則從該實體中,取出對方傳送給自己的訊息。通常把            這種實體稱為信箱。 訊息在信箱中可以安全地儲存,只允許核準的目標使用者隨時讀取。既可實時通訊,又可非實時通訊。

        系統為信箱通訊提供原語:

           Ⅰ信箱的建立和撤消

                    信箱名

                    許可權屬性 :

                        私用信箱  只有擁有者有權讀傳送到信箱中的內容,可用單向鏈路實現。擁有者程序結束,信箱消失。

                        公用信箱   OS建立,雙向鏈路,系統執行期間核准程序都可進行讀寫。

                        共享信箱   某程序建立,可指明被誰共享。擁有者和共享者均可讀信箱中發給自己的訊息。

                    共享者名稱

          Ⅱ信箱訊息的傳送和接收  

                程序之間利用信箱進行通訊時,必須使用共享信箱。

                Send(mailbox, message);     Receive(mailbox, message);

3,管道通訊(中間檔案方式)

   (1)所謂“管道”,是指用於連線一讀程序和一寫程序以實現通訊的一個共享檔案,又名pipe檔案。

   (2)向共享檔案輸入的寫程序以字元流形式將大量的資料送入管道;而接收管道輸出的讀程序則從管道中接收(讀)資料。

   (3)首創於UNIX系統。其管道機制需提供三方面的協調能力:互斥、同步、確定對方是否存在。

4,Client-Server system

(1)套接字(Socket)

一個套接字就是一個通訊標識型別的資料結構,包含了通訊目的的地址,埠號,傳輸層協議、程序所在的網路地址,以及針對C\S程式提供的不同系統呼叫(API函式)等。 系統中所有的連線都持有唯一的一對套接字及埠連線,從而方便地區分來自不同應用程式程序或網路連線的通訊,確保通訊雙方間邏輯鏈路的唯一性。