OS筆記 23 程序通訊

2021-10-23 17:30:24 字數 2462 閱讀 7310

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

協作程序需要一種程序間通訊機制(interprocess communicatio,ipc)來允許程序相互互動資料與資訊。

1. 共享儲存器系統(shared-memory system)

在共享儲存器系統中,相互通訊的程序共享某些資料結構或儲存區,然後通過這些空間進行通訊。據此,可以將其分為兩種型別:

(1)共享資料結構

這種通訊方式要求諸程序公用某些資料結構來實現資訊交換,非常經典的例子就是生產者—消費者問題中的公共有界緩衝區。

這種方式要求資訊交換的格式、型別一定,比如每次只能放乙個產品、取乙個產品,而且作業系統僅提供共享儲存器,程序的同步與互斥都需要程式設計師去實現,

這種方式僅適用於傳遞少量的資料,通訊效率低下,屬於低階通訊。

(2)共享儲存區

為了大量傳輸資料,在記憶體中劃出了一塊共享儲存區,諸程序可以直接讀或寫該共享區的內容,來實現資訊的交換。(可以想象成乙個聊天區)

這種方式屬於高階通訊。

2. 訊息傳遞系統(message passing system)

利用系統提供的通訊原語,以訊息或報文為單位進行資訊交換,包括直接/間接通訊。

訊息的格式:訊息頭 + 訊息正文(訊息頭:傳送和接收程序名、訊息長度、型別等)

程序的同步方式:

在程序之間進行通訊時,同樣需要程序同步機制,以使諸程序間能協調通訊。在完成訊息的傳送或接收後,有三種情況:

① 傳送程序和接收程序均阻塞(用於緊密同步,傳送與接收之間無大的時差)

② 傳送程序和接收程序均不阻塞

③ 傳送程序不阻塞、接收程序阻塞(應用最廣,平時傳送程序可以一直傳送訊息,接收程序直到有訊息來時才被喚醒)

(1)直接通訊方式

傳送程序直接把訊息傳送給目標程序(利用os提供的傳送原語)

直接通訊原語:

send ( receiver, message ); // 傳送 message 給 receiver

receive ( sender, message ); // 接收 sender 發來的 message

(2)間接通訊方式(信箱通訊)

傳送和接收程序,都通過共享中間實體(稱為郵箱)的方式程序訊息的傳送和接收。

信箱的結構:

信箱頭:關於信箱的描述資訊,比如信箱識別符號、信箱擁有者等

信箱體:由若干個可以存放訊息的信箱格組成

信箱通訊原語:

① 郵箱的建立和撤銷

② 訊息的傳送和接收

send ( mailbox, message ); // 將乙個訊息傳送到指定郵箱

receive ( mailbox, message ); // 從指定郵箱中接收乙個訊息

信箱分為三類:

• 私用信箱(private mailbox)

使用者程序自己建立的郵箱,作為該程序的一部分,程序結束時也隨之消失。只有該程序能從郵箱中讀取訊息,其他程序只能傳送資訊到該郵箱。

• 公用信箱(public mailbox)

由作業系統建立,提供給所有核准程序使用。這些程序既可以讀,也可以寫。通常在系統執行期間始終存在。

• 共享信箱(shared mailbox)

由某程序建立,同時必須指出共享程序的名字,都可取走發給自己的訊息。

通訊鏈路(communicaiton link)

• 顯式建立 / 隱式建立(傳送原語自動構建)

• 單向通訊鏈路 / 雙向通訊鏈路

3. 管道通訊(pipe communication)

(1)管道

是指用於連線乙個讀程序和乙個寫程序 以實現它們之間通訊的乙個共享檔案,又名 pipe 檔案。

管道是unix系統的重要特色之一。

(2)共享過程

傳送程序以字元流的形式將大量資料送入管道(也就是向檔案中寫入資料)

接收程序從管道中接收(讀)資料

(3)管道的協調能力(特點)

① 互斥:同一時刻,只能有乙個程序對管道進行操作。

② 同步:當寫入一定數量的資料後,寫程序需要睡眠等待,直到讀程序取走資料後才能把它喚醒。(保證每一次的資料都能被接收)

③ 確定對方是否存在:只有確定了對方存在時才能進行通訊。

④ 單向:寫程序只能寫,讀程序只能讀。

CSAPP筆記 2 3程序間通訊IPC

定義 兩個或者多個程序讀寫某些共享資料,而最後的結果取決於程序執行的時序的現象。不能同時位於臨界區 不能對cpu的速度和數量做要求 臨界區外的程序不得阻塞其他程序 程序不能無限期等待進入臨界區 互斥是避免競爭條件的手段 遮蔽中斷法 鎖變數法 嚴格輪換法 peterson解法 指令法 tsl或者xch...

APUE學習筆記 23 程序間通訊之管道

by 潘雲登 對於商業目的下對本文的任何行為需經作者同意。寫在前面 1.本文內容對應 unix 環境高階程式設計 第 2版 第 15章。2.總結了程序間通訊的一種機 制 管道的基本概念和使用方法。3.管道 管道是unix 系統ipc 的最古老形式,在 shell 下的表現形式為管道線。每當在管道線中...

APUE筆記 程序間通訊

管道 include int pipe int fds 2 fd返回兩個檔案描述符,fd 0 讀,fd 1 寫!管道是單雙工的,只能一端寫,另一端讀,不能兩邊同時讀寫 管道實際上是在,核心中開闢了乙個迴圈佇列,當佇列寫滿 隊空 時,繼續寫 讀 管道會阻塞當前程序!當寫端關閉,繼續讀時返回eof 當讀...