實驗3進(jìn)程通信_第1頁
實驗3進(jìn)程通信_第2頁
實驗3進(jìn)程通信_第3頁
實驗3進(jìn)程通信_第4頁
實驗3進(jìn)程通信_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗3:進(jìn)程通信一、實驗?zāi)康暮鸵?、學(xué)習(xí)進(jìn)程通信機制的相關(guān)知識,建立調(diào)用者/服務(wù)者的關(guān)系。2、了解什么是信號,熟悉LINUX系統(tǒng)中進(jìn)程之間軟中斷通信的基本原理。2、通過編程實驗在兩個進(jìn)程之間實現(xiàn)進(jìn)程間共享存儲區(qū)通信。3、深入掌握Linux操作系統(tǒng)下的進(jìn)程間通信的相關(guān)方法。二、實驗內(nèi)容1、編寫程序:用fork( )創(chuàng)建兩個子進(jìn)程,再用系統(tǒng)調(diào)用signal( )讓父進(jìn)程捕捉鍵盤上來的中斷信號(即按c鍵);捕捉到中斷信號后,父進(jìn)程用系統(tǒng)調(diào)用kill( )向兩個子進(jìn)程發(fā)出信號,子進(jìn)程捕捉到信號后分別輸出下列信息后終止:Child process1 is killed by parent!Child

2、process2 is killed by parent!父進(jìn)程等待兩個子進(jìn)程終止后,輸出如下的信息后終止:Parent process is killed!2、編制一長度為1k的共享存儲區(qū)的包含發(fā)送和接收的程序。三、實驗指導(dǎo)一、信號1、信號的基本概念每個信號都對應(yīng)一個正整數(shù)常量(稱為signal number,即信號編號。定義在系統(tǒng)頭文件<signal.h>中),代表同一用戶的諸進(jìn)程之間傳送事先約定的信息的類型,用于通知某進(jìn)程發(fā)生了某異常事件。每個進(jìn)程在運行時,都要通過信號機制來檢查是否有信號到達(dá)。若有,便中斷正在執(zhí)行的程序,轉(zhuǎn)向與該信號相對應(yīng)的處理程序,以完成對該事件的處理;處

3、理結(jié)束后再返回到原來的斷點繼續(xù)執(zhí)行。實質(zhì)上,信號機制是對中斷機制的一種模擬,故在早期的UNIX版本中又把它稱為軟中斷。信號與中斷的相似點:(1)采用了相同的異步通信方式;(2)當(dāng)檢測出有信號或中斷請求時,都暫停正在執(zhí)行的程序而轉(zhuǎn)去執(zhí)行相應(yīng)的處理程序;(3)都在處理完畢后返回到原來的斷點;(4)對信號或中斷都可進(jìn)行屏蔽。信號與中斷的區(qū)別:(1)中斷有優(yōu)先級,而信號沒有優(yōu)先級,所有的信號都是平等的;(2)信號處理程序是在用戶態(tài)下運行的,而中斷處理程序是在核心態(tài)下運行;(3)中斷響應(yīng)是及時的,而信號響應(yīng)通常都有較大的時間延遲。信號機制具有以下三方面的功能:(1)發(fā)送信號。發(fā)送信號的程序用系統(tǒng)調(diào)用ki

4、ll( )實現(xiàn);(2)預(yù)置對信號的處理方式。接收信號的程序用signal( )來實現(xiàn)對處理方式的預(yù)置;(3)收受信號的進(jìn)程按事先的規(guī)定完成對相應(yīng)事件的處理。2、信號的發(fā)送信號的發(fā)送,是指由發(fā)送進(jìn)程把信號送到指定進(jìn)程的信號域的某一位上。如果目標(biāo)進(jìn)程正在一個可被中斷的優(yōu)先級上睡眠,核心便將它喚醒,發(fā)送進(jìn)程就此結(jié)束。一個進(jìn)程可能在其信號域中有多個位被置位,代表有多種類型的信號到達(dá),但對于一類信號,進(jìn)程卻只能記住其中的某一個。進(jìn)程用kill( )向一個進(jìn)程或一組進(jìn)程發(fā)送一個信號。3、對信號的處理當(dāng)一個進(jìn)程要進(jìn)入或退出一個低優(yōu)先級睡眠狀態(tài)時,或一個進(jìn)程即將從核心態(tài)返回用戶態(tài)時,核心都要檢查該進(jìn)程是否已收

