操作系統(tǒng)課件(2.7 進(jìn)程通信)_第1頁(yè)
操作系統(tǒng)課件(2.7 進(jìn)程通信)_第2頁(yè)
操作系統(tǒng)課件(2.7 進(jìn)程通信)_第3頁(yè)
操作系統(tǒng)課件(2.7 進(jìn)程通信)_第4頁(yè)
操作系統(tǒng)課件(2.7 進(jìn)程通信)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、徐小龍/WindowsLinuxMac OSOpenStackAndroidLinux進(jìn)程通信本講內(nèi)容1. 進(jìn)程通信概念與類(lèi)型2. 低級(jí)通信之信號(hào)通信3. 高級(jí)通信之共享存儲(chǔ)4. 高級(jí)通信之消息通信5. 高級(jí)通信之管道通信進(jìn)程通信概念與類(lèi)型基本概念基本概念1p進(jìn)程間通信IPC是指進(jìn)程在系統(tǒng)里同時(shí)運(yùn)行,并相互傳遞、交換信息p通過(guò)進(jìn)程通信能夠?qū)崿F(xiàn)數(shù)據(jù)傳輸、共享數(shù)據(jù)、通知事件、資源共享、進(jìn)程控制p進(jìn)程通過(guò)與內(nèi)核及其它進(jìn)程之間的互相通信來(lái)協(xié)調(diào)它們的行為進(jìn)程通信概念與類(lèi)型通信類(lèi)型通信類(lèi)型2低級(jí)通信進(jìn)程通信概念與類(lèi)型通信方式通信方式3字節(jié)格式:接收方不保留各次發(fā)送之間的分界報(bào)文格式:接收方保留各次發(fā)送之間

2、的分界分成定長(zhǎng)報(bào)文/不定長(zhǎng)報(bào)文和可靠報(bào)文/不可靠報(bào)文阻塞操作:指操作方要等待操作結(jié)束不阻塞操作:指操作提交后立即返回進(jìn)程聯(lián)系本講內(nèi)容1. 進(jìn)程通信概念與類(lèi)型2. 低級(jí)通信之信號(hào)通信3. 高級(jí)通信之共享存儲(chǔ)4. 高級(jí)通信之消息通信5. 高級(jí)通信之管道通信機(jī)制原理機(jī)制原理 1每個(gè)信號(hào)都對(duì)應(yīng)正整數(shù)常量,即信號(hào)編號(hào)進(jìn)程之間傳送事先約定的信息的類(lèi)型,用于通知進(jìn)程發(fā)生了某異常事件進(jìn)程通過(guò)信號(hào)機(jī)制來(lái)檢查是否有信號(hào)。若有,中斷正在執(zhí)行的程序,轉(zhuǎn)向?qū)?yīng)的處理程序;結(jié)束后返回到斷點(diǎn)繼續(xù)執(zhí)行,這是一種軟中斷低級(jí)通信之信號(hào)通信信號(hào)收發(fā)信號(hào)收發(fā)2低級(jí)通信之信號(hào)通信發(fā)送信號(hào),發(fā)送信號(hào)的程序用系統(tǒng)調(diào)用kill( )實(shí)現(xiàn)預(yù)

3、置 信 號(hào) 處 理 , 接 收 信 號(hào) 的 程 序 用 s i g n a l ( )來(lái)實(shí)現(xiàn)對(duì)處理方式的調(diào)用接收信號(hào)的進(jìn)程按事先規(guī)定完成對(duì)事件的處理實(shí)例實(shí)例3低級(jí)通信之信號(hào)通信創(chuàng)建兩個(gè)子進(jìn)程,父進(jìn)程捕捉鍵盤(pán)上來(lái)的按下c鍵的中斷信號(hào)捕捉到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用kill( )向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕捉到信號(hào)后分別輸出下列信息后終止: Child process1 is killed by parent! Child process2 is killed by parent!父進(jìn)程等兩個(gè)子進(jìn)程終止后,輸出如下的信息后終止: Parent process is killed!實(shí)例實(shí)例3低級(jí)

