程序通信
視訊連結位址:
https://www.bilibili.com/video/BV1YE411D7nH/?spm_id_from=333.788.videocard.2
作業系統 系列文章目錄
- 程序通信
- 前言
- 1 共享存儲
-
- 1.1 程序通信的定義
- 1.2 共享存儲
- 2 管道通信
- 3 消息傳遞
- 4 小結
前言
在本篇中,你将掌握
- 程序通信的三種方式的流程
- 共享存儲、管道通信、消息傳遞的特點
注意體會了解各種實作方式的程序通信的流程
1 共享存儲
1.1 程序通信的定義
程序通信:程序之間的資訊交換
程序是配置設定系統資源的機關(包括記憶體位址空間),是以各程序擁有的記憶體位址空間互相獨立。一個程序不能直接通路另一個程序的位址空間。
但為了實作安全的程序通信,作業系統提供了一些方法:
- 共享存儲
- 消息傳遞
- 管道通信
1.2 共享存儲
因為兩個程序不能通路彼此的位址空間,即程序1不能通路程序2的位址空間。是以作業系統提供了共享空間和同步互斥工具,注意兩個程序對共享空間的通路必須是互斥的
共享存儲有兩種存儲方式:
-
基于資料結構的共享:共享空間裡隻能存放特定資料結構,如長度為10的數組。
這種共享方式速度慢、限制多,是一種低級通信方式。
-
基于存儲區的共享:共享空間為記憶體中的一塊共享存儲區,資料的形式、存放位置由程序控制,而不是作業系統。
這種共享方式速度更快,是一種進階通信方式。
2 管道通信
第二種程序通信的方式是管道通信,就是兩個程序間通過一個管道實作程序間的資訊傳輸,值得注意的是:
- 管道隻能采用半雙工通信,某一時間段内隻能實作單向的傳輸。如果要實作雙向同時通信,則需要設定兩個管道
- 各程序要互斥地通路管道
- 資料以字元流的形式寫入管道,當管道寫滿時,寫程序的write()系統調用将被阻塞,等待讀程序将資料全部取走後;當讀程序将資料全部取走後,管道為空,此時讀程序的read()系統調用将會被阻塞。
- 如果管道沒寫滿,就不允許讀。如果沒讀空,就不允許寫。
- 資料一旦被讀出,就從管道中抛棄,這就意味着讀程序最多隻能有一個,否則可能有讀錯資料的情況。
3 消息傳遞
第三種程序通信的方式是消息傳遞:
程序間的資料交換以格式化的資訊(資訊頭+資訊體)為機關。程序通過作業系統提供的“發送消息/接收消息”兩個原語進行資料交換
消息傳遞又分為兩種:
- 直接通信方式:消息直接挂到接收程序的消息緩沖隊列上
- 間接通信方式:消息要先發送到中間實體(信箱)中,是以也稱“信箱通信方式”,如:計算機網路中的電子郵件系統,兩個程序通過發送原語和接收原語來從中間實體獲得資訊。
4 小結
本篇重點:
(1)程序通信的三種方式的大緻流程
(2)共享存儲:要互斥地通路共享空間
(3)管道通信:一個管道隻能實作半雙工通信;在管道寫滿時,不能再寫、讀空時,不能再讀、沒寫滿不能讀,沒讀空不能寫
(4)消息傳遞的兩種方式差別