重新整理作業系統概念系類——程序通訊
阿新 • • 發佈:2020-08-10
前言
介紹一下程序之間的通訊,以及我在工作中對於程序通訊的選擇。
為什麼有這個程序通訊的概念呢。
實際上是因為程序是一個獨立的執行單位,它分配的記憶體地址不能夠被其他程序訪問,這樣的設計其實是為了安全。
但是有時候我們程序之間需要交換資訊,那麼怎麼辦呢?作業系統給了我們路口。
程序通訊有下面幾種方式:
圖:
正文
共享儲存
看圖:
舉個栗子。
不知道各位有沒有開發過android,android app之間是如何通訊的呢?
app肯定是不同的程序,他們有一種Ashmem來實現共享記憶體,有興趣可以看看。
管道通訊
管道是指用於連線讀寫程序的一個共享檔案,又名pipe 檔案。其實就是在記憶體中開闢一個大小固定的緩衝區。
注:管道只能採用半雙工通訊,某一段時間內只能實現單項的傳輸。如果要實現雙通道,那麼要兩根。
它的運作方式是這樣的,比如說程序一寫完了資料後,程序二才能去讀取資料。
這種管道是1對1的概念,只能一個程序對另外一個程序,而不能1對多。
因為是這樣子的,只有管道寫滿之後,另外一個程序才能讀取,在另外一個程序讀取完畢之後,前面一個程序才能繼續寫。
所以說管道通訊其實是有非常嚴格的要求的。
訊息傳遞
程序間的資料交換以格式化的訊息為單位。程序通過作業系統提供的"傳送訊息/接收訊息"兩個原語來進行資料交換。
具體操作如下:
訊息傳遞有兩種方式,一種是直接通訊方式,一種是間接通訊方式。
直接通訊是這樣子的,一個程序通過傳送原語傳送訊息,這些訊息作業系統會把這些訊息掛載到目的程序訊息快取佇列中,如果目的程序需要接收,那麼目的程序可以通過接收原語接收。
所謂原語,一般是指由若干條指令組成的程式段,用來實現某個特定功能,在執行過程中不可被中斷。
間接通訊方式,訊息先發送到中間實體(信箱)中,因此也稱“信箱通訊方式”。
形象點如下: