現在有:進程1的數據存在(存儲空間A)
進程2的數據存在(存儲空間B)
爲了保證進程間的安全性,使用進程1只能訪問A,進程2只能訪問B
那麼進程1,2想要通信如何實現呢?
一,共享存儲:
1,什麼是共享存儲?
操作系統提供了一個共享空間可以被進程1,2互斥的訪問
2,分類
1)基於數據結構的共享:比如共享空間只能存放一個長度爲10的數組。這種共享方式速度慢,限制多,是一種低級的通信方式
2)基於存儲區的共享:在內存中畫出一塊共享存儲區,數據的形式,存放的位置都由進程控制,而不是操作系統。相比之下它的速度更快,是一種高級通信方式
二,消息傳遞:
1,什麼是消息傳遞?
進程中的數據交換以“格式化消息“爲單位,進程通過操作系統提供的”發送消息、接收消息“兩個源語進行數據交換
2,格式化消息的結構:
1)消息頭:包括髮送進程的ID,接收進程的ID,消息類型,消息長度等格式化信息
2)消息體:記錄被髮送的信息
3,分類:
1)直接通信方式:比如進程1,給進程2發信息,就把信息掛到進程2的信息緩存隊列上
2)間接通信方式:進程1把消息放到一箇中間實體上,等待需要它的進程2取走
三,管道通信:
1,什麼是管道:
是指用於連接讀寫進程的一個共享文件,是在內存中開闢了一個固定大小的緩衝區
2,特點:
1)管道只能採用半雙工通信,在一段時間只能單向傳輸,如果要實現雙向傳輸,就需要設置兩個管道
2)各個進程需要互斥的訪問管道
3)數據以字符流的形式寫入管道,當管道寫滿時,寫進程將被堵塞,等待數據被取走。當數據全部被取出後,管道變空,此時寫進程的系統調用將被堵塞。
4)如果沒寫滿,就不允許讀,沒有讀空,就不允許寫
5)速度一旦讀出,就從管道中被拋棄,這就意味着讀進程只能有一個,否則可能會發生讀錯數據的情況