進程間通訊(IPC):共用記憶體和訊息佇列原理詳解

2020-07-16 10:04:36
作業系統內的並行執行進程可以是獨立的也可以是共同作業的:
  • 如果一個進程不能影響其他進程或受其他進程影響,那麼該進程是獨立的,換句話說,不與任何其他進程共用資料的進程是獨立的;
  • 如果一個進程能影響其他進程或受其他進程所影響,那麼該進程是共同作業的。換句話說,與其他進程共用資料的進程為共同作業進程。

提供環境允許進程共同作業,具有許多理由:
  • 資訊共用:由於多個使用者可能對同樣的資訊感興趣(例如共用檔案),所以應提供環境以允許並行存取這些資訊。
  • 計算加速:如果希望一個特定任務快速執行,那麼應將它分成子任務,而每個子任務可以與其他子任務一起並行執行。注意,如果要實現這樣的加速,那麼計算機需要有多個處理核。
  • 模組化:可能需要按模組化方式構造系統,即將系統功能分成獨立的進程或執行緒。
  • 方便:即使單個使用者也可能同時執行許多工。例如,使用者可以並行地編輯、收聽音樂、編譯。

共同作業進程需要有一種進程間通訊機制(簡稱 IPC),以允許進程相互交換資料與資訊。進程間通訊有兩種基本模型:共用記憶體訊息傳遞(訊息佇列)
  • 共用記憶體模型會建立起一塊供共同作業進程共用的記憶體區域,進程通過向此共用區域讀出或寫入資料來交換資訊。
  • 訊息傳遞模型通過在共同作業進程間交換訊息來實現通訊。

圖 1 給出了這兩種模型的對比。

通信模型
圖 1 通訊模型