實(shí)驗(yàn)3 進(jìn)程通信 signal軟中斷 2016-10_第1頁
實(shí)驗(yàn)3 進(jìn)程通信 signal軟中斷 2016-10_第2頁
實(shí)驗(yàn)3 進(jìn)程通信 signal軟中斷 2016-10_第3頁
實(shí)驗(yàn)3 進(jìn)程通信 signal軟中斷 2016-10_第4頁
實(shí)驗(yàn)3 進(jìn)程通信 signal軟中斷 2016-10_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1第四章進(jìn)程管理實(shí)驗(yàn)4.1實(shí)驗(yàn)?zāi)康囊弧⒓由顚?duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別

二.進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)

三.分析進(jìn)程爭(zhēng)用資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法

四.了解Linux系統(tǒng)中進(jìn)程通信的基本原理

4.2準(zhǔn)備知識(shí)

4.2.1基本概念

進(jìn)程的概念

進(jìn)程與程序的區(qū)別

并發(fā)執(zhí)行的概念

進(jìn)程互斥的概念

進(jìn)程通信的基本原理

2系統(tǒng)調(diào)用圖4-1系統(tǒng)調(diào)用的參數(shù)表方式變?cè)恚篘參數(shù)1參數(shù)2……參數(shù)n(a)直接方式trap參數(shù)1參數(shù)2……參數(shù)n××變?cè)恚篘指針(b)間接方式系統(tǒng)調(diào)用是一種進(jìn)入系統(tǒng)空間的辦法。通常,在OS的核心中都設(shè)置了一組用于實(shí)現(xiàn)各種系統(tǒng)功能的子程序,并將它們提供給程序員使用。程序員在需要OS提供某種服務(wù)的時(shí)候,便可以調(diào)用一條系統(tǒng)調(diào)用命令,去實(shí)現(xiàn)希望的功能,這就是系統(tǒng)調(diào)用。因此,系統(tǒng)調(diào)用就像一個(gè)黑箱子一樣,對(duì)用戶屏蔽了操作系統(tǒng)的具體動(dòng)作而只是提供了調(diào)用功能的接口。系統(tǒng)調(diào)用與一般的過程調(diào)用有下述幾方面的明顯差別:(1)運(yùn)行在不同的系統(tǒng)狀態(tài)。(2)通過軟中斷進(jìn)入。(3)返回問題。當(dāng)調(diào)用進(jìn)程仍具有最高優(yōu)先級(jí)時(shí),才返回到調(diào)用進(jìn)程繼續(xù)執(zhí)行;否則,將引起重新調(diào)度,以便讓優(yōu)先權(quán)最高的進(jìn)程優(yōu)先執(zhí)行。(4)嵌套調(diào)用。系統(tǒng)調(diào)用也可以嵌套進(jìn)行系統(tǒng)調(diào)用的實(shí)現(xiàn)系統(tǒng)調(diào)用的實(shí)現(xiàn)與一般過程調(diào)用的實(shí)現(xiàn)相比,兩者間有很大差異。對(duì)于系統(tǒng)調(diào)用,控制是由原來的用戶態(tài)轉(zhuǎn)換為系統(tǒng)態(tài),這是借助于中斷和陷入機(jī)制來完成的,在該機(jī)制中包括中斷和陷入硬件機(jī)構(gòu)及中斷與陷入處理程序兩部分。中斷是指CPU對(duì)系統(tǒng)發(fā)生某事件時(shí)的一種響應(yīng).中斷分為外中斷和內(nèi)中斷(1)所謂外中斷是指由于外部設(shè)備事件所引起的中斷.(2)內(nèi)中斷則是指由于CPU內(nèi)部事件所引起的中斷.

