程序管理七(程序通訊)

2021-08-23 12:05:17 字數 2918 閱讀 7501

程序通訊,是指併發程序之間相互交換資訊。這種資訊交換的量可大可小。作業系統提供了多種程序間的通訊機制,可分別適用於不同的場合。從某種意義上來說,前面所討論的程序之間的互斥與同步就是一種通訊,只不過交換的資訊量很小,因此這種程序通訊方式稱為低階程序通訊方式。

接下來介紹的是程序之間有較大資訊量的交換,例如:乙個程序向另乙個程序傳送其獲得的計算結果,稱為高階通訊方式。

目前程序的高階通訊機制可分為三大類:共享儲存器機制,訊息傳遞機制和管道通訊機制。

(1)共享儲存器機制:

共享儲存器方案要求通訊程序之間共享某些變數,並通過這些變數交換資訊,不需要資料移動。但這些共享變數一定要在多個程序之間互斥使用,否則就會導致不確定性錯誤。在共享儲存器方案中,無論是設定共享變數,還是謹慎地處理程序間的互斥關係,都是程式設計師的責任。作業系統除了提供共享儲存空間外,不需要提供其他支援。

(2)訊息傳遞機制:

不論是單機系統、多機系統,還是計算機網路,訊息傳遞機制都是用的最廣泛的一種程序間通訊的機制。在訊息傳遞系統中,程序間的資料交換是以格式化的訊息為單位的;在計算機網路中,又把訊息稱為報文。程式設計師直接利用系統提供的一組通訊命令(原語)進行通訊。作業系統隱藏了通訊的實現細節,大大簡化了通訊程式編制的複雜性,而獲得廣泛地應用。又因其實現方式的不同而進一步分成直接通訊方式和間接通訊方式。

直接通訊方式:傳送程序直接把訊息傳送給接收程序,並將它掛在接收程序的訊息緩衝佇列上,接收程序從訊息緩衝佇列中取得訊息。

間接通訊方式:傳送程序把訊息傳送到某個中間實體中,接收程序從中取得訊息。這種中間實體一般稱為信箱,故這種通訊方式也稱為信箱通訊方式。這種通訊方式被廣泛應用於計算機網路中,現在稱為電子郵件系統。

(3)管道通訊機制:

管道,是指用於連線乙個讀程序和乙個寫程序以實現它們之間通訊的乙個共享檔案,又名pipe檔案。向管道提供輸入的傳送程序(寫程序),以字元流形式將大量的資料送入管道;而接收管道輸出的接收程序(讀程序)則從管道中接收資料。由於傳送程序和接收程序是利用管道進行通訊的,故稱為管道通訊,又名共享檔案通訊。

訊息緩衝通訊是一種直接通訊方式,為了實現訊息緩衝通訊,需要在傳送程序的工作區間開闢乙個傳送區,包含三個資料項:接收程序標識號,訊息大小和訊息正文。在接收程序的工作區也要開闢乙個接收區,也有三個資料項:傳送程序標識號,訊息大小和訊息正文。

為了支援這種通訊,作業系統應提供若干訊息緩衝區,用以存放訊息。每當乙個程序向另乙個程序傳送訊息時,便向系統申請乙個訊息緩衝區,並把已準備好的訊息傳送區複製到該緩衝區,然後把它插入接收程序的訊息鏈中。所有發給同一程序的訊息緩衝區構成該程序的訊息鏈,該程序pcb中的指標mq指向其訊息鏈的鏈頭。pcb中的mutex(公用訊號量,保證消費者和生產者程序之間的互斥)是互斥使用其訊息鏈的訊號量,這種互斥關係存在於多個傳送者程序和乙個接受者程序之間,sm的值指出該程序的訊息鏈當前還有幾個訊息。

通常,作業系統提供下述兩個通訊命令(原語):

send(receiver,message)傳送乙個訊息給接收程序receiver。

receive(sender,message)接收sender發來的訊息。

在某些情況下,接收程序可與多個傳送程序通訊,因此,它不可能事先指定傳送程序。例如:用於提供列印服務的程序,他可以接收來自任何乙個程序的「列印請求」訊息。對於這樣的應用(每個程序並不是既為接收程序,也為傳送程序),在接收程序收訊息的原語中的源程序引數是完成通訊後的返回值,接收原語可表示為receive(id.message)。

在實現對緩衝區操作的傳送程序和接收程序時,還需要考慮程序間的同步和互斥問題。

