兩個並行進程可以通過互相發送消息進行合作,消息是通過消息緩衝而在進程之間相互傳遞的。
unix係統中的進程間的通訊有兩層含義:
╟ ---單一進程內部各個模塊間的通訊
╟ ---作為單獨單位的各個不同進程間的通訊
前者沿襲了單任務操作係統中的模塊通訊方法;
後者必須保證各個進程在通訊過程中互不幹擾從而保持其通信的一致性。
unix采用的進程通信方式
1) 文件和記錄鎖定。
為避免兩個進程間同時要求訪問同一共享資源而引起訪問和操作的混亂,在進程對共享資源進行訪問前必須對其進行鎖定,該進程訪問完後再釋放。這是unix為共享資源提供的互斥性保障。
2)管道。
管道一般用於兩個不同進程之間的通信。當一個進程創建一個管道,並調用fork創建自己的一個子進程後,父進程關閉讀管道端,子進程關閉寫管道端,這樣 提供了兩個進程之間數據流動的一種方式。
3)fifo。
fifo是一種先進先出的隊列。它類似於一個管道,衹允許數據的單嚮流動。每個fifo都有一個名字,允許不相關的進程訪問同一個fifo。因此也成為命名管。
4)消息隊列。
unix下不同進程之間可實現共享資源的一種機製;unix允許不同進程將格式化的數據流以消息形式發送給任意
進程。對消息隊列具有操作權限的進程都可以使用msget完成對消息隊列的操作控製。通過使用消息類型,進程可以按任何順序讀消息,或為消息安排優先級順序。
5)信號燈。
作為進程間通訊的一種方法,它不是用於交換大批數據,而用於多進程之間的同步(協調對共享存儲段的存取)。
6)共享內存。
通過信號燈實現存儲共享(類似“紅燈停、緑燈行”) |