如程序出錯(cuò)(地址越界)、電源故障等。內(nèi)中斷(trap)被譯為“捕獲”或“陷入”。陷入是由于執(zhí)行了現(xiàn)行指令所引起的;中斷則是由于系統(tǒng)中某事件引起的,該事件與現(xiàn)行指令無關(guān)。進(jìn)程創(chuàng)建與軟中斷通信fork系統(tǒng)調(diào)用:由于進(jìn)程為執(zhí)行程序的環(huán)境,因此在執(zhí)行程序前必須先建立這個(gè)能"跑"程序的環(huán)境。Linux系統(tǒng)提供系統(tǒng)調(diào)用拷貝現(xiàn)行進(jìn)程的內(nèi)容,以產(chǎn)生新的進(jìn)程,調(diào)用fork的進(jìn)程稱為父進(jìn)程;而所產(chǎn)生的新進(jìn)程則稱為子進(jìn)程。子進(jìn)程會(huì)承襲父進(jìn)程的一切特性,但是它有自己的數(shù)據(jù)段,也就是說,盡管子進(jìn)程改變了所屬的變量,卻不會(huì)影響到父進(jìn)程的變量值。

父進(jìn)程和子進(jìn)程共享一個(gè)程序段,但是各自擁有自己的堆棧、數(shù)據(jù)段、用戶空間以及進(jìn)程控制塊。換言之,兩個(gè)進(jìn)程執(zhí)行的程序代碼是一樣的,但是各有各的程序計(jì)數(shù)器與自己的私人數(shù)據(jù)。

9linux是多用戶和多進(jìn)程的操作系統(tǒng),進(jìn)程在操作系統(tǒng)中的創(chuàng)建,都會(huì)生成一個(gè)進(jìn)程描述塊,描述當(dāng)前進(jìn)程的所有信息,包括,數(shù)據(jù)段、代碼段、堆棧段的地址,當(dāng)前進(jìn)程的環(huán)境變量,文件描述符等。

fork函數(shù)過程:操作系統(tǒng)先創(chuàng)建一個(gè)進(jìn)程描述塊,然后把父進(jìn)程的所有進(jìn)程描述符的信息精確拷貝過來,和父進(jìn)程一樣(除了進(jìn)程ID不一樣外),代碼段共享,數(shù)據(jù)段和堆棧段復(fù)制,所有的寄存器的值全部精確拷貝,文件描述符也許精確拷貝。

fork的返回值,fork在父進(jìn)程空間中返回子進(jìn)程的PID,在子進(jìn)程空間中返回0。10圖3-2父進(jìn)程和子進(jìn)程的內(nèi)存映像用戶內(nèi)存區(qū)父進(jìn)程的vm_arce_structvmstartvmstartcount=2vmstartvmstartcount=2子進(jìn)程的vm_arce_struct子進(jìn)程數(shù)據(jù)區(qū)子進(jìn)程堆棧區(qū)父進(jìn)程數(shù)據(jù)區(qū)父進(jìn)程堆棧區(qū)共享正文區(qū)11一.fork()函數(shù):用于創(chuàng)建一個(gè)新進(jìn)程(子進(jìn)程)intfork();pid=fork();if(pid<0){printf("forkerror\n");exit(0);}if(pid==0){printf("Thechildprocessisrunningnow!\n");exit(0);}if(pid>0){printf("Theparentprocessisrunningnow!\n");exit(0);}

