進程間通信就是在不同進程之間傳播或交換信息,進程間控制信息的交換稱為低級通信,進程間大批量數據的交換稱為高級通信。
進程通信分為3種:
1.共享存儲器系統:為了傳送大量數據,在存儲器中劃出一塊共享存儲區,諸進程可通過對共享存儲區進行讀數據或寫數據以實現通信。
2.消息傳遞系統:又分為直接通信方式、間接通信方式.
3.管道通信系統:向管道提供輸入的發送進程,以字符流方式將大量的數據送入管道,而接收進程從管道中接收數據
?
消息緩沖隊列通信機制:
由于消息緩沖機制中所使用的緩沖區為公用緩沖區,因此使用消息緩沖機制傳送數據時,兩通信進程必須滿足如下條件:
第一,在發送進程把寫入消息的緩沖區掛入消息隊列時,應禁止其他進程對該消息隊列的訪問,否則,將引起消息隊列的混亂。同理,當接收進程正從消息隊列中取消息時,也應禁止其他進程對該隊列的訪問。
第二,當緩沖區中無消息存在時,接收進程不能接收到任何消息;而發送進程是否可以發送消息,則只由發送進程是否能夠申請到緩沖區決定。
?
緩沖隊列通信機制中的數據結構:
(1)消息緩沖區
??? typedefstruct message buffer
??? {
?????? sender;? //發送者進程標識符
?????? size;? //消息長度
?????? text;? //消息正文
?????? next;? //指向下一個消息緩沖區的指針
??? }
(2)PCB中有關進程通信的數據項
??? typedefstruct message block
??? {
????? …
????? mq;? //消息隊列隊首指針
????? mutex;//消息隊列互斥信號量,初值為1
????? sm;? //消息隊列資源信號量,用于消息隊列中的消息計數,初值為0
????? …
??? }