1. 程式人生 > >作業系統(11)程序--程序通訊:訊號、管道、訊息佇列、共享記憶體

作業系統(11)程序--程序通訊:訊號、管道、訊息佇列、共享記憶體

文章目錄

1. 程序通訊相關概念

1. 通訊流程、屬性、鏈路

程序通訊是程序之間進行資訊交流和同步的機制,任何一個程序通訊機制都包含兩個基本操作:一個是傳送操作(send),一個是接收操作(receive)。

  1. 程序通訊流程
    在通訊程序間建立相應的通訊鏈路,然後通過send/receive交換資訊

  2. 通訊鏈路特徵
    不同通訊的鏈路特徵不一樣,比如說有物理鏈路(如共享記憶體、硬體匯流排),有邏輯鏈路(如邏輯屬性等)

  3. 阻塞(同步)和非阻塞(非同步)通訊
    通訊有兩種屬性,分別是阻塞通訊和非阻塞通訊
    ==7==

    ==8==

  4. 通訊鏈路的緩衝特徵
    ==9==


2. 程序通訊方式:直接通訊、間接通訊

程序通訊共有兩種方式:間接通訊和直接通訊,如下圖。
==1==

間接通訊:該通訊方式是依賴於作業系統核心完成的通訊方式。首先在通訊程序和核心之間建立相應的機構支援通訊(如建立訊息佇列),程序A可以把訊息傳送到核心的訊息佇列上,然後程序B從核心裡讀出訊息,從而實現通訊。這個通訊過程,通訊程序的生命週期可以不一樣,比如說A傳送訊息的時候,B可以還沒有建立
直接通訊

:在兩個程序直接建立一個通訊通道(共享通道)。兩個程序必須同時存在才能通訊,傳送方向共享通道傳送資料,接收方從共享通道讀資料

  1. 直接通訊
    直接通訊的傳送和接收操作必須明確程序的命曾,如下圖
    ==2==
    通訊鏈路的屬性:
    ==3==
  2. 間接通訊
    ==4==
    通訊鏈路的屬性:
    ==5==
    通訊流程:
    ==6==

2. 程序通訊的機制

1. 訊號

訊號是程序間的軟體中斷通知和處理機制。在第2章中講過中斷,中斷實際上CPU在執行指令的時候的一種異常處理機制,這裡的訊號就是借鑑了這種中斷機制。僅僅用來做一種快速的響應機制。
==10==

  1. 訊號的實現
    ==11==

2. 管道

管道是程序間基於記憶體檔案的通訊機制

。也就是說兩個程序想通訊,它中間的資料放在臨時檔案中(也就是管道),一個程序往管道里寫資料,另一個程序讀資料。其中,檔案描述符表式的當前程序是管道的寫端還是讀端,
==12==

  1. 與管道相關的系統呼叫
    讀管道、寫管道、建立管道。利用繼承的關係在兩個程序中使用不同的檔案描述符,實現通訊。
    ==13==
  2. 管道示例
    下圖中,先建立管道,將ls命令的標準輸出與管道的輸入端繫結在一起,然後將管道的輸出與more的標準輸入繫結在一起
    ==14==

3. 訊息佇列

訊息佇列是由作業系統維護的,以位元組序列為基本單位的間接通訊機制。也就是說這種通訊機制的基本單位為位元組序列。下圖中,若干個程序往訊息佇列裡傳送訊息,然後另外的程序從訊息佇列裡接收訊息。
==15==

  1. 與訊息佇列相關的系統呼叫
    ==16==

4. 共享記憶體

共享記憶體是把同一段實體記憶體區域同時對映到多個程序的記憶體空間的通訊機。這種機制在程序和執行緒中是不一樣的。
==17==

  1. 共享記憶體的實現
    ==18==
  2. 與共享記憶體相關的系統呼叫
    ==19==