




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、LOGO整理課件整理課件第十章第十章進程間通信進程間通信嵌入式整理課件整理課件進程間通信進程間通信IPC(InterProcess Communication)是一種進程之間交換信息是一種進程之間交換信息的一種技術,的一種技術,IPC表示各種進程通信方式的表示各種進程通信方式的統(tǒng)稱統(tǒng)稱IPC的類型有管道、消息隊列、信號量、共的類型有管道、消息隊列、信號量、共享存儲、網(wǎng)絡等享存儲、網(wǎng)絡等并不是所有的系統(tǒng)都支持所并不是所有的系統(tǒng)都支持所 有的進程間通有的進程間通信方式信方式進程間通信的概念進程間通信的概念整理課件整理課件半雙工管道簡稱管道,它是半雙工管道簡稱管道,它是UNIX IPC的最的最老形式
2、,是所有的老形式,是所有的UNIX系統(tǒng)都支持的系統(tǒng)都支持的IPC管道有兩種限制,一是半雙工,數(shù)據(jù)只能管道有兩種限制,一是半雙工,數(shù)據(jù)只能在一個方向上流動,二是它們只能在具有在一個方向上流動,二是它們只能在具有共同祖先的進程間使用。共同祖先的進程間使用。流管道沒有第一種限制,流管道沒有第一種限制,F(xiàn)IFO和命名管道和命名管道沒有第二種限制沒有第二種限制管道的創(chuàng)建管道的創(chuàng)建管道管道整理課件整理課件在單進程中使用管道沒有意義,管道通常在單進程中使用管道沒有意義,管道通常使用在父子進程間進行通信使用在父子進程間進行通信fork函數(shù)的子進程繼承父進程打開的文件描函數(shù)的子進程繼承父進程打開的文件描述符,包
3、括管道,在父子進程中各關閉管述符,包括管道,在父子進程中各關閉管道的一端就能建立起一條父子進程的通道道的一端就能建立起一條父子進程的通道父子進程關閉的管道端決定了通道的方向父子進程關閉的管道端決定了通道的方向管道的通信管道的通信整理課件整理課件對管道的讀寫操作與文件對管道的讀寫操作與文件IO相同接口相同接口當讀一個寫端已被關閉的管道時,在所有當讀一個寫端已被關閉的管道時,在所有數(shù)據(jù)都被讀取后,數(shù)據(jù)都被讀取后,read返回返回0,表示達到文,表示達到文件結束,而不返回件結束,而不返回EOF,因為寫端的進程,因為寫端的進程未終止未終止當寫一個讀端已被關閉的管道時,則產(chǎn)生當寫一個讀端已被關閉的管道時
4、,則產(chǎn)生信號信號SIGPIPE,如果忽略或捕捉該信號,如果忽略或捕捉該信號,則則write函數(shù)出錯返回,函數(shù)出錯返回,errno置為置為EPIPE寫管道有最大寫管道有最大 緩沖,超過時有可能在多進緩沖,超過時有可能在多進程寫時發(fā)生數(shù)據(jù)穿插程寫時發(fā)生數(shù)據(jù)穿插管道的通信規(guī)則管道的通信規(guī)則整理課件整理課件因為常見的操作是創(chuàng)建一個連接到另一個因為常見的操作是創(chuàng)建一個連接到另一個進程的管道,然后讀其輸入或向其發(fā)送輸進程的管道,然后讀其輸入或向其發(fā)送輸入,所以標準入,所以標準IO提供一組函數(shù)實現(xiàn)此功能,提供一組函數(shù)實現(xiàn)此功能,它創(chuàng)建一個管道,它創(chuàng)建一個管道,fork一個進程,關閉管道一個進程,關閉管道的不
5、使用端,的不使用端,exec一個一個shell執(zhí)行命令,最執(zhí)行命令,最后等待命令終止后等待命令終止popen/pclose函數(shù)函數(shù)整理課件整理課件UNIX過濾程序從標準輸入讀取數(shù)據(jù),對其過濾程序從標準輸入讀取數(shù)據(jù),對其進行適當處理后寫到標準輸出。進行適當處理后寫到標準輸出。當同一個程序產(chǎn)生某個過濾程序的輸入,當同一個程序產(chǎn)生某個過濾程序的輸入,同時又讀取該過濾程序的輸出是,則該過同時又讀取該過濾程序的輸出是,則該過濾程序就成為協(xié)同進程濾程序就成為協(xié)同進程popen函數(shù)提供了連接到另一個進程的標函數(shù)提供了連接到另一個進程的標準輸入或輸出的單行管道,而對于協(xié)同進準輸入或輸出的單行管道,而對于協(xié)同進
6、程,它有連接到另一個進程的程,它有連接到另一個進程的2為何單行管為何單行管道,一個輸入一個輸出,先將要處理的數(shù)道,一個輸入一個輸出,先將要處理的數(shù)據(jù)寫到輸入,經(jīng)過處理后再從輸出讀據(jù)寫到輸入,經(jīng)過處理后再從輸出讀協(xié)同進程協(xié)同進程整理課件整理課件FIFO又稱命名管道。不相關的進程也能通又稱命名管道。不相關的進程也能通過命名管道來交換數(shù)據(jù)過命名管道來交換數(shù)據(jù)FIFO管道的創(chuàng)建管道的創(chuàng)建非阻塞標志對管道的影響非阻塞標志對管道的影響類似普通管道,若寫一個尚無進程為讀打類似普通管道,若寫一個尚無進程為讀打開的開的FIFO,產(chǎn)生信號,產(chǎn)生信號SIGPIPE。一個給定的一個給定的FIFO可以有多個寫進程,參數(shù)
7、可以有多個寫進程,參數(shù)PIPE_BUF說明了原子寫的最大數(shù)據(jù)量。說明了原子寫的最大數(shù)據(jù)量。若某個若某個FIFO的最后一個寫進程關閉了該的最后一個寫進程關閉了該FIFO,則為讀該,則為讀該FIFO的進程產(chǎn)生一個的進程產(chǎn)生一個EOFFIFO整理課件整理課件FIFO由由shell命令使用以將數(shù)據(jù)從一條管道命令使用以將數(shù)據(jù)從一條管道線傳送到另一條,無需為此而創(chuàng)建中間臨線傳送到另一條,無需為此而創(chuàng)建中間臨時文件時文件FIFO用于客戶機用于客戶機-服務器應用程序中,以在服務器應用程序中,以在客戶機和服務器之間傳遞數(shù)據(jù)客戶機和服務器之間傳遞數(shù)據(jù)FIFO的用途的用途整理課件整理課件消息隊列、信號量和共享存儲是
8、三種系統(tǒng)消息隊列、信號量和共享存儲是三種系統(tǒng)V的的IPC,有許多相似之處,有許多相似之處三種三種IPC都使用一個非負的整數(shù)標示符引用都使用一個非負的整數(shù)標示符引用創(chuàng)建時需要指定一個關鍵字,類型為創(chuàng)建時需要指定一個關鍵字,類型為key_t,內(nèi)核將關鍵字轉為標示符返回內(nèi)核將關鍵字轉為標示符返回使用使用IPC_PRIVATE表示創(chuàng)建一個新的私有表示創(chuàng)建一個新的私有IPC結構,也可以在標志位中設置結構,也可以在標志位中設置IPC_CREAT來創(chuàng)建一個新的共有來創(chuàng)建一個新的共有IPC結構結構可以通過可以通過ftok函數(shù)指定函數(shù)指定2個參數(shù)來創(chuàng)建一個個參數(shù)來創(chuàng)建一個關鍵字關鍵字消息隊列、信號量和共享存儲消
9、息隊列、信號量和共享存儲整理課件整理課件當創(chuàng)建當創(chuàng)建IPC時,系統(tǒng)為每個時,系統(tǒng)為每個IPC設置一個設置一個ipc_perm結構,該結構規(guī)定了結構,該結構規(guī)定了IPC的許可的許可權和所有者權和所有者可以通過相應函數(shù)修改可以通過相應函數(shù)修改IPC的所有者和訪問的所有者和訪問權限權限和普通文件一樣,和普通文件一樣,IPC有三組訪問權限,每有三組訪問權限,每組訪問權限都只有讀和寫,沒有執(zhí)行權限組訪問權限都只有讀和寫,沒有執(zhí)行權限許可權結構許可權結構整理課件整理課件IPC結構在系統(tǒng)范圍內(nèi)起作用,沒有范圍計結構在系統(tǒng)范圍內(nèi)起作用,沒有范圍計數(shù),即創(chuàng)建一個數(shù),即創(chuàng)建一個IPC并添加消息后終止,該并添加消息
10、后終止,該消息仍然存在,而對于管道、消息仍然存在,而對于管道、FIFO,進程,進程終止后就刪除管道和管道內(nèi)的數(shù)據(jù)終止后就刪除管道和管道內(nèi)的數(shù)據(jù)IPC沒有名字,無法在文件系統(tǒng)中索引它們,沒有名字,無法在文件系統(tǒng)中索引它們,因此不能使用文件因此不能使用文件IO來操作,而必須使用來操作,而必須使用專門的系統(tǒng)調(diào)用函數(shù)來操作專門的系統(tǒng)調(diào)用函數(shù)來操作限制限制整理課件整理課件消息隊列克服了早期消息隊列克服了早期UNIX IPC的缺點,例的缺點,例如信號能夠傳輸?shù)男畔⒘坑邢蓿艿廊缧盘柲軌騻鬏數(shù)男畔⒘坑邢?,而管?命命名管道只能傳輸無格式的字節(jié)流,并且受名管道只能傳輸無格式的字節(jié)流,并且受緩沖區(qū)大小限制緩沖
11、區(qū)大小限制消息隊列是一個消息的鏈表,消息相當于消息隊列是一個消息的鏈表,消息相當于記錄,具有特定的格式和優(yōu)先級,對消息記錄,具有特定的格式和優(yōu)先級,對消息隊列有寫權限的進程可以按照一定的規(guī)則隊列有寫權限的進程可以按照一定的規(guī)則添加新消息,對消息隊列有讀權限的進程添加新消息,對消息隊列有讀權限的進程可以從消息隊列中讀消息可以從消息隊列中讀消息消息隊列消息隊列整理課件整理課件消息隊列的創(chuàng)建,每個消息隊列都有一個消息隊列的創(chuàng)建,每個消息隊列都有一個msqid_ds結構與其相關,該結構規(guī)定了隊結構與其相關,該結構規(guī)定了隊列的當前狀態(tài)列的當前狀態(tài)對消息隊列執(zhí)行操作,該功能操作類似對消息隊列執(zhí)行操作,該功
12、能操作類似ioctl函數(shù)函數(shù)添加消息添加消息獲取消息獲取消息消息隊列消息隊列整理課件整理課件信號量與管道和消息隊列不同,它是一個信號量與管道和消息隊列不同,它是一個計數(shù)器,用于多線程對共享數(shù)據(jù)對象的存計數(shù)器,用于多線程對共享數(shù)據(jù)對象的存取取1.測試控制該資源的信號量測試控制該資源的信號量2.若值為正,則若值為正,則進程可以使用該資源,并將信號量減進程可以使用該資源,并將信號量減1。3若信號量值為若信號量值為0,則進程進入休眠直至信號,則進程進入休眠直至信號量值大于量值大于0,該進程被喚醒后返回步驟,該進程被喚醒后返回步驟1當進程不再使用該信號量控制的共享資源當進程不再使用該信號量控制的共享資源時,該信號量加時,該信號量加1,如果有進程在休眠等待,如果有進程在休眠等待此信號量則喚醒它們此信號量則喚醒它們信號量信號量整理課件整理課件為正確使用信號量,對其的測試及減為正確使用信號量,對其的測試及減1操作操作應當是原子操作,通常在內(nèi)核實現(xiàn)應當是原子操作,通常在內(nèi)核實現(xiàn)初始值為初始值為1的信號量稱為雙態(tài)信號量,它控的信號量稱為雙態(tài)信號量,它控制單個資源制單個資源與信號量相關的數(shù)據(jù)結構為與信號量相關的數(shù)據(jù)結構為semid_ds創(chuàng)建一個信號量集合創(chuàng)建一個信號量集合信號量的操作信號量的操作信號量信號量整理課件整理課件共享存儲允許兩個或多個進程共享一定的共享存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年應用程序設計試題及答案
- 注冊會計師考試與職業(yè)道德的關系試題及答案
- 多樣化復習:陪診師考試試題及答案
- 企業(yè)協(xié)同發(fā)展與生產(chǎn)計劃的聯(lián)動
- 中小城市經(jīng)濟轉型試題及答案
- 學習成果展示與分享會計劃
- 圖書館在線服務的優(yōu)化措施計劃
- 推進生產(chǎn)自動化進程的策略計劃
- 財政支出項目的核算
- 全媒體運營師行業(yè)技能試題及答案
- 暖通系統(tǒng)調(diào)試方案
- 危貨車輛防汛救援應急預案
- 培訓學校安全管理制度
- 應用化學專課試題及答案
- 2025年紡織行業(yè):滌綸生產(chǎn)科學技術基礎知識考試題(附答案)
- 國家鐵路局規(guī)劃與標準研究院招考聘用15人高頻重點模擬試卷提升(共500題附帶答案詳解)
- 社區(qū)商業(yè)中心公共設施的規(guī)劃與運營管理
- 課件-DeepSeek從入門到精通
- 公司清明節(jié)前安全教育
- 信息系統(tǒng)集成項目公開招標采購招標書范本
- 信息管理專業(yè)職業(yè)發(fā)展前景
評論
0/150
提交評論