4、通信之信號(hào)通信1、kill( ) int kill(pid, sig)pid是進(jìn)程的標(biāo)識(shí)符,參數(shù)sig是要發(fā)送的軟中斷信號(hào)(1)pid0時(shí),信號(hào)發(fā)送給進(jìn)程pid(2)pid=0時(shí),信號(hào)發(fā)送給與發(fā)送進(jìn)程同組的所有進(jìn)程(3)pid=-1時(shí),信號(hào)發(fā)送給所有用戶(hù)標(biāo)識(shí)符真正等于發(fā)送進(jìn)程的有效用戶(hù)標(biāo)識(shí)號(hào)的進(jìn)程實(shí)例實(shí)例3低級(jí)通信之信號(hào)通信2、signal( ) signal(sig,function)頭文件為 #include 參數(shù)定義 int sig; void (*func) ( )低級(jí)通信之信號(hào)通信值值名名 字字說(shuō)說(shuō) 明明01SIGHUP掛起掛起02SIGINT中斷,當(dāng)用戶(hù)從鍵盤(pán)按中斷,當(dāng)用戶(hù)從鍵盤(pán)按

5、c鍵或鍵或break鍵時(shí)鍵時(shí)03SIGQUIT退出,當(dāng)用戶(hù)從鍵盤(pán)按退出,當(dāng)用戶(hù)從鍵盤(pán)按quit鍵時(shí)鍵時(shí)04SIGILL非法指令非法指令05SIGTRAP跟蹤陷阱,啟動(dòng)進(jìn)程,跟蹤代碼的執(zhí)行跟蹤陷阱,啟動(dòng)進(jìn)程,跟蹤代碼的執(zhí)行06SIGIOTIOT指令指令07SIGEMTEMT指令指令08SIGFPE浮點(diǎn)運(yùn)算溢出浮點(diǎn)運(yùn)算溢出09SIGKILL殺死、終止進(jìn)程殺死、終止進(jìn)程 10SIGBUS總線(xiàn)錯(cuò)誤總線(xiàn)錯(cuò)誤11SIGSEGV段違例,進(jìn)程試圖去訪(fǎng)問(wèn)其虛地址空間以外的位置段違例,進(jìn)程試圖去訪(fǎng)問(wèn)其虛地址空間以外的位置12SIGSYS系統(tǒng)調(diào)用中參數(shù)錯(cuò),如系統(tǒng)調(diào)用號(hào)非法系統(tǒng)調(diào)用中參數(shù)錯(cuò),如系統(tǒng)調(diào)用號(hào)非法13SIG

6、PIPE向某個(gè)非讀管道中寫(xiě)入數(shù)據(jù)向某個(gè)非讀管道中寫(xiě)入數(shù)據(jù)14SIGALRM鬧鐘。當(dāng)某進(jìn)程希望在某時(shí)間后接收信號(hào)時(shí)發(fā)此信號(hào)鬧鐘。當(dāng)某進(jìn)程希望在某時(shí)間后接收信號(hào)時(shí)發(fā)此信號(hào)15SIGTERM軟件終止軟件終止16SIGUSR1用戶(hù)自定義信號(hào)用戶(hù)自定義信號(hào)117SIGUSR2用戶(hù)自定義信號(hào)用戶(hù)自定義信號(hào)218SIGCLD某個(gè)子進(jìn)程死某個(gè)子進(jìn)程死19SIGPWR電源故障電源故障實(shí)例實(shí)例3低級(jí)通信之信號(hào)通信2、signal( ) signal(sig,function)function 的解釋如下:(1)function=1時(shí),對(duì)信號(hào)不予理睬,屏蔽該類(lèi)信號(hào)(2)function=0時(shí),進(jìn)程在收到sig信號(hào)后

7、應(yīng)終止自己(3)function0, 1時(shí),值作為信號(hào)處理程序的指針低級(jí)通信之信號(hào)通信#include #include #include void waiting( ),stop( );int wait_mark;main( )int p1,p2,stdout;signal(SIGINT,SIG_IGN); /*防止防止control-C 鍵盤(pán)中斷鍵盤(pán)中斷*/while(p1=fork( )=-1); /*創(chuàng)建子進(jìn)程創(chuàng)建子進(jìn)程p1*/if (p10)while(p2=fork( )=-1); /*創(chuàng)建子進(jìn)程創(chuàng)建子進(jìn)程p2*/if(p20)wait_mark=1;signal(SIGINT,s

8、top); /*接收到接收到c信號(hào),轉(zhuǎn)信號(hào),轉(zhuǎn)stop*/waiting( );kill(p1,16); /*向向p1發(fā)軟中斷信號(hào)發(fā)軟中斷信號(hào)16*/kill(p2,17); /*向向p2發(fā)軟中斷信號(hào)發(fā)軟中斷信號(hào)17*/wait(0); /*同步同步*/wait(0);printf(Parent process is killed!n);exit(0);elsewait_mark=1;signal(17,stop); /*接收到軟中斷信號(hào)接收到軟中斷信號(hào)17,轉(zhuǎn),轉(zhuǎn)stop*/waiting( );printf(Child process 2 is killed by parent!n);ex

