




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、徐小龍/WindowsLinuxMac OSOpenStackAndroidLinux進程通信本講內容1. 進程通信概念與類型2. 低級通信之信號通信3. 高級通信之共享存儲4. 高級通信之消息通信5. 高級通信之管道通信進程通信概念與類型基本概念基本概念1p進程間通信IPC是指進程在系統(tǒng)里同時運行,并相互傳遞、交換信息p通過進程通信能夠實現數據傳輸、共享數據、通知事件、資源共享、進程控制p進程通過與內核及其它進程之間的互相通信來協調它們的行為進程通信概念與類型通信類型通信類型2低級通信進程通信概念與類型通信方式通信方式3字節(jié)格式:接收方不保留各次發(fā)送之間的分界報文格式:接收方保留各次發(fā)送之間
2、的分界分成定長報文/不定長報文和可靠報文/不可靠報文阻塞操作:指操作方要等待操作結束不阻塞操作:指操作提交后立即返回進程聯系本講內容1. 進程通信概念與類型2. 低級通信之信號通信3. 高級通信之共享存儲4. 高級通信之消息通信5. 高級通信之管道通信機制原理機制原理 1每個信號都對應正整數常量,即信號編號進程之間傳送事先約定的信息的類型,用于通知進程發(fā)生了某異常事件進程通過信號機制來檢查是否有信號。若有,中斷正在執(zhí)行的程序,轉向對應的處理程序;結束后返回到斷點繼續(xù)執(zhí)行,這是一種軟中斷低級通信之信號通信信號收發(fā)信號收發(fā)2低級通信之信號通信發(fā)送信號,發(fā)送信號的程序用系統(tǒng)調用kill( )實現預
3、置 信 號 處 理 , 接 收 信 號 的 程 序 用 s i g n a l ( )來實現對處理方式的調用接收信號的進程按事先規(guī)定完成對事件的處理實例實例3低級通信之信號通信創(chuàng)建兩個子進程,父進程捕捉鍵盤上來的按下c鍵的中斷信號捕捉到中斷信號后,父進程用系統(tǒng)調用kill( )向兩個子進程發(fā)出信號,子進程捕捉到信號后分別輸出下列信息后終止: Child process1 is killed by parent! Child process2 is killed by parent!父進程等兩個子進程終止后,輸出如下的信息后終止: Parent process is killed!實例實例3低級
4、通信之信號通信1、kill( ) int kill(pid, sig)pid是進程的標識符,參數sig是要發(fā)送的軟中斷信號(1)pid0時,信號發(fā)送給進程pid(2)pid=0時,信號發(fā)送給與發(fā)送進程同組的所有進程(3)pid=-1時,信號發(fā)送給所有用戶標識符真正等于發(fā)送進程的有效用戶標識號的進程實例實例3低級通信之信號通信2、signal( ) signal(sig,function)頭文件為 #include 參數定義 int sig; void (*func) ( )低級通信之信號通信值值名名 字字說說 明明01SIGHUP掛起掛起02SIGINT中斷,當用戶從鍵盤按中斷,當用戶從鍵盤按
5、c鍵或鍵或break鍵時鍵時03SIGQUIT退出,當用戶從鍵盤按退出,當用戶從鍵盤按quit鍵時鍵時04SIGILL非法指令非法指令05SIGTRAP跟蹤陷阱,啟動進程,跟蹤代碼的執(zhí)行跟蹤陷阱,啟動進程,跟蹤代碼的執(zhí)行06SIGIOTIOT指令指令07SIGEMTEMT指令指令08SIGFPE浮點運算溢出浮點運算溢出09SIGKILL殺死、終止進程殺死、終止進程 10SIGBUS總線錯誤總線錯誤11SIGSEGV段違例,進程試圖去訪問其虛地址空間以外的位置段違例,進程試圖去訪問其虛地址空間以外的位置12SIGSYS系統(tǒng)調用中參數錯,如系統(tǒng)調用號非法系統(tǒng)調用中參數錯,如系統(tǒng)調用號非法13SIG
6、PIPE向某個非讀管道中寫入數據向某個非讀管道中寫入數據14SIGALRM鬧鐘。當某進程希望在某時間后接收信號時發(fā)此信號鬧鐘。當某進程希望在某時間后接收信號時發(fā)此信號15SIGTERM軟件終止軟件終止16SIGUSR1用戶自定義信號用戶自定義信號117SIGUSR2用戶自定義信號用戶自定義信號218SIGCLD某個子進程死某個子進程死19SIGPWR電源故障電源故障實例實例3低級通信之信號通信2、signal( ) signal(sig,function)function 的解釋如下:(1)function=1時,對信號不予理睬,屏蔽該類信號(2)function=0時,進程在收到sig信號后
7、應終止自己(3)function0, 1時,值作為信號處理程序的指針低級通信之信號通信#include #include #include void waiting( ),stop( );int wait_mark;main( )int p1,p2,stdout;signal(SIGINT,SIG_IGN); /*防止防止control-C 鍵盤中斷鍵盤中斷*/while(p1=fork( )=-1); /*創(chuàng)建子進程創(chuàng)建子進程p1*/if (p10)while(p2=fork( )=-1); /*創(chuàng)建子進程創(chuàng)建子進程p2*/if(p20)wait_mark=1;signal(SIGINT,s
8、top); /*接收到接收到c信號,轉信號,轉stop*/waiting( );kill(p1,16); /*向向p1發(fā)軟中斷信號發(fā)軟中斷信號16*/kill(p2,17); /*向向p2發(fā)軟中斷信號發(fā)軟中斷信號17*/wait(0); /*同步同步*/wait(0);printf(Parent process is killed!n);exit(0);elsewait_mark=1;signal(17,stop); /*接收到軟中斷信號接收到軟中斷信號17,轉,轉stop*/waiting( );printf(Child process 2 is killed by parent!n);ex
9、it(0);elsewait_mark=1;signal(16,stop); /*接收到軟中斷信號接收到軟中斷信號16,轉,轉stop*/waiting( );printf(Child process 1 is killed by parent!n);exit(0); void waiting( )while(wait_mark!=0);void stop( )wait_mark=0;進程聯系本講內容1. 進程通信概念與類型2. 低級通信之信號通信3. 高級通信之共享存儲4. 高級通信之消息通信5. 高級通信之管道通信高級通信之共享存儲機制原理機制原理 1共享存儲區(qū)是系統(tǒng)中通信速度最高的一種通
10、信機制進程通過對共享存儲區(qū)中數據的讀、寫來進行通信程序程序數據數據棧棧共享共享存儲區(qū)存儲區(qū)程序程序數據數據棧棧進程進程A的虛空間的虛空間 內存空間內存空間 進程進程B的虛空間的虛空間 高級通信之共享存儲函數調用函數調用21、shmget( ) 創(chuàng)建、獲得一個共享存儲區(qū)。 系統(tǒng)調用格式: shmid=shmget(key,size,flag) 頭文件如下: #include #include #include高級通信之共享存儲函數調用函數調用21、shmget( ) 創(chuàng)建、獲得一個共享存儲區(qū) 系統(tǒng)調用格式: shmid=shmget(key,size,flag)key是共享存儲區(qū)的名字size是
11、其大?。ㄒ宰止?jié)計)flag是用戶設置的標志高級通信之共享存儲函數調用函數調用22、shmat( )共享存儲區(qū)附接,將共享存儲區(qū)附接進程虛擬地址空間系統(tǒng)調用格式: virtaddr=shmat(shmid,addr,flag)shmid是共享存儲區(qū)的標識符addr是用戶給定,將共享存儲區(qū)附接到進程的虛地址空間flag規(guī)定讀、寫權限,值為0時,表示可讀、可寫返回值是共享存儲區(qū)所附接到的進程虛地址viraddr高級通信之共享存儲函數調用函數調用23、shmdt( )把共享存儲區(qū)從進程虛地址空間斷開系統(tǒng)調用格式: shmdt(addr)addr是要斷開連接的虛地址,即由shmat( )所返回的虛地址調
12、用成功,返回0值,調用不成功,返回-1高級通信之共享存儲函數調用函數調用24、shmctl( )共享存儲區(qū)的控制,對其狀態(tài)進行讀取和修改系統(tǒng)調用格式: shmctl(shmid,cmd,buf)buf是用戶緩沖區(qū)地址, cmd是操作命令:用于查詢共享存儲區(qū)的情況,如長度、連接進程數、共享區(qū)的創(chuàng)建者標識符等用于設置或改變共享存儲區(qū)的屬性,如共享存儲區(qū)的許可權、連接進程計數等;共享存儲區(qū)的加鎖和解鎖,刪除共享存儲區(qū)標識符等。高級通信之共享存儲實例實例3進程利用fork()創(chuàng)建兩個子進程server和client進行通信。client端建立或打開一個key為75的共享區(qū),client填入9到0,cl
13、ient每發(fā)送一次數據后顯示“(client)sent”。server端建立或打開一個key為75的共享區(qū),等待其他進程發(fā)來的消息,server每接收到一次數據后顯示“(server)received”。高級通信之共享存儲main( ) while (i=fork( )= =-1); if (!i) server( ); system(“ipcs -m”); while (i=fork( )= =-1); if (!i) client( ); wait(0); wait(0);高級通信之共享存儲void server( )int x;shmid=shmget(SHMKEY,1024,0777|
14、IPC_CREAT); /*創(chuàng)建共享存儲區(qū)創(chuàng)建共享存儲區(qū)*/addr=shmat(shmid,0,0); /*獲取首地址獲取首地址*/do *addr=-1; while (*addr=-1); x=*addr printf(server) receivedn);while (*addr);shmctl(shmid,IPC_RMID,0); /*撤消共享存儲區(qū),歸還資源撤消共享存儲區(qū),歸還資源*/exit(0);高級通信之共享存儲#include #include #include #define SHMKEY 75int shmid,i; int *addr;void client( ) i
15、nt i;shmid=shmget(SHMKEY,1024,0777 |IPC_CREAT); /*打開打開共享存儲區(qū)共享存儲區(qū)*/addr=shmat(shmid,0,0); /*獲得共享存儲區(qū)首地址獲得共享存儲區(qū)首地址*/for (i=9;i=0;i-) while (*addr!=-1); printf(client) sentn); *addr=i; exit(0);進程聯系本講內容1. 進程通信概念與類型2. 低級通信之信號通信3. 高級通信之共享存儲4. 高級通信之消息通信5. 高級通信之管道通信高級通信之消息通信機制原理機制原理 1消息是一個格式化的可變長信息單元消息通信機制允許
16、由進程給其他進程發(fā)送消息進程收到多個消息時,可排成消息隊列消息隊列有消息隊列描述符方便用戶和系統(tǒng)訪問 高級通信之消息通信機制原理機制原理 1接收進程 R發(fā)送進程S消息.高級通信之消息通信函數調用函數調用2msgget( ):創(chuàng)建一個消息,獲得消息的描述符msgsnd():向指定的消息隊列發(fā)送一個消息,并將該消息鏈接到該消息隊列的尾部msgrcv( ):從指定的消息隊列中接收消息msgctl( ):讀取消息隊列的狀態(tài)并進行修改,如查詢消息隊列描述符、修改許可權及刪除該隊列等進程聯系本講內容1. 進程通信概念與類型2. 低級通信之信號通信3. 高級通信之共享存儲4. 高級通信之消息通信5. 高級通信之管道通信高級通信之管道通信機制原理機制原理1管道是連接寫進程和讀進程的、并允許以生產者-消費者方式進行通信的共享文件,稱為pipe文件由寫進程從管道的寫
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 硬件設施維護與更新工作總結計劃
- 2024年西安市團結實驗學校招聘筆試真題
- 2024年湖南省交通運輸廳下屬事業(yè)單位真題
- 微生物世界探索活動計劃
- 法律與經濟政策的協調試題及答案探討
- 2024年福建藝術職業(yè)學院招聘筆試真題
- 建立良好團隊文化的路徑計劃
- 一個學期的教學反思與總結計劃
- 如何提高倉庫的系統(tǒng)性計劃
- 網絡管理員考試新版本試題及答案
- 民俗學概論全套精美課件
- 應用文寫作概述課件
- 危重癥孕產婦交流課件:妊娠遇到主動脈夾層搶救成功病例分享
- 數控加工中心培訓課件
- 高中政治《增強“四個意識”做到“兩個維護”》教學設計
- 山東省醫(yī)院護理服務質量評價細則簡介
- 自動控制原理全套ppt課件(完整版)
- 關聯交易同期資料模板
- 荷葉圓圓說課課件
- 路斯特DriveManager基本操作
- 截止閥合格證模板
評論
0/150
提交評論