出版時(shí)間:2010-7 出版社:人民郵電出版社 作者:(美)W. Richard Stevens 頁(yè)數(shù):454
Tag標(biāo)簽:無(wú)
前言
大多數(shù)重要的程序都涉及進(jìn)程間通信(Inter process Communication,IPC)。這是受下述設(shè)計(jì)原則影響的自然結(jié)果:把應(yīng)用程序設(shè)計(jì)為一組相互通信的小片斷比將其設(shè)計(jì)為單個(gè)龐大的程序更好。從歷史角度看,應(yīng)用程序有如下幾種構(gòu)建方法。(1)用一個(gè)龐大的程序完成全部工作。程序的各部分可以實(shí)現(xiàn)為函數(shù),函數(shù)之間通過(guò)參數(shù)、返回值和全局變量來(lái)交換信息。(2)使用多個(gè)程序,程序之間用某種形式的IPC進(jìn)行通信。許多標(biāo)準(zhǔn)的Unix工具都是按這種風(fēng)格設(shè)計(jì)的,它們使用shell管道(IPC的一種形式)在程序之間傳遞信息。(3)使用一個(gè)包含多個(gè)線程的程序,線程之間使用某種IPC。這里仍然使用術(shù)語(yǔ)IPC,盡管通信是在線程之間而不是在進(jìn)程之間進(jìn)行的。還可以把后兩種設(shè)計(jì)形式結(jié)合起來(lái):用多個(gè)進(jìn)程來(lái)實(shí)現(xiàn),其中每個(gè)進(jìn)程包含幾個(gè)線程。在這種情況下,進(jìn)程內(nèi)部的線程之間可以通信,不同的進(jìn)程之間也可以通信。上面講述了可以把完成給定任務(wù)所需的工作分到多個(gè)進(jìn)程中,或許還可以進(jìn)一步分到進(jìn)程內(nèi)的多個(gè)線程中。在包含多個(gè)處理器(CPU)的系統(tǒng)中,多個(gè)進(jìn)程也許可以(在不同的CPU上)同時(shí)運(yùn)行,或許給定進(jìn)程內(nèi)的多個(gè)線程也能同時(shí)運(yùn)行。因此,把任務(wù)分到多個(gè)進(jìn)程或線程中有望減少完成指定任務(wù)的時(shí)間。
內(nèi)容概要
本書(shū)是一部UNIX網(wǎng)絡(luò)編程的經(jīng)典之作!進(jìn)程間通信(IPC)幾乎是所有Unix程序性能的關(guān)鍵,理解IPC也是理解如何開(kāi)發(fā)不同主機(jī)間網(wǎng)絡(luò)應(yīng)用程序的必要條件。本書(shū)從對(duì)Posix IPC和System V IPC的內(nèi)部結(jié)構(gòu)開(kāi)始討論,全面深入地介紹了4種IPC形式:消息傳遞(管道、FIFO、消息隊(duì)列)、同步(互斥鎖、條件變量、讀寫(xiě)鎖、文件與記錄鎖、信號(hào)量)、共享內(nèi)存(匿名共享內(nèi)存、具名共享內(nèi)存)及遠(yuǎn)程過(guò)程調(diào)用(Solaris門(mén)、Sun RPC)。附錄中給出了測(cè)量各種IPC形式性能的方法?! ”緯?shū)內(nèi)容詳盡且具權(quán)威性,幾乎每章都提供精選的習(xí)題,并提供了部分習(xí)題的答案,是網(wǎng)絡(luò)研究和開(kāi)發(fā)人員理想的參考書(shū)。
作者簡(jiǎn)介
作者:(美國(guó))W.Richard StevensW.Richard Stevens,國(guó)際知名的UNIX和網(wǎng)絡(luò)專(zhuān)家,備受贊譽(yù)的技術(shù)作家他1951年2月5日出生于贊比亞,后隨父母回到美國(guó)中學(xué)時(shí)就讀于弗吉尼亞菲什伯恩軍事學(xué)校,1973年獲得密歇根大學(xué)航空和航天工程學(xué)士學(xué)位,1975年至1982年,他在亞利桑那州圖森市的基特峰國(guó)家天文臺(tái)從事計(jì)算機(jī)編程工作,業(yè)余時(shí)間喜愛(ài)飛行運(yùn)動(dòng),做過(guò)兼職飛行教練這期間他分別在1978年和1982年獲得亞利桑那大學(xué)系統(tǒng)工程碩士和博士學(xué)位此后他去康涅狄格州紐黑文的健康系統(tǒng)國(guó)際公司任主管計(jì)算機(jī)服務(wù)的副總裁,1990年他回到圖森,從事專(zhuān)業(yè)技術(shù)寫(xiě)作和咨詢工作寫(xiě)下了多種經(jīng)典的傳世之作。
書(shū)籍目錄
第一部分 簡(jiǎn)介 第1章 簡(jiǎn)介 1.1 概述 1.2 進(jìn)程、線程與信息共享 1.3 IPC對(duì)象的持續(xù)性 1.4 名字空間 1.5 fork、exec和exit對(duì)IPC對(duì)象的影響 1.6 出錯(cuò)處理:包裹函數(shù) 1.7 Unix標(biāo)準(zhǔn) 1.8 書(shū)中IPC例子索引表 1.9 小結(jié) 習(xí)題 第2章 Posix IPC 2.1 概述 2.2 IPC名字 2.3 創(chuàng)建與打開(kāi)IPC通道 2.4 IPC權(quán)限 2.5 小結(jié) 習(xí)題 第3章 System V IPC 3.1 概述 3.2 key_t鍵和ftok函數(shù) 3.3 ipc_perm結(jié)構(gòu) 3.4 創(chuàng)建與打開(kāi)IPC通道 3.5 IPC權(quán)限 3.6 標(biāo)識(shí)符重用 3.7 ipcs和ipcrm程序 3.8 內(nèi)核限制 3.9 小結(jié) 習(xí)題 第二部分 消息傳遞 第4章 管道和FIFO 4.1 概述 4.2 一個(gè)簡(jiǎn)單的客戶-服務(wù)器例子 4.3 管道 4.4 全雙工管道 4.5 popen和pclose函數(shù) 4.6 FIFO 4.7 管道和FIFO的額外屬性 4.8 單個(gè)服務(wù)器,多個(gè)客戶 4.9 對(duì)比迭代服務(wù)器與并發(fā)服務(wù)器 4.10 字節(jié)流與消息 4.11 管道和FIFO限制 4.12 小結(jié) 習(xí)題 第5章 Posix消息隊(duì)列 5.1 概述 5.2 mq_open、mq_close和mq_unlink函數(shù) 5.3 mq_getattr和mq_setattr函數(shù) 5.4 mq_send和mq_receive函數(shù) 5.5 消息隊(duì)列限制 5.6 mq_notify函數(shù) 5.7 Posix實(shí)時(shí)信號(hào) 5.8 使用內(nèi)存映射I/O實(shí)現(xiàn)Posix消息隊(duì)列 5.9 小結(jié) 習(xí)題 第6章 System V消息隊(duì)列 6.1 概述 6.2 msgget函數(shù) 6.3 msgsnd函數(shù) 6.4 msgrcv函數(shù) 6.5 msgctl函數(shù) 6.6 簡(jiǎn)單的程序 6.7 客戶-服務(wù)器例子 6.8 復(fù)用消息 6.9 消息隊(duì)列上使用select和poll 6.10 消息隊(duì)列限制 6.11 小結(jié) 習(xí)題 第三部分 同步 第7章 互斥鎖和條件變量 7.1 概述 7.2 互斥鎖:上鎖與解鎖 7.3 生產(chǎn)者-消費(fèi)者問(wèn)題 7.4 對(duì)比上鎖與等待 7.5 條件變量:等待與信號(hào)發(fā)送 7.6 條件變量:定時(shí)等待和廣播 7.7 互斥鎖和條件變量的屬性 7.8 小結(jié) 習(xí)題 第8章 讀寫(xiě)鎖 8.1 概述 8.2 獲取與釋放讀寫(xiě)鎖 8.3 讀寫(xiě)鎖屬性 8.4 使用互斥鎖和條件變量實(shí)現(xiàn)讀寫(xiě)鎖 8.5 線程取消 8.6 小結(jié) 習(xí)題 第9章 記錄上鎖 9.1 概述 9.2 對(duì)比記錄上鎖與文件上鎖 9.3 Posix fcntl記錄上鎖 9.4 勸告性上鎖 9.5 強(qiáng)制性上鎖 9.6 讀出者和寫(xiě)入者的優(yōu)先級(jí) 9.7 啟動(dòng)一個(gè)守護(hù)進(jìn)程的唯一副本 9.8 文件作鎖用 9.9 NFS上鎖 9.10 小結(jié) 習(xí)題 第10章 Posix信號(hào)量 10.1 概述 10.2 sem_open、sem_close和sem_unlink函數(shù) 10.3 sem_wait和sem_trywait函數(shù) 10.4 sem_post和sem_getvalue函數(shù) 10.5 簡(jiǎn)單的程序 10.6 生產(chǎn)者-消費(fèi)者問(wèn)題 10.7 文件上鎖 10.8 sem_init和sem_destroy函數(shù) 10.9 多個(gè)生產(chǎn)者,單個(gè)消費(fèi)者 10.10 多個(gè)生產(chǎn)者,多個(gè)消費(fèi)者 10.11 多個(gè)緩沖區(qū) 10.12 進(jìn)程間共享信號(hào)量 10.13 信號(hào)量限制 10.14 使用FIFO實(shí)現(xiàn)信號(hào)量 10.15 使用內(nèi)存映射I/O實(shí)現(xiàn)信號(hào)量 10.16 使用System V信號(hào)量實(shí)現(xiàn)Posix信號(hào)量 10.17 小結(jié) 習(xí)題 第11章 System V信號(hào)量 11.1 概述 11.2 semget函數(shù) 11.3 semop函數(shù) 11.4 semctl函數(shù) 11.5 簡(jiǎn)單的程序 11.6 文件上鎖 11.7 信號(hào)量限制 11.8 小結(jié) 習(xí)題 第四部分 共享內(nèi)存區(qū) 第12章 共享內(nèi)存區(qū)介紹 12.1 概述 12.2 mmap、munmap和msync函數(shù) 12.3 在內(nèi)存映射文件中給計(jì)數(shù)器持續(xù)加 12.4 .4BSD匿名內(nèi)存映射 12.5 SVR4/dev/zero內(nèi)存映射 12.6 訪問(wèn)內(nèi)存映射的對(duì)象 12.7 小結(jié) 習(xí)題 第13章 Posix共享內(nèi)存區(qū) 13.1 概述 13.2 shm_open和shm_unlink函數(shù) 13.3 ftruncate和fstat函數(shù) 13.4 簡(jiǎn)單的程序 13.5 給一個(gè)共享的計(jì)數(shù)器持續(xù)加 13.6 向一個(gè)服務(wù)器發(fā)送消息 13.7 小結(jié) 習(xí)題 第14章 System V共享內(nèi)存區(qū) 14.1 概述 14.2 shmget函數(shù) 14.3 shmat函數(shù) 14.4 shmdt函數(shù) 14.5 shmctl函數(shù) 14.6 簡(jiǎn)單的程序 14.7 共享內(nèi)存區(qū)限制 14.8 小結(jié) 習(xí)題 第五部分 遠(yuǎn)程過(guò)程調(diào)用 第15章 門(mén) 15.1 概述 15.2 door_call函數(shù) 15.3 door_create函數(shù) 15.4 door_return函數(shù) 15.5 door_cred函數(shù) 15.6 door_info函數(shù) 15.7 例子 15.8 描述符傳遞 15.9 door_sever_create函數(shù) 15.10 door_bind、door_unbind和door_revoke函數(shù) 15.11 客戶或服務(wù)器的過(guò)早終止 15.12 小結(jié) 習(xí)題 第16章 Sun RPC 16.1 概述 16.2 多線程化 16.3 服務(wù)器捆綁 16.4 認(rèn)證 16.5 超時(shí)和重傳 16.6 調(diào)用語(yǔ)義 16.7 客戶或服務(wù)器的過(guò)早終止 16.8 XDR:外部數(shù)據(jù)表示 16.9 RPC分組格式 16.10 小結(jié) 習(xí)題 后記 附錄A 性能測(cè)量 附錄B 線程入門(mén) 附錄C 雜湊的源代碼 附錄D 精選習(xí)題解答 參考文獻(xiàn) 索引
章節(jié)摘錄
插圖:即使一個(gè)進(jìn)程終止時(shí)系統(tǒng)會(huì)自動(dòng)釋放某個(gè)鎖,那也可能解決不了問(wèn)題。該鎖保護(hù)某個(gè)臨界區(qū)很可能是為了在執(zhí)行該臨界區(qū)代碼期間更新某個(gè)數(shù)據(jù)。如果該進(jìn)程在執(zhí)行該臨界區(qū)的中途終止,該數(shù)據(jù)處于什么狀態(tài)呢?該數(shù)據(jù)處于不一致?tīng)顟B(tài)的可能性很大:舉例來(lái)說(shuō),一個(gè)新條目也許只是部分插入某個(gè)鏈表中,要是該進(jìn)程終止時(shí)內(nèi)核僅僅把那個(gè)鎖解開(kāi)的話,使用該鏈表的下一個(gè)進(jìn)程就可能發(fā)現(xiàn)它已損壞。然而在某些例子中,讓內(nèi)核在進(jìn)程終止時(shí)清理某個(gè)鎖(若是信號(hào)量情況則為計(jì)數(shù)器)不成問(wèn)題。例如,某個(gè)服務(wù)器可能使用一個(gè)SystemV信號(hào)量(打開(kāi)其SEM-UNDO特性)來(lái)統(tǒng)計(jì)當(dāng)前被處理的客戶數(shù)。每次fork一個(gè)子進(jìn)程時(shí),它就把該信號(hào)量加1,當(dāng)該子進(jìn)程終止時(shí),它再把該信號(hào)量減1。如果該子進(jìn)程非正常終止,內(nèi)核仍會(huì)把該計(jì)數(shù)器減1。9.7節(jié)給出了一個(gè)例子,說(shuō)明內(nèi)核在什么時(shí)候釋放一個(gè)鎖(不是我們剛講的計(jì)數(shù)器)合適。那兒的守護(hù)進(jìn)程一開(kāi)始就在自己的某個(gè)數(shù)據(jù)文件上獲得一個(gè)寫(xiě)入鎖,然后在其運(yùn)行期間一直持有該鎖。如果有人試圖啟動(dòng)該守護(hù)進(jìn)程的另一個(gè)副本,那么新的副本將因?yàn)闊o(wú)法取得該寫(xiě)入鎖而終止,從而確保該守護(hù)進(jìn)程只有一個(gè)副本在一直運(yùn)行。但是如果該守護(hù)進(jìn)程不正常地終止了,那么內(nèi)核會(huì)釋放該寫(xiě)入鎖,從而允許啟動(dòng)該守護(hù)進(jìn)程的另一個(gè)副本。
后記
本書(shū)詳細(xì)講述了用于進(jìn)程間通信(IPC)的四種不同技術(shù):(1)消息傳遞(管道、FIFO、Posix莉lSystemV消息隊(duì)列);(2)同步(互斥鎖、條件變量、讀寫(xiě)鎖、文件和記錄鎖、.Posix和SystemV信號(hào)量);(3)共享內(nèi)存區(qū)(匿名共享內(nèi)存區(qū)、有名Posix共享內(nèi)存區(qū)、有名SystemV共享內(nèi)存區(qū));(4)過(guò)程調(diào)用(Solaris門(mén)、SunRPC)。消息隊(duì)列和過(guò)程調(diào)用往往單獨(dú)使用,也就是說(shuō)它們通常提供了自己的同步機(jī)制。相反,共享內(nèi)存區(qū)通常需要某種由應(yīng)用程序提供的同步形式才能正確工作.同步技術(shù)有時(shí)候單獨(dú)使用,也就是說(shuō)不涉及其他形式的IPC。討論了共16章的細(xì)節(jié)后,很顯然的一個(gè)問(wèn)題是:解決某個(gè)特定問(wèn)題應(yīng)使用哪種形式的IPC?遺憾的是不存在關(guān)于IPC的簡(jiǎn)單判定。Unix提供的類(lèi)型如此之多的IPC表明,不存在解決全部(或者甚至于大部分)問(wèn)題的單一辦法。你能做的僅僅是:逐漸熟悉各種IPC形式提供的機(jī)制,然后根據(jù)特定應(yīng)用的要求比較它們的特性。我們首先列出必須考慮的四個(gè)前提,因?yàn)樗鼈儗?duì)于你的應(yīng)用程序相當(dāng)重要。(1)連網(wǎng)的(networked)還是非連網(wǎng)的(nonnetworked)。我們假設(shè)已作出這個(gè)決定,IPC就是用于單臺(tái)主機(jī)上的進(jìn)程或線程間的。如果應(yīng)用程序有可能散布到多臺(tái)主機(jī)上,那就考慮使用套接字代替IPC,從而簡(jiǎn)化以后向連網(wǎng)的應(yīng)用程序轉(zhuǎn)移的工作。
編輯推薦
《UNIX網(wǎng)絡(luò)編程.卷2:進(jìn)程間通信(第2版)》:圖靈計(jì)算機(jī)科學(xué)叢書(shū)
圖書(shū)封面
圖書(shū)標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載
UNIX網(wǎng)絡(luò)編程 : 第2版. 第2卷, 進(jìn)程間通信(中文版) PDF格式下載
250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版