天天看點

程序通信(作業系統10)程序通信前言1 共享存儲2 管道通信3 消息傳遞4 小結

程序通信

視訊連結位址:
https://www.bilibili.com/video/BV1YE411D7nH/?spm_id_from=333.788.videocard.2
           

作業系統 系列文章目錄

  • 程序通信
  • 前言
  • 1 共享存儲
    • 1.1 程序通信的定義
    • 1.2 共享存儲
  • 2 管道通信
  • 3 消息傳遞
  • 4 小結

前言

在本篇中,你将掌握

  • 程序通信的三種方式的流程
  • 共享存儲、管道通信、消息傳遞的特點
程式通信(作業系統10)程式通信前言1 共享存儲2 管道通信3 消息傳遞4 小結

注意體會了解各種實作方式的程序通信的流程

1 共享存儲

1.1 程序通信的定義

程式通信(作業系統10)程式通信前言1 共享存儲2 管道通信3 消息傳遞4 小結

程序通信:程序之間的資訊交換

程序是配置設定系統資源的機關(包括記憶體位址空間),是以各程序擁有的記憶體位址空間互相獨立。一個程序不能直接通路另一個程序的位址空間。

但為了實作安全的程序通信,作業系統提供了一些方法:

  1. 共享存儲
  2. 消息傳遞
  3. 管道通信

1.2 共享存儲

程式通信(作業系統10)程式通信前言1 共享存儲2 管道通信3 消息傳遞4 小結

因為兩個程序不能通路彼此的位址空間,即程序1不能通路程序2的位址空間。是以作業系統提供了共享空間和同步互斥工具,注意兩個程序對共享空間的通路必須是互斥的

共享存儲有兩種存儲方式:

  1. 基于資料結構的共享:共享空間裡隻能存放特定資料結構,如長度為10的數組。

      這種共享方式速度慢、限制多,是一種低級通信方式。

  2. 基于存儲區的共享:共享空間為記憶體中的一塊共享存儲區,資料的形式、存放位置由程序控制,而不是作業系統。

      這種共享方式速度更快,是一種進階通信方式。

2 管道通信

程式通信(作業系統10)程式通信前言1 共享存儲2 管道通信3 消息傳遞4 小結

第二種程序通信的方式是管道通信,就是兩個程序間通過一個管道實作程序間的資訊傳輸,值得注意的是:

  1. 管道隻能采用半雙工通信,某一時間段内隻能實作單向的傳輸。如果要實作雙向同時通信,則需要設定兩個管道
  2. 各程序要互斥地通路管道
  3. 資料以字元流的形式寫入管道,當管道寫滿時,寫程序的write()系統調用将被阻塞,等待讀程序将資料全部取走後;當讀程序将資料全部取走後,管道為空,此時讀程序的read()系統調用将會被阻塞。
  4. 如果管道沒寫滿,就不允許讀。如果沒讀空,就不允許寫。
  5. 資料一旦被讀出,就從管道中抛棄,這就意味着讀程序最多隻能有一個,否則可能有讀錯資料的情況。

3 消息傳遞

程式通信(作業系統10)程式通信前言1 共享存儲2 管道通信3 消息傳遞4 小結

第三種程序通信的方式是消息傳遞:

  程序間的資料交換以格式化的資訊(資訊頭+資訊體)為機關。程序通過作業系統提供的“發送消息/接收消息”兩個原語進行資料交換

消息傳遞又分為兩種:

  1. 直接通信方式:消息直接挂到接收程序的消息緩沖隊列上
  2. 間接通信方式:消息要先發送到中間實體(信箱)中,是以也稱“信箱通信方式”,如:計算機網路中的電子郵件系統,兩個程序通過發送原語和接收原語來從中間實體獲得資訊。

4 小結

程式通信(作業系統10)程式通信前言1 共享存儲2 管道通信3 消息傳遞4 小結

本篇重點:

(1)程序通信的三種方式的大緻流程

(2)共享存儲:要互斥地通路共享空間

(3)管道通信:一個管道隻能實作半雙工通信;在管道寫滿時,不能再寫、讀空時,不能再讀、沒寫滿不能讀,沒讀空不能寫

(4)消息傳遞的兩種方式差別

繼續閱讀