1. 《UNP》是《UNIX Network Programming》,unix網路編程這本書的簡稱。作者是:W.Richard Stevens,他是unix與網路方面的專家,他寫了幾本書,都是unix和網路方面的經典:
(1). 《APUE》一卷,《AdvancedProgramming in the UNIX Environment》中文稱為unix環境進階編程。是一本詳細描述unix類系統調用的書,unix的C編程中的經典。
(2). 《UNP》二卷,第一卷是關於Unix 網路方面的API詳細描述;第二卷寫的是IPC,就是interprocess communication(處理序間通訊)。是關於Unix網路編程方面的經典。
(3). 《TCP/IP詳解》三卷,第一卷寫的是TCP/IP協議,第二卷寫TCP/IP協議在BSD中的C實現,第三卷寫事務和HTTP協議等。
這六本書,可以說一出書以來就是UNIX類駭客的最愛和必讀之書。
在學習Stevens先生的書時,先對先生的在天之靈說聲謝謝,由於他,我才能方便的學到這些知識。
我現在在看的是《UNP》的第二卷,IPC的應用。第一卷還沒有翻過呢,打算看了第二卷之後有時間能學習第一卷的東西。
這些書中的源碼可以到 Stevens 先生的首頁:http://www.kohala.com/start/ 裡面去下載哈。
2、IPC簡介
IPC是處理序間通訊,就是不同進程如何傳遞訊息和同步資源。IPC從來就是UNIX中的一個雜亂不堪的領域,雖然方案很多,但沒有一個是完美的。
IPC通常分為4個領域:
(1)、資訊傳遞(管道,fifo,訊息佇列)
(2)、同步(互斥鎖,條件變數,讀寫鎖,訊號量)
(3)、共用記憶體區(匿名共用區,有名共用區)
(4)、RPC--遠程調用(Solaris門,Sun RPC)
這裡的IPC適用於單個進程中多個線程間的訊息通訊和多個進程間的訊息通訊。下面只說進程,如果要線程,把進換成線即可(呵呵)
3、資訊共用方式
(1)、通過檔案分享權限設定,線程之間通過訪問同一個檔案來共用檔案裡面的資訊。要點:這樣要訪問檔案則要穿越核心訪問磁碟;當檔案需要更新時,某種形式的同步是必須的。
(2)、通過共用在核心中的某些資訊,對這些資訊的訪問操作要調用一次系統調用。如管道、System V訊號量和System V 訊息佇列
(3)、設定一個共用記憶體區,如此,就不用通過核心而直接存取此記憶體區。需要某種形式上的同步機制。
4、書中的IPC例子:
(1)、檔案伺服器: C/S模式的程式,客戶向伺服器發送一個檔案的路徑名(請求),伺服器向客戶發送該檔案的內容或者是出錯資訊。
(2)、生產者-消費者:一個或多個稱為生產者的進程將資料放到共用緩衝區內,另外有一個或多個稱為消費者的進程從緩衝區裡面取資料出來。
(3)、序號持續加1:一個或多個進程給同一個共用序號持續加1,這個序號在檔案或者是在共用記憶體中。
第一個例子分析的是各種形式的訊息傳遞,第二、三個例子分析的是共用記憶體和各種同步機制。