信箱通訊是訊息緩衝通訊的改進,是一種間接通訊方式。信箱是用來存放信件的,而信件是乙個程序傳送給另乙個程序的一組訊息。實際上信箱是一種資料結構。當乙個程序(傳送程序)要與另乙個程序(接收程序)通訊時,傳送程序只需要把它的信件投入信箱,接收程序就可以在任何時候取走信件而不會丟失。

信箱邏輯上分成信箱頭和信箱體兩部分。信箱頭中存放有關信箱的描述,信箱體由若干格仔組成,每格存放一信件,格仔的數目和大小在建立信箱時指定。信件的傳遞可以是單向的,也可以是雙向的。

為了支援信箱通訊,作業系統應提供存放信件的儲存空間,還應提供若干條操作原語,如建立信箱原語、撤銷信箱原語、傳送和接收原語等。

在利用信箱通訊時,在傳送程序和接收程序之間,存在以下四種關係:

a.一對一關係。這時可為傳送程序和接收程序建立一條兩者專用的通訊鏈路,使兩者之間的互動不受其他程序的影響(類似與管道通訊)。

b.多對一關係。允許提供服務的程序與多個使用者程序之間進行互動,也稱為客戶-伺服器互動。

c.一對多關係。允許乙個傳送程序與多個接收程序進行互動,使傳送程序可用廣播方式向接受者傳送訊息。

d.多對多關係。允許建立乙個公用信箱,讓多個程序都能向信箱中投遞訊息。也可從信箱中取走屬於自己的訊息。

訊息緩衝通訊和信箱通訊存在以下問題:一是占用了寶貴的記憶體空間,二是傳送和接收必須以整個訊息或信件為單位,不能訪問其中的一部分。為了解決這兩個問題,提出了管道通訊機制,又稱共享檔案方式。

使用共享檔案實現程序之間的相互通訊,基本上可以使用檔案系統的源有機質實現,包括檔案的建立、開啟、關閉、讀/寫等。但是,傳送、接收程序之間的相互協調卻不是單靠檔案系統的機制所能解決的。相互協調在這裡有三個方面的意思:一是程序對通訊機構的使用應該是互斥的,即乙個程序在使用某個通道進行讀或者寫時,其他程序就不能使用這個通道。二是傳送者和接受者雙方都能以一定的方式了解到對方是否存在,即若乙個傳送程序了解到其資訊的接收程序不存在,那就不必傳送其訊息。三是傳送和接收資訊之間要有一定的同步關係。

使用共享檔案進行程序間的通訊的優點是資訊交換量可以很大,傳送和接收更加靈活,資訊儲存期也較長。這種通訊方法的缺點是資訊的交換涉及輸入/輸出操作,同步和控制機構也較為複雜。為了正確和有效地使用共享檔案進行通訊,必須提供相應的機制,以實現這些相互協調的要求。

原理上說,乙個共享檔案可供多個程序相互通訊,因為檔案系統允許多個程序以相同或不同的操作開啟同乙個檔案。但在實際系統裡,為了便於管理和避免混亂,乙個通訊檔案最好由兩個程序專用;傳送程序以寫的方式開啟,以寫檔案操作實現資訊的傳送;接收程序以讀的方式開啟,以讀檔案操作實現資訊的接收。

程序間通訊(七)

cd資料庫程式 我們的目標是將程式中處理資料庫的部分與與處理使用者介面的部分分離開來。我們同時希望執行乙個伺服器程序,但是允許多個併發客戶端。我們同時希望在已有的 上進行最小的修改。如果可能,我們保持已有的 不變。為了使得事情簡單,我們同時希望可以在程式內部建立與刪除管道,所以不需要系統管理員在我們...

程序間通訊(七)

cd資料庫程式 我們的目標是將程式中處理資料庫的部分與與處理使用者介面的部分分離開來。我們同時希望執行乙個伺服器程序,但是允許多個併發客戶端。我們同時希望在已有的 上進行最小的修改。如果可能,我們保持已有的 不變。為了使得事情簡單,我們同時希望可以在程式內部建立與刪除管道,所以不需要系統管理員在我們...

程序間通訊(七)

cd資料庫程式 我們的目標是將程式中處理資料庫的部分與與處理使用者介面的部分分離開來。我們同時希望執行乙個伺服器程序,但是允許多個併發客戶端。我們同時希望在已有的 上進行最小的修改。如果可能,我們保持已有的 不變。為了使得事情簡單,我們同時希望可以在程式內部建立與刪除管道,所以不需要系統管理員在我們...