進(jìn)程創(chuàng)建與軟中斷通信信號(hào)與軟中斷信號(hào)是OS系統(tǒng)中使用的一種進(jìn)程間通信方式,它提供一種處理異步事件的方法。例如:用戶可以通過一個(gè)中斷指令中斷一個(gè)程序的執(zhí)行,兩個(gè)進(jìn)程間可以通過發(fā)送信號(hào)通知一個(gè)異步事件,系統(tǒng)或進(jìn)程通過信號(hào)報(bào)告突發(fā)的硬件故障(如非法指令或運(yùn)算溢出)。此外,系統(tǒng)還可以通過信號(hào)實(shí)現(xiàn)軟中斷,即用戶進(jìn)程向自身發(fā)送信號(hào),以調(diào)用某些系統(tǒng)功能,或轉(zhuǎn)入某些特定處理。進(jìn)程創(chuàng)建與軟中斷通信“軟中斷”不同于普通中斷,它是指通過隨機(jī)向進(jìn)程發(fā)送信號(hào),通知進(jìn)程完成某事件。只有執(zhí)行狀態(tài)的進(jìn)程才會(huì)響應(yīng)該信號(hào),與處理普通中斷一樣,進(jìn)程轉(zhuǎn)而執(zhí)行信號(hào)要求的處理。如果信號(hào)到達(dá)時(shí),進(jìn)程處于執(zhí)行狀態(tài)以外的其他狀態(tài),則信號(hào)不會(huì)被響應(yīng)。進(jìn)程創(chuàng)建與軟中斷通信系統(tǒng)調(diào)用signal(sig,function)是進(jìn)程用來設(shè)定某個(gè)信號(hào)的處理方法;系統(tǒng)調(diào)用kill(Pid,Iid)是用來發(fā)送信號(hào)給指定進(jìn)程的。這兩個(gè)調(diào)用可以形成信號(hào)的基本操作。處理信號(hào)有三種類型:進(jìn)程接收到信號(hào)后退出;進(jìn)程忽略該信號(hào);進(jìn)程收到信號(hào)后執(zhí)行用戶設(shè)定用系統(tǒng)調(diào)用signal的函數(shù)。信號(hào)SIGINT由按下Ctrl-C發(fā)出,信號(hào)SIGQUIT由按下Ctrl-發(fā)出。信號(hào)功能值SIGHUP掛起1SIGINT鍵盤中斷,鍵盤按Delete鍵或Break鍵2SIGQUIT鍵盤按Quit鍵3SIGILL非法指令4SIGTRAP跟蹤中斷5SIGIOTIOT指令6SIGBUS總線錯(cuò)7SIGFPE浮點(diǎn)運(yùn)算溢出8SIGKILL要求終止進(jìn)程9SIGUSR1用戶定義信號(hào)#110SIGSEGV段違法11SIGUSR2用戶定義信號(hào)#212SIGPIPE向沒有讀進(jìn)程的管道上寫13SIGALRM定時(shí)器告警,時(shí)間到14SIGTERMkill發(fā)出的軟件結(jié)束信號(hào)15(16,堆棧錯(cuò)誤,使進(jìn)程終止)SIGCHLD子進(jìn)程死17SIGCONT若已停止則繼續(xù)18SIGPWR電源故障30Wait()函數(shù)Wait()函數(shù)常用來控制父進(jìn)程與子進(jìn)程的同步。在父進(jìn)程中調(diào)用wait()函數(shù),則父進(jìn)程被阻塞,進(jìn)入等待隊(duì)列,等待子進(jìn)程結(jié)束。當(dāng)子進(jìn)程結(jié)束時(shí),會(huì)向父進(jìn)程發(fā)出SIGCHLD信號(hào)。當(dāng)接收到信號(hào)后,父進(jìn)程從wait()函數(shù)返回繼續(xù)執(zhí)行原程序。Exit()函數(shù)是進(jìn)程結(jié)束最常調(diào)用的函數(shù)。在正常終止時(shí),exit()函數(shù)返回進(jìn)程結(jié)束狀態(tài)。進(jìn)程創(chuàng)建與軟中斷通信#include<stdio.h>#include<signal.h>#include<unistd.h>#include<sys/types.h>intwait_flag;voidstop(){wait_flag=0;};main(){ intpid1,pid2; wait_flag=1; signal(2,stop);//orsignal(14,stop);進(jìn)程創(chuàng)建與軟中斷通信while(wait_flag==1); while((pid1=fork())==-1); if(pid1>0){while((pid2=fork())==-1); if(pid2>0){wait_flag=1; sleep(5); kill(pid1,16); kill(pid2,17); wait(0); wait(0); printf("Parentprocessiskilled!!\n"); exit(0); }

else{wait_flag=1; signal(17,stop); while(wait_flag==1); printf("Childprocess2iskilledbyparent!!\n"); exit(0);

}

}

else

{wait_flag=1;

signal(16,stop);

while(wait_flag==1);printf("Childprocess1iskilledbyparent!!\n");exit(0); }}

進(jìn)程創(chuàng)建與軟中斷通信

else{wait_flag=1; signal(17,stop); while(wait_flag==1); printf("Childprocess2iskilledbyparent!!\n"); exit(0);

溫馨提示

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

評(píng)論

0/150

提交評(píng)論