ipc是程序間通訊(interprocess communication)的簡稱。傳統上該術語描述的是執行在某個作業系統上的程序間的各種訊息傳遞(message passing)的方式。
在unix作業系統過去30年的演變史中,訊息傳遞經歷了如下幾個發展階段。
看一看由unix提供的各種同步形式的演變同樣頗有收益:
注意:沒有任何東西限制任何ipc技術只能使用兩個程序。
我們可以把任意型別的ipc的持續性(persistence)定義成該型別的乙個物件一直存在多長時間。
(1)隨程序持續的(process-persistent)ipc物件一直存在到開啟該物件的最後乙個程序關閉該物件為止。例如管道和fifo就是這種物件。
(2)隨核心持續的(kernel-persistent)ipc物件一直存在到核心重新自舉或顯示刪除該物件為止。例如system v的訊息佇列、訊號量和共享記憶體區就是此類物件。posix的訊息佇列、訊號量和共享記憶體區必須至少是隨核心持續的。但也可以是隨檔案系統持續的,具體取決於實現。
(3)隨檔案系統持續的(filesystem-persistent)ipc物件一直存在到顯示刪除該物件為止。即使核心重新自舉了,該物件還是保持其值。posix訊息佇列、訊號量和共享記憶體如果是使用對映檔案實現的(不是必需條件),那麼它們就是隨檔案系統持續的。
當兩個或多個無親緣關係的程序使用某種型別的ipc物件來彼此交換資訊時,該ipc物件必須有乙個某種形式的名字或識別符號,這樣其中乙個程序(往往是伺服器)可以建立該ipc對線,其餘程序可以指定同乙個ipc物件。
在以後各章具體講述某種形式的ipc時,我們將使用另外的命名約定。對於一種給定的ipc型別,其可能的名字的集合就合稱為它的名字空間。名字空間很重要,因為對於除普通的管道以外的所有形式的ipc來說,名字是客戶與伺服器彼此連線以交換訊息的手段。
下圖彙總了不同形式ipc所用的命名約定:
我們需要理解fork、exec和_exit函式對於所討論的各種形式的ipc的影響。下圖對此做了總結:
這些錯誤處理函式就是作者在真正呼叫的函式上封裝了一層了,新增了對錯誤的判斷,並列印錯誤資訊等操作,看一下原始碼就明白怎麼回事了。
這些是有關unix標準化的東西,了解一下就夠了。
為分析各種特性,全書主要使用了三種互動模式:
(1)檔案伺服器:客戶--伺服器應用程式,客戶向伺服器傳送乙個路徑名,伺服器把該檔案的內容返回給客戶。
(2)生產者-消費者:乙個或多個執行緒或程序(生產者)把資料放到乙個共享緩衝區中,另有乙個或多個執行緒或程序(消費者)對該共享緩衝區的資料進行操作。
(3)序列號持續增1:乙個或多個執行緒或程序給乙個共享的序列號持續增1。該序列號有時在乙個共享檔案中,有時在共享記憶體中。
第乙個例子分析各種形式的訊息傳遞,另外兩個例子則分析各種型別的同步和共享記憶體區。
ipc傳統上是unix中乙個雜亂不堪的領域。雖然有了各種各樣的解決辦法,但沒有乙個是完美的。我們的討論分成4個主要領域:
(1)訊息傳遞(管道、fifo、訊息佇列)
(2)同步(互斥鎖、條件變數、讀寫鎖、訊號量)
(3)共享記憶體區(匿名共享記憶體區、具名共享記憶體區)
(4)過程呼叫(solaris門、sun rpc)
各種型別的ipc物件的持續性可以是程序持續的、核心持續的以及檔案系統持續的。
各種型別的ipc物件的另乙個特性是名字空間,也就是使用ipc物件的程序、執行緒標識各個ipc物件的方式。
第一章 簡介
執行緒的優勢 發揮多處理器的強大能力 由於基本的排程單位是執行緒,因此如果在程式中只有乙個執行緒,那麼最多同時只能在乙個處理器上執行。在雙處理器系統上,單執行緒的程式只能使用一半的cpu資源,而在擁有100個處理器的系統上,將有99 的資源無法使用。在gui應用,執行緒可以提高使用者介面的響應靈敏度...
第一章(簡介)
技術手段 包含運用虛擬專用網路 virtual private network vpn 加密協議,入侵檢測系統 intrusion detection system ids 入侵防禦系統 instrusion prevention system ips 訪問控制列表 access control l...
第一章 Spring簡介
物件的建立 了解 spring 必須得了解一下物件的工廠模式 model publicinte cefruit publicclas mentsfruit publicclassorangeimplementsfruit 直接建立物件方式 fruit fruit neworange fruit.ea...