8.進程通訊

進程通訊

  • 進程通訊是指進程之間的信息交換
  • 交換的信息量:一個狀態或數值,上千個字節。

進程通訊的分類

1)低級通訊:進程的互斥和同步 2)高級通訊:安全

指用戶可直接利用OS提供的一組通訊命令,高效地傳送大量數據的一種通訊方式。對用戶透明。

高級通訊分類

  • 共享存儲器系統
  • 消息傳遞系統
  • 管道通訊

共享存儲器系統

(1)共享數據結構的通訊方式服務器

進程之間經過某種數據結構,如緩衝池進行通訊屬於低級通訊方式。網絡

(2)共享存儲區通訊方式數據結構

爲了傳送大量信息,在存儲器中劃出一塊共享存儲區,進程可經過對共享存儲區進行讀或寫來實現通訊,屬於高級通訊方式。計算機網絡

消息傳遞系統

消息交換的單位是消息或報文,分兩種:code

(1)直接通訊方式進程

(2)間接通訊方式ip

計算機網絡中將消息稱爲報文同步

直接通訊方式

  • 發送進程直接把消息發送給目標進程
  • 發送進程和接收進程都以顯式方式分別提供對方的標識符
  • 系統提供兩條通訊原語

Send(Receiver,message);it

Receive(Sender,message);

例如:

Send(P2,m1);

Receive(P1,m1);

解決生產者——消費者問題

repeat  ...
	produce an item in nextp;
		...
	Send(consumer,nextp);
until false;
repeat
	Receive(producer,nextp);
		...
	Consumer the item in nextc;
until false;

間接通訊方式

  • 進程之間的通訊須要經過某種中間實體,該實體用來暫存發送進程發送給目標進程的消息;接收進程則從該實體中取出對方發送給本身的消息。
  • 這種中間實體稱爲信箱
  • 消息在信箱中能夠安全的保存,只容許覈準的目標用戶隨時讀取,故可實現非實時通訊。

信箱的建立和撤銷

  • 進程用信箱建立原語來創建一個新信箱。建立者進程應給出信箱名字、信箱屬性(公用、使用或共享);對於共享信箱,還應給出共享者的名字。
  • 用信箱撤銷原語來撤銷

消息的發生於接收

  • Send(mailbox,message),將一個消息發送到指定信箱
  • Reveieve(mailbox,message),從指定信箱中接收一個消息

信箱分類

  • 私用信箱
  • 公用信箱
  • 共享信箱

私用信箱

  • 用戶進程創建,做爲該進程的一部分
  • 擁有者有權讀消息,其餘用戶只能發送
  • 採用單向通訊鏈路
  • 進程結束時信箱也消失

公用信箱

  • 由OS建立
  • 提供給系統中的全部覈准進程使用
  • 進程既發送也可取出
  • 採用雙向通訊鏈路的信息來實現
  • 系統運行期間始終存在

共享信箱

  • 由某進程建立,建立時提供共享進程(用戶)的名字
  • 信息的擁有者和共享者,都有權從信箱中取走發送給本身的消息

信息通訊時發送進程和接收進程的關係

  • 一對一關係。創建一條專用的通訊鏈路
  • 多對一關係。服務進程與多個用戶進程之間進行交互,又稱客戶|服務器交互
  • 一對多關係。一個發送進程與多個接收進程進行交互,使發送進程可用廣播形式,向接收者發送消息。
  • 多對多關係。創建一個公用信箱,多個進程投遞並取走本身的消息

管道通訊

  • 管道通訊方式創建在文件系統(文件系統位於外存)的基礎上,利用共享文件來鏈接兩個相互通訊的進程,此共享文件稱爲管道(Pipe)
  • 管道是指用於鏈接一個讀進程和一個寫進程,以實現它們之間通訊的共享文件。

管道通訊必需的協調能力

(1)互斥。當一個進程正在對管道進行讀/寫操做時,另外一進程必須等待。

(2)同步。當寫(輸入)進程把必定量的數據(如4K)寫入管道後,便去睡眠等待,直到讀(輸出)進程取走數據後再把他喚醒。當讀進程發現管道空時,也應睡眠等待,直至寫進程將消息寫入管道後,纔將它喚醒。

(3)判別對方是否存在,只有肯定了對方存在時方能進行通訊。

相關文章
相關標籤/搜索