9、it(0);elsewait_mark=1;signal(16,stop); /*接收到軟中斷信號(hào)接收到軟中斷信號(hào)16,轉(zhuǎn),轉(zhuǎn)stop*/waiting( );printf(Child process 1 is killed by parent!n);exit(0); void waiting( )while(wait_mark!=0);void stop( )wait_mark=0;進(jìn)程聯(lián)系本講內(nèi)容1. 進(jìn)程通信概念與類(lèi)型2. 低級(jí)通信之信號(hào)通信3. 高級(jí)通信之共享存儲(chǔ)4. 高級(jí)通信之消息通信5. 高級(jí)通信之管道通信高級(jí)通信之共享存儲(chǔ)機(jī)制原理機(jī)制原理 1共享存儲(chǔ)區(qū)是系統(tǒng)中通信速度最高的一種通

10、信機(jī)制進(jìn)程通過(guò)對(duì)共享存儲(chǔ)區(qū)中數(shù)據(jù)的讀、寫(xiě)來(lái)進(jìn)行通信程序程序數(shù)據(jù)數(shù)據(jù)棧棧共享共享存儲(chǔ)區(qū)存儲(chǔ)區(qū)程序程序數(shù)據(jù)數(shù)據(jù)棧棧進(jìn)程進(jìn)程A的虛空間的虛空間 內(nèi)存空間內(nèi)存空間 進(jìn)程進(jìn)程B的虛空間的虛空間 高級(jí)通信之共享存儲(chǔ)函數(shù)調(diào)用函數(shù)調(diào)用21、shmget( ) 創(chuàng)建、獲得一個(gè)共享存儲(chǔ)區(qū)。 系統(tǒng)調(diào)用格式: shmid=shmget(key,size,flag) 頭文件如下: #include #include #include高級(jí)通信之共享存儲(chǔ)函數(shù)調(diào)用函數(shù)調(diào)用21、shmget( ) 創(chuàng)建、獲得一個(gè)共享存儲(chǔ)區(qū) 系統(tǒng)調(diào)用格式: shmid=shmget(key,size,flag)key是共享存儲(chǔ)區(qū)的名字size是

11、其大?。ㄒ宰止?jié)計(jì))flag是用戶(hù)設(shè)置的標(biāo)志高級(jí)通信之共享存儲(chǔ)函數(shù)調(diào)用函數(shù)調(diào)用22、shmat( )共享存儲(chǔ)區(qū)附接,將共享存儲(chǔ)區(qū)附接進(jìn)程虛擬地址空間系統(tǒng)調(diào)用格式: virtaddr=shmat(shmid,addr,flag)shmid是共享存儲(chǔ)區(qū)的標(biāo)識(shí)符addr是用戶(hù)給定,將共享存儲(chǔ)區(qū)附接到進(jìn)程的虛地址空間flag規(guī)定讀、寫(xiě)權(quán)限,值為0時(shí),表示可讀、可寫(xiě)返回值是共享存儲(chǔ)區(qū)所附接到的進(jìn)程虛地址viraddr高級(jí)通信之共享存儲(chǔ)函數(shù)調(diào)用函數(shù)調(diào)用23、shmdt( )把共享存儲(chǔ)區(qū)從進(jìn)程虛地址空間斷開(kāi)系統(tǒng)調(diào)用格式: shmdt(addr)addr是要斷開(kāi)連接的虛地址,即由shmat( )所返回的虛地址調(diào)

12、用成功,返回0值,調(diào)用不成功,返回-1高級(jí)通信之共享存儲(chǔ)函數(shù)調(diào)用函數(shù)調(diào)用24、shmctl( )共享存儲(chǔ)區(qū)的控制,對(duì)其狀態(tài)進(jìn)行讀取和修改系統(tǒng)調(diào)用格式: shmctl(shmid,cmd,buf)buf是用戶(hù)緩沖區(qū)地址, cmd是操作命令:用于查詢(xún)共享存儲(chǔ)區(qū)的情況,如長(zhǎng)度、連接進(jìn)程數(shù)、共享區(qū)的創(chuàng)建者標(biāo)識(shí)符等用于設(shè)置或改變共享存儲(chǔ)區(qū)的屬性,如共享存儲(chǔ)區(qū)的許可權(quán)、連接進(jìn)程計(jì)數(shù)等;共享存儲(chǔ)區(qū)的加鎖和解鎖,刪除共享存儲(chǔ)區(qū)標(biāo)識(shí)符等。高級(jí)通信之共享存儲(chǔ)實(shí)例實(shí)例3進(jìn)程利用fork()創(chuàng)建兩個(gè)子進(jìn)程server和client進(jìn)行通信。client端建立或打開(kāi)一個(gè)key為75的共享區(qū),client填入9到0,cl