5、到軟中斷。當(dāng)進(jìn)程處于核心態(tài)時,即使收到軟中斷也不予理睬;只有當(dāng)它返回到用戶態(tài)后,才處理軟中斷信號。對軟中斷信號的處理分三種情況進(jìn)行:(1)如果進(jìn)程收到的軟中斷是一個已決定要忽略的信號(function=1),進(jìn)程不做任何處理便立即返回;(2)進(jìn)程收到軟中斷后便退出(function=0);(3)執(zhí)行用戶設(shè)置的軟中斷處理程序。二、所涉及的中斷調(diào)用1、kill( )系統(tǒng)調(diào)用格式int kill(pid,sig)參數(shù)定義int pid,sig;其中,pid是一個或一組進(jìn)程的標(biāo)識符,參數(shù)sig是要發(fā)送的軟中斷信號。(1)pid>0時,核心將信號發(fā)送給進(jìn)程pid。(2)pid=0時,核心將信號發(fā)送

6、給與發(fā)送進(jìn)程同組的所有進(jìn)程。(3)pid=-1時,核心將信號發(fā)送給所有用戶標(biāo)識符真正等于發(fā)送進(jìn)程的有效用戶標(biāo)識號的進(jìn)程。2、signal( )預(yù)置對信號的處理方式,允許調(diào)用進(jìn)程控制軟中斷信號。系統(tǒng)調(diào)用格式signal(sig,function)頭文件為 #include <signal.h>參數(shù)定義signal(sig,function)int sig;void (*func) ( )其中sig用于指定信號的類型,sig為0則表示沒有收到任何信號,余者如下表:值名 字說 明01SIGHUP掛起(hangup)02SIGINT中斷,當(dāng)用戶從鍵盤按c鍵或break鍵時03SIGQUIT

7、退出,當(dāng)用戶從鍵盤按quit鍵時04SIGILL非法指令05SIGTRAP跟蹤陷阱(trace trap),啟動進(jìn)程,跟蹤代碼的執(zhí)行06SIGIOTIOT指令07SIGEMTEMT指令08SIGFPE浮點運算溢出09SIGKILL殺死、終止進(jìn)程 10SIGBUS總線錯誤11SIGSEGV段違例(segmentation violation),進(jìn)程試圖去訪問其虛地址空間以外的位置12SIGSYS系統(tǒng)調(diào)用中參數(shù)錯,如系統(tǒng)調(diào)用號非法13SIGPIPE向某個非讀管道中寫入數(shù)據(jù)14SIGALRM鬧鐘。當(dāng)某進(jìn)程希望在某時間后接收信號時發(fā)此信號15SIGTERM軟件終止(software terminati

8、on)16SIGUSR1用戶自定義信號117SIGUSR2用戶自定義信號218SIGCLD某個子進(jìn)程死19SIGPWR電源故障 function:在該進(jìn)程中的一個函數(shù)地址,在核心返回用戶態(tài)時,它以軟中斷信號的序號作為參數(shù)調(diào)用該函數(shù),對除了信號SIGKILL,SIGTRAP和SIGPWR以外的信號,核心自動地重新設(shè)置軟中斷信號處理程序的值為SIG_DFL,一個進(jìn)程不能捕獲SIGKILL信號。function 的解釋如下:(1)function=1時,進(jìn)程對sig類信號不予理睬,亦即屏蔽了該類信號;(2)function=0時,缺省值,進(jìn)程在收到sig信號后應(yīng)終止自己;(3)function為非0

9、,非1類整數(shù)時,function的值即作為信號處理程序的指針。二、共享存儲區(qū)1、共享存儲區(qū)機制的概念共享存儲區(qū)(Share Memory)是UNIX系統(tǒng)中通信速度最高的一種通信機制。該機制可使若干進(jìn)程共享主存中的某一個區(qū)域,且使該區(qū)域出現(xiàn)(映射)在多個進(jìn)程的虛地址空間中。另一方面,一個進(jìn)程的虛地址空間中又可連接多個共享存儲區(qū),每個共享存儲區(qū)都有自己的名字。當(dāng)進(jìn)程間欲利用共享存儲區(qū)進(jìn)行通信時,必須先在主存中建立一共享存儲區(qū),然后將它附接到自己的虛地址空間上。此后,進(jìn)程對該區(qū)的訪問操作,與對其虛地址空間的其它部分的操作完全相同。進(jìn)程之間便可通過對共享存儲區(qū)中數(shù)據(jù)的讀、寫來進(jìn)行直接通信。圖示列出二個

