1305120411操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
1305120411操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
1305120411操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
1305120411操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第4頁(yè)
1305120411操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、武漢工程大學(xué)實(shí)驗(yàn)報(bào)告專業(yè)班級(jí):網(wǎng)工01姓名: 何彬?qū)W號(hào):1305120411 課程名稱:操作系統(tǒng)實(shí)驗(yàn)成績(jī): 指導(dǎo)教師: 蔡敦波 實(shí)驗(yàn)名稱:進(jìn)程控制與進(jìn)程間通信一、實(shí)驗(yàn)?zāi)康模?、掌握進(jìn)程的概念,明確進(jìn)程和程序的區(qū)別。2、認(rèn)識(shí)和了解并發(fā)執(zhí)行的實(shí)質(zhì)。3、了解什么是信號(hào)。4、熟悉LINUX系統(tǒng)中進(jìn)程之間軟中斷通信的基本原理。二、實(shí)驗(yàn)內(nèi)容:1、進(jìn)程的創(chuàng)建(必做題) 編寫一段程序,使用系統(tǒng)調(diào)用fork( )創(chuàng)建兩個(gè)子進(jìn)程,在系統(tǒng)中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)。讓每個(gè)進(jìn)程在屏幕上顯示一個(gè)字符;父進(jìn)程顯示字符“a”,子進(jìn)程分別顯示字符“b” 和“c”。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。<參考程序&

2、gt; 運(yùn)行的結(jié)果是bca. 首先創(chuàng)建進(jìn)程p1,向子進(jìn)程返回0,輸出b.又創(chuàng)建進(jìn)程p2,向子進(jìn)程返回0,輸出c,同時(shí)向父進(jìn)程返回子進(jìn)程的pid,輸出a2、 修改已編寫的程序,將每個(gè)進(jìn)程的輸出由單個(gè)字符改為一句話,再觀察程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析其原因。(必做題)<參考程序># include<stdio.h> int main() int p1, p2, i; while(p1=fork()= = -1); if(p1= =0) for(i=0;i<500;i+) printf(“child%dn”,i); else while(p2=fork()= =-

3、1); If(p2= =0) for(i=0;i<500;i+) printf(“son%dn”,i); else for(i=0;i<500;i+) printf(“daughter%dn”,i); 運(yùn)行的結(jié)果是如上圖所示. 首先創(chuàng)建進(jìn)程p1,向子進(jìn)程返回0,并for語(yǔ)句循環(huán)輸出child +i字符串.又創(chuàng)建進(jìn)程p2,向子進(jìn)程返回0,輸出字符串son+i,同時(shí)向父進(jìn)程返回子進(jìn)程的pid,輸出字符串duaghter +i ,各打印5次。3、編寫程序創(chuàng)建進(jìn)程樹如圖1和圖2所示,在每個(gè)進(jìn)程中顯示當(dāng)前進(jìn)程識(shí)別碼和父進(jìn)程識(shí)別碼。(選做題)a父進(jìn)程子進(jìn)程圖1 進(jìn)程樹bcdadbce圖2 進(jìn)程

4、樹實(shí)驗(yàn)一代碼及結(jié)果 圖一 進(jìn)程樹實(shí)驗(yàn)結(jié)果及相關(guān)代碼 圖二 進(jìn)程樹實(shí)驗(yàn)結(jié)果及相關(guān)代碼4、編寫一段程序,使用系統(tǒng)調(diào)用fork( )創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal( )讓父進(jìn) 程捕捉鍵盤上來(lái)的中斷信號(hào)(即按ctrl+c鍵),當(dāng)捕捉到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用kill( )向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕捉到信號(hào)后,分別輸出下列信息后終止: Child process 1 is killed by parent!Child process 2 is killed by parent!父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出以下信息后終止: Parent process is killed!<參

5、考程序> #include<stdio.h>#include<signal.h>#include<unistd.h>#include<sys/types:.h>#include<sys/wait.h>int wait_mark;void waiting(),stop();void main()int p1, p2;signal(SIGINT,stop);while(p1=fork()=-1);if(p1>0)/*在父進(jìn)程中*/while(p2=fork()=-1); If(p2>0)/*在父進(jìn)程中*/ wait_ma

6、rk=1; waiting(0); kill(p1,10); kill(p2,12); wait( ); wait( ); printf("parent process is killed!n"); exit(0); else/*在子進(jìn)程2中*/ wait_mark=1;signal(12,stop);waiting();lockf(1,1,0);printf("child process 2 is killed by parent!n");lockf(1,0,0);exit(0); else/*在子進(jìn)程1中*/ wait_mark=1; signal(

7、10,stop); waiting(); lockf(1,1,0); printf("child process 1 is killed by parent!n"); lockf(1,0,0); exit(0);void waiting() while(wait_mark!=0);void stop() wait_mark=0;實(shí)驗(yàn)要求:、運(yùn)行程序并分析結(jié)果。中斷后,父進(jìn)程收到子進(jìn)程退出狀態(tài),依次殺死子進(jìn)程2子進(jìn)程1,等待子進(jìn)程完全退出后,殺死父進(jìn)程、如果把signal(SIGINT,stop)放在號(hào)和號(hào)位置,結(jié)果會(huì)怎樣并分析原因。改變signal(SIGINT,stop)

8、的位置后發(fā)現(xiàn),只是殺死了子進(jìn)程2和父進(jìn)程,而子進(jìn)程1沒(méi)有被殺死。是因?yàn)樽舆M(jìn)程1沒(méi)有設(shè)置對(duì)信號(hào)的處理操作,則鍵盤中斷時(shí),仍然無(wú)法將其殺死。、該程序段前面部分用了兩個(gè)wait(0),為什么?wait(0)是為了讓前面的子進(jìn)程完全執(zhí)行完,才可以進(jìn)行下面的操作。、該程序段中每個(gè)進(jìn)程退出時(shí)都用了語(yǔ)句exit(0),為什么? 首先是為了讓進(jìn)程退出,其次是向父進(jìn)程返回退出時(shí)的狀態(tài);5、修改上面的程序,增加語(yǔ)句signal(SIGINT,SIG_IGN)和語(yǔ)句signal(SIGQUIT,SIG_IGN),再觀察程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析其原因。<參考程序># include<std

9、io.h># include<signal.h># include<unistd.h>main() int pid1, pid2;int EndFlag=0; Pf1=0; Pf2=0;void IntDelete() kill(pid1,10); kill(pid2,12);EndFlag=1;void Int1() printf(“child process 1 is killed by parent !n”); exit(0);void Int2() printf(“child process 2 is killed by parent !n”); exit

10、(0);main() int exitcode; signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN);while(pid1=fork()=-1); if(pid=0) signal(SIGUSER1,Int1);signal(SIGQUIT,SIG_IGN);pause();exit(0); else while(pid2=fork()= =-1); if(pid2=0) signal(SIGUSER1,Int1);signal(SIGQUIT,SIG_IGN);pause();exit(0); else signal(SIGINT,IntDelete); waitpid(-1,&exitcode,0); printf(“parent proces

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論