13、ient每發(fā)送一次數(shù)據(jù)后顯示“(client)sent”。server端建立或打開(kāi)一個(gè)key為75的共享區(qū),等待其他進(jìn)程發(fā)來(lái)的消息,server每接收到一次數(shù)據(jù)后顯示“(server)received”。高級(jí)通信之共享存儲(chǔ)main( ) while (i=fork( )= =-1); if (!i) server( ); system(“ipcs -m”); while (i=fork( )= =-1); if (!i) client( ); wait(0); wait(0);高級(jí)通信之共享存儲(chǔ)void server( )int x;shmid=shmget(SHMKEY,1024,0777|

14、IPC_CREAT); /*創(chuàng)建共享存儲(chǔ)區(qū)創(chuàng)建共享存儲(chǔ)區(qū)*/addr=shmat(shmid,0,0); /*獲取首地址獲取首地址*/do *addr=-1; while (*addr=-1); x=*addr printf(server) receivedn);while (*addr);shmctl(shmid,IPC_RMID,0); /*撤消共享存儲(chǔ)區(qū),歸還資源撤消共享存儲(chǔ)區(qū),歸還資源*/exit(0);高級(jí)通信之共享存儲(chǔ)#include #include #include #define SHMKEY 75int shmid,i; int *addr;void client( ) i

15、nt i;shmid=shmget(SHMKEY,1024,0777 |IPC_CREAT); /*打開(kāi)打開(kāi)共享存儲(chǔ)區(qū)共享存儲(chǔ)區(qū)*/addr=shmat(shmid,0,0); /*獲得共享存儲(chǔ)區(qū)首地址獲得共享存儲(chǔ)區(qū)首地址*/for (i=9;i=0;i-) while (*addr!=-1); printf(client) sentn); *addr=i; exit(0);進(jìn)程聯(lián)系本講內(nèi)容1. 進(jìn)程通信概念與類(lèi)型2. 低級(jí)通信之信號(hào)通信3. 高級(jí)通信之共享存儲(chǔ)4. 高級(jí)通信之消息通信5. 高級(jí)通信之管道通信高級(jí)通信之消息通信機(jī)制原理機(jī)制原理 1消息是一個(gè)格式化的可變長(zhǎng)信息單元消息通信機(jī)制允許

16、由進(jìn)程給其他進(jìn)程發(fā)送消息進(jìn)程收到多個(gè)消息時(shí),可排成消息隊(duì)列消息隊(duì)列有消息隊(duì)列描述符方便用戶(hù)和系統(tǒng)訪(fǎng)問(wèn) 高級(jí)通信之消息通信機(jī)制原理機(jī)制原理 1接收進(jìn)程 R發(fā)送進(jìn)程S消息.高級(jí)通信之消息通信函數(shù)調(diào)用函數(shù)調(diào)用2msgget( ):創(chuàng)建一個(gè)消息,獲得消息的描述符msgsnd():向指定的消息隊(duì)列發(fā)送一個(gè)消息,并將該消息鏈接到該消息隊(duì)列的尾部msgrcv( ):從指定的消息隊(duì)列中接收消息msgctl( ):讀取消息隊(duì)列的狀態(tài)并進(jìn)行修改,如查詢(xún)消息隊(duì)列描述符、修改許可權(quán)及刪除該隊(duì)列等進(jìn)程聯(lián)系本講內(nèi)容1. 進(jìn)程通信概念與類(lèi)型2. 低級(jí)通信之信號(hào)通信3. 高級(jí)通信之共享存儲(chǔ)4. 高級(jí)通信之消息通信5. 高級(jí)通信之管道通信高級(jí)通信之管道通信機(jī)制原理機(jī)制原理1管道是連接寫(xiě)進(jìn)程和讀進(jìn)程的、并允許以生產(chǎn)者-消費(fèi)者方式進(jìn)行通信的共享文件,稱(chēng)為pipe文件由寫(xiě)進(jìn)程從管道的寫(xiě)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論