第二章 程序通訊
一,程序通訊是指程序之間的資訊交換。
(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函式)等。 系統中所有的連線都持有唯一的一對套接字及埠連線,從而方便地區分來自不同應用程式程序或網路連線的通訊,確保通訊雙方間邏輯鏈路的唯一性。