



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 實驗一:信號機制實驗?zāi)康?、了解什么是信號2、熟悉LINUX系統(tǒng)中進程之間軟中斷通信的基本原理實驗內(nèi)容1、編寫程序:用fork( )創(chuàng)建兩個子進程,再用系統(tǒng)調(diào)用signal( )讓父進程捕捉鍵盤上來的中斷信號(即按c鍵);捕捉到中斷信號后,父進程用系統(tǒng)調(diào)用kill( )向兩個子進程發(fā)出信號,子進程捕捉到信號后分別輸出下列信息后終止:Child process1 is killed by parent!Child process2 is killed by parent!父進程等待兩個子進程終止后,輸出如下的信息后終止:Parent process is killed
2、!2、分析利用軟中斷通信實現(xiàn)進程同步的機理實驗指導(dǎo)一、信號1、信號的基本概念每個信號都對應(yīng)一個正整數(shù)常量(稱為signal number,即信號編號。定義在系統(tǒng)頭文件<signal.h>中),代表同一用戶的諸進程之間傳送事先約定的信息的類型,用于通知某進程發(fā)生了某異常事件。每個進程在運行時,都要通過信號機制來檢查是否有信號到達。若有,便中斷正在執(zhí)行的程序,轉(zhuǎn)向與該信號相對應(yīng)的處理程序,以完成對該事件的處理;處理結(jié)束后再返回到原來的斷點繼續(xù)執(zhí)行。實質(zhì)上,信號機制是對中斷機制的一種模擬,故在早期的UNIX版本中又把它稱為軟中斷。信號與中斷的相似點:(1)采用了相同的異步通信方式;(2)
3、當檢測出有信號或中斷請求時,都暫停正在執(zhí)行的程序而轉(zhuǎn)去執(zhí)行相應(yīng)的處理程序;(3)都在處理完畢后返回到原來的斷點;(4)對信號或中斷都可進行屏蔽。信號與中斷的區(qū)別:(1)中斷有優(yōu)先級,而信號沒有優(yōu)先級,所有的信號都是平等的;(2)信號處理程序是在用戶態(tài)下運行的,而中斷處理程序是在核心態(tài)下運行;(3)中斷響應(yīng)是及時的,而信號響應(yīng)通常都有較大的時間延遲。信號機制具有以下三方面的功能:(1)發(fā)送信號。發(fā)送信號的程序用系統(tǒng)調(diào)用kill( )實現(xiàn);(2)預(yù)置對信號的處理方式。接收信號的程序用signal( )來實現(xiàn)對處理方式的預(yù)置;(3)收受信號的進程按事先的規(guī)定完成對相應(yīng)事件的處理。2、信號的發(fā)送信號的
4、發(fā)送,是指由發(fā)送進程把信號送到指定進程的信號域的某一位上。如果目標進程正在一個可被中斷的優(yōu)先級上睡眠,核心便將它喚醒,發(fā)送進程就此結(jié)束。一個進程可能在其信號域中有多個位被置位,代表有多種類型的信號到達,但對于一類信號,進程卻只能記住其中的某一個。進程用kill( )向一個進程或一組進程發(fā)送一個信號。3、對信號的處理當一個進程要進入或退出一個低優(yōu)先級睡眠狀態(tài)時,或一個進程即將從核心態(tài)返回用戶態(tài)時,核心都要檢查該進程是否已收到軟中斷。當進程處于核心態(tài)時,即使收到軟中斷也不予理睬;只有當它返回到用戶態(tài)后,才處理軟中斷信號。對軟中斷信號的處理分三種情況進行:(1)如果進程收到的軟中斷是一個已決定要忽略
5、的信號(function=1),進程不做任何處理便立即返回;(2)進程收到軟中斷后便退出(function=0);(3)執(zhí)行用戶設(shè)置的軟中斷處理程序。二、所涉及的中斷調(diào)用1、kill( )系統(tǒng)調(diào)用格式int kill(pid,sig)參數(shù)定義int pid,sig;其中,pid是一個或一組進程的標識符,參數(shù)sig是要發(fā)送的軟中斷信號。(1)pid>0時,核心將信號發(fā)送給進程pid。(2)pid=0時,核心將信號發(fā)送給與發(fā)送進程同組的所有進程。(3)pid=-1時,核心將信號發(fā)送給所有用戶標識符真正等于發(fā)送進程的有效用戶標識號的進程。2、signal( )預(yù)置對信號的處理方式,允許調(diào)用進程
6、控制軟中斷信號。系統(tǒng)調(diào)用格式signal(sig,function)頭文件為 #include <signal.h>參數(shù)定義signal(sig,function)int sig;void (*func) ( )其中sig用于指定信號的類型,sig為0則表示沒有收到任何信號,余者如下表:值名 字說 明01SIGHUP掛起(hangup)02SIGINT中斷,當用戶從鍵盤按c鍵或break鍵時03SIGQUIT退出,當用戶從鍵盤按quit鍵時04SIGILL非法指令05SIGTRAP跟蹤陷阱(trace trap),啟動進程,跟蹤代碼的執(zhí)行06SIGIOTIOT指令07SIGEMTE
7、MT指令08SIGFPE浮點運算溢出09SIGKILL殺死、終止進程 10SIGBUS總線錯誤11SIGSEGV段違例(segmentation violation),進程試圖去訪問其虛地址空間以外的位置12SIGSYS系統(tǒng)調(diào)用中參數(shù)錯,如系統(tǒng)調(diào)用號非法13SIGPIPE向某個非讀管道中寫入數(shù)據(jù)14SIGALRM鬧鐘。當某進程希望在某時間后接收信號時發(fā)此信號15SIGTERM軟件終止(software termination)16SIGUSR1用戶自定義信號117SIGUSR2用戶自定義信號218SIGCLD某個子進程死19SIGPWR電源故障 function:在該進程中的一個函數(shù)地址,在核
8、心返回用戶態(tài)時,它以軟中斷信號的序號作為參數(shù)調(diào)用該函數(shù),對除了信號SIGKILL,SIGTRAP和SIGPWR以外的信號,核心自動地重新設(shè)置軟中斷信號處理程序的值為SIG_DFL,一個進程不能捕獲SIGKILL信號。function 的解釋如下:(1)function=1時,進程對sig類信號不予理睬,亦即屏蔽了該類信號;(2)function=0時,缺省值,進程在收到sig信號后應(yīng)終止自己;(3)function為非0,非1類整數(shù)時,function的值即作為信號處理程序的指針。三、參考程序#include <stdio.h>#include <signal.h>#i
9、nclude <unistd.h>void waiting( ),stop( );int wait_mark;main( )int p1,p2,stdout;while(p1=fork( )=-1); /*創(chuàng)建子進程p1*/if (p1>0) while(p2=fork( )=-1); /*創(chuàng)建子進程p2*/if(p2>0) wait_mark=1;signal(SIGINT,stop); /*接收到c信號,轉(zhuǎn)stop*/waiting( );kill(p1,16); /*向p1發(fā)軟中斷信號16*/kill(p2,17); /*向p2發(fā)軟中斷信號17*/wait(0);
10、 /*同步*/wait(0);printf("Parent process is killed!n");exit(0); else wait_mark=1;signal(17,stop); /*接收到軟中斷信號17,轉(zhuǎn)stop*/waiting( );lockf(stdout,1,0);printf("Child process 2 is killed by parent!n");lockf(stdout,0,0);exit(0);elsewait_mark=1;signal(16,stop); /*接收到軟中斷信號16,轉(zhuǎn)stop*/waiting(
11、);lockf(stdout,1,0);printf("Child process 1 is killed by parent!n");lockf(stdout,0,0);exit(0); void waiting( ) while(wait_mark!=0);void stop( )wait_mark=0;四、運行結(jié)果屏幕上無反應(yīng),按下C后,顯示 Parent process is killed!五、分析原因上述程序中,signal( )都放在一段程序的前面部位,而不是在其他接收信號處。這是因為signal( )的執(zhí)行只是為進程指定信號值16或17的作用,以及分配相應(yīng)的與
12、stop( )過程鏈接的指針。因而,signal( )函數(shù)必須在程序前面部分執(zhí)行。本方法通信效率低,當通信數(shù)據(jù)量較大時一般不用此法。六、思考1、該程序段前面部分用了兩個wait(0),它們起什么作用? 答:wait(0)暫時停止目前進程的執(zhí)行,直到信號來到或子進程結(jié)束,如果在調(diào)用wait(0)時子進程已經(jīng)結(jié)束,則wait(0)會立即返回子進程結(jié)束狀態(tài)值。2、該程序段中每個進程退出時都用了語句exit(0),為什么?答:為了進程的正常終止。在正常終止時,exit()函數(shù)返回進程結(jié)束狀態(tài)。進程終止時,則由系統(tǒng)內(nèi)核產(chǎn)生一個代表異常終止原因的終止狀態(tài),該進程的父進程都能用wait()得到其終止狀態(tài)。在
13、子進程調(diào)用exit()后,子進程的結(jié)束狀態(tài)會返回給系統(tǒng)內(nèi)核,由系統(tǒng)內(nèi)核根據(jù)狀態(tài)字生成終止狀態(tài),供父進程在wait()中讀取數(shù)據(jù)。若子進程結(jié)束后,父進程還沒有讀取子進程的終止狀態(tài),則子進程就變成了“孤兒進程”,系統(tǒng)進程init會自動“收養(yǎng)”該子進程,成為孩子進程的父進程,即父進程標識號變成1,當子進程結(jié)束時,init會自動調(diào)用wait()讀取子進程的遺留數(shù)據(jù),從而避免在系統(tǒng)中留下大量的垃圾。exit(0)函數(shù)在執(zhí)行退出之前加上了若干道工序,exit(0)函數(shù)調(diào)用exit系統(tǒng)調(diào)用之前要檢查文件的打開情況,把文件緩沖區(qū)的內(nèi)容寫回文件。3、為何預(yù)期的結(jié)果并未顯示出?答:signal( )都放在一段程序的前面部位,而不是在其他接收信號處。這是因為signal( )的執(zhí)行只是為進程指定信號值16或17的作用,以及分配相應(yīng)的與stop( )過程鏈接的指針,由于忽略了中斷與退出信號,程序會一直保持阻塞狀態(tài)無法退出。4、程序該如何修改才能得到正確結(jié)果? 答:在子進程前加上signal(SIGING ,SIG_IGN)和signal(SIGQUIT,SIG_IGN),這里,signal(SIGING ,SIG_IGN)和signal
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市政疏水管施工方案
- 公路平交施工方案
- 廠房石漆施工方案
- 河道駁坎施工方案
- 2025年度標準勞動關(guān)系解除與離職員工再就業(yè)服務(wù)協(xié)議
- 二零二五年度山場租賃承包與旅游開發(fā)協(xié)議
- 二零二五年度互聯(lián)網(wǎng)農(nóng)業(yè)合作入股協(xié)議
- 2025年度集體勞動合同到期續(xù)簽?zāi)0鍏f(xié)議
- 二零二五年度環(huán)境保護合作協(xié)議簽訂與審批流程
- 2025年度門面房租賃與商業(yè)形象設(shè)計合同
- 2025湖南省低空經(jīng)濟發(fā)展集團有限公司招聘11人筆試參考題庫附帶答案詳解
- 七年級下冊道德與法治(2025年春)教材變化詳細解讀
- GB/T 11856.1-2025烈性酒質(zhì)量要求第1部分:威士忌
- 認識常用電子元件圖解課件
- 2025年鐵嶺衛(wèi)生職業(yè)學院單招職業(yè)技能測試題庫1套
- 2025年黑龍江商業(yè)職業(yè)學院單招職業(yè)技能測試題庫及參考答案
- GB/T 20840.10-2025互感器第10部分:低功率無源電流互感器的補充技術(shù)要求
- 部編版小學(2024版)小學道德與法治一年級下冊《有個新目標》-第一課時教學課件
- 稅法(第5版) 課件 第13章 印花稅
- 建加油站申請書
- 2024年湖南汽車工程職業(yè)學院單招職業(yè)技能測試題庫標準卷
評論
0/150
提交評論