10、進(jìn)程通過共享一個共享存儲區(qū)來進(jìn)行通信的例子。其中,進(jìn)程A將建立的共享存儲區(qū)附接到自己的AA區(qū)域,進(jìn)程B將它附接到自己的BB區(qū)域。進(jìn)程A的虛空間 內(nèi)存空間 進(jìn)程B的虛空間正文數(shù)據(jù)棧共享存儲區(qū)正文數(shù)據(jù)BB棧 A A 應(yīng)當(dāng)指出,共享存儲區(qū)機制只為進(jìn)程提供了用于實現(xiàn)通信的共享存儲區(qū)和對共享存儲區(qū)進(jìn)行操作的手段,然而并未提供對該區(qū)進(jìn)行互斥訪問及進(jìn)程同步的措施。因而當(dāng)用戶需要使用該機制時,必須自己設(shè)置同步和互斥措施才能保證實現(xiàn)正確的通信。二、涉及的系統(tǒng)調(diào)用1、shmget( )創(chuàng)建、獲得一個共享存儲區(qū)。系統(tǒng)調(diào)用格式: shmid=shmget(key,size,flag)該函數(shù)使用頭文件如下:#inclu

11、de<sys/types.h>#include<sys/ipc.h>#include<sys/shm.h>參數(shù)定義 int shmget(key,size,flag); key_t key; int size,flag;其中,key是共享存儲區(qū)的名字;size是其大?。ㄒ宰止?jié)計);flag是用戶設(shè)置的標(biāo)志,如IPC_CREAT。IPC_CREAT表示若系統(tǒng)中尚無指名的共享存儲區(qū),則由核心建立一個共享存儲區(qū);若系統(tǒng)中已有共享存儲區(qū),便忽略IPC_CREAT。附: 操作允許權(quán) 八進(jìn)制數(shù) 用戶可讀 00400 用戶可寫 00200 小組可讀 00040 小組可寫

12、00020 其它可讀 00004 其它可寫 00002 控制命令 值IPC_CREAT 0001000IPC_EXCL 0002000例:shmid=shmget(key,size,(IPC_CREAT|0400) 創(chuàng)建一個關(guān)鍵字為key,長度為size的共享存儲區(qū)2、shmat( ) 共享存儲區(qū)的附接。從邏輯上將一個共享存儲區(qū)附接到進(jìn)程的虛擬地址空間上。系統(tǒng)調(diào)用格式: virtaddr=shmat(shmid,addr,flag)該函數(shù)使用頭文件如下:#include<sys/types.h>#include<sys/ipc.h>#include<sys/shm

13、.h>參數(shù)定義 char *shmat(shmid,addr,flag); int shmid,flag; char * addr;其中,shmid是共享存儲區(qū)的標(biāo)識符;addr是用戶給定的,將共享存儲區(qū)附接到進(jìn)程的虛地址空間;flag規(guī)定共享存儲區(qū)的讀、寫權(quán)限,以及系統(tǒng)是否應(yīng)對用戶規(guī)定的地址做舍入操作。其值為SHM_RDONLY時,表示只能讀;其值為0時,表示可讀、可寫;其值為SHM_RND(取整)時,表示操作系統(tǒng)在必要時舍去這個地址。該系統(tǒng)調(diào)用的返回值是共享存儲區(qū)所附接到的進(jìn)程虛地址viraddr。3、shmdt( )把一個共享存儲區(qū)從指定進(jìn)程的虛地址空間斷開。系統(tǒng)調(diào)用格式: shm

14、dt(addr)該函數(shù)使用頭文件如下:#include<sys/types.h>#include<sys/ipc.h>#include<sys/shm.h>參數(shù)定義 int shmdt(addr); char addr;其中,addr是要斷開連接的虛地址,亦即以前由連接的系統(tǒng)調(diào)用shmat( )所返回的虛地址。調(diào)用成功時,返回0值,調(diào)用不成功,返回-1。4、shmctl( )共享存儲區(qū)的控制,對其狀態(tài)信息進(jìn)行讀取和修改。系統(tǒng)調(diào)用格式: shmctl(shmid,cmd,buf)該函數(shù)使用頭文件如下:#include<sys/types.h>#include<sys/ipc.h>#include<sys/shm.h>參數(shù)定義 int shmctl(shmid,cmd,buf); int shmid,cmd; struct shmid_ds *buf;其中,bu

溫馨提示

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

最新文檔

評論

0/150

提交評論