![操作系統(tǒng)實驗報告_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/20a0e022-8a1d-4972-921c-46738c13ecfa/20a0e022-8a1d-4972-921c-46738c13ecfa1.gif)
![操作系統(tǒng)實驗報告_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/20a0e022-8a1d-4972-921c-46738c13ecfa/20a0e022-8a1d-4972-921c-46738c13ecfa2.gif)
![操作系統(tǒng)實驗報告_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/20a0e022-8a1d-4972-921c-46738c13ecfa/20a0e022-8a1d-4972-921c-46738c13ecfa3.gif)
![操作系統(tǒng)實驗報告_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/20a0e022-8a1d-4972-921c-46738c13ecfa/20a0e022-8a1d-4972-921c-46738c13ecfa4.gif)
![操作系統(tǒng)實驗報告_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/20a0e022-8a1d-4972-921c-46738c13ecfa/20a0e022-8a1d-4972-921c-46738c13ecfa5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、武漢工程大學(xué)實驗報告專業(yè)班級:網(wǎng)工 01 |姓名: 何彬|學(xué)號:1305120411課程名稱:操作系統(tǒng)實驗成績:指導(dǎo)教師:蔡敦波 實驗名稱:進(jìn)程控制與進(jìn)程間通信一、實驗?zāi)康模?、掌握進(jìn)程的概念,明確進(jìn)程和程序的區(qū)別。2、認(rèn)識和了解并發(fā)執(zhí)行的實質(zhì)。3、了解什么是信號。4、熟悉LINUX系統(tǒng)中進(jìn)程之間軟中斷通信的基本原理。二、實驗內(nèi)容:1、進(jìn)程的創(chuàng)建(必做題)編寫一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進(jìn)程,在系統(tǒng)中有一個父進(jìn)程和兩個子進(jìn)程活動。讓每個進(jìn)程在屏幕上顯示一個字符;父進(jìn)程顯示字符“a”,子進(jìn)程分別顯示字符 “b”和“c”。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。參考程序roat0h
2、ebin -# cat fork, c#include<stdio.h>pinclude<stdlib.h>int main() Int pl, p2;while(pl=fork() = -1);if(pl = 0)£putcharf * b *);p rintf("n") ; else while(p2=fork() = -1); if(p2 = 0)( putch«r( 'c 1 );printf (*'n"); else putchar( a ); printf (;root®he-bin
3、 -# vim fork. croothebin j# gcc fork. c -o forkroottghebln -# ./forkbc運行的結(jié)果是bca.首先創(chuàng)建進(jìn)程p1,向子進(jìn)程返回0,輸出b.又創(chuàng) 建進(jìn)程p2,向子進(jìn)程返回0,輸出c,同時向父進(jìn)程返回子進(jìn)程的 pid , 輸出a2、修改已編寫的程序,將每個進(jìn)程的輸出由單個字符改為一句話,再觀察程序執(zhí)行時屏幕上 出現(xiàn)的現(xiàn)象,并分析其原因。(必做題)參考程序# include<stdio.h> int main() int p1, p2, i;while(p1=fork()= = -1);if(p1= =0)for(i=0;i
4、<500;i+)printf( "child%dn” ,i);else while(p2=fork()= =-1);If(p2= =0)for(i=0;i<500;i+)printf( "son%d n” ,i);elsefor(i=0;i<500;i+)printf( "daughter%d n” ,i);9roothetin -# cat fork.c# include<stdio.h>#include<stdlib.h>Int maln() int pl, p2, 1;while(pl-fork(J) “ -1);i
5、f(pl = 6)for(i=Q;i<5;i+)printf(*,child good adn",i|; else while!(p2=Tork() = -1);!T(p2 = 0)for(i-0;i<5;i+)printf1"son is a good boydXn",i); elsefor(i=0;i<5;i+4-printf("daughter is a good girl%dn",i); rootghebin一vim fork.croatghebinT# gccfork.c -o forkroothebinHfcf#
6、./forkchild good0child good1child good2child good3child goodason is a goadboyBson is a goodboylson is a goodboy2son is a goodboy3son is a goadbay4daughter isagoodgi rl0daughter isagoodgirl1daughter isagoodgi12daughter isagoodgi13daughter isagoodgir14運行的結(jié)果是如上圖所示.首先創(chuàng)建進(jìn)程p1,向子進(jìn)程返回0,并 for語句循環(huán)輸出child +i字符
7、串.又創(chuàng)建進(jìn)程p2,向子進(jìn)程返回0,輸 出字符串son+i,同時向父進(jìn)程返回子進(jìn)程的 pid ,輸出字符串duaghter +i ,各打印5次。3、編寫程序創(chuàng)建進(jìn)程樹如圖 (選做題)1和圖2所示,在每個進(jìn)程中顯示當(dāng)前進(jìn)程識別碼和父進(jìn)程識別碼。實驗一代碼及結(jié)果raothebin cat tree.c#include<stdlo.h>ki nclu(1o<5trll i b. h>int p h.pZ c,p3 d;pl b = fork(;lf-(pl b > Dprirtf("process father a:pid = *dnr,qptpid,);el
8、se ifpl b = G) (printf t*child b:pid - father is dXn*y getpid (), getppid J j;<p2 c = 0jprintf("child c:pld =.father Is %dnw tgetpid(k getppidO;pl d = to rk();if(p3 jd = 0)printf tchlLd d; pid = %d - father is dn111getpldf) - ijetppidO !;process father a:pld 4571圖一進(jìn)程樹實驗結(jié)果及相關(guān)代碼eg勘Mincat trq”,
9、工tinclu desftdlib T hoLnl udlnf) int uL U,cl :,。上也|>2_。; pl b = fork(): i.f ipl b k g(priMtcchild 館:pir) - Mi t&tner is Myn-1 tpid(,',getrplclt);plc w tork(if(p) c = 0)print T('child c邛id - *d,Tatlwr is <tdn",getpid( .getppidC |);alM if (pl b>9) (printr( -rather 1, Xin"
10、; .getpLdi);p2_d = forkO;If (p2 dl « 91 (prlntfi -child dipid - *f*tXr is MMT76p1口。,qqtgWUh p3 e = fork!J;IfTpa e = Gprintf (child enpid = M. father is MJ'Me呼tpidf I 追討口口idi H ;rootghebin ./tree2:hild b :pid 5152. father is 5151 rhild crpid = 5153Pfather 15 5152 rather is 5151= S1&4,fat
11、her is 51,S1 zhlld e:pld - 5155,father is 5154圖二進(jìn)程樹實驗結(jié)果及相關(guān)代碼4、編寫一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進(jìn)程,再用系統(tǒng)調(diào)用signal()讓父進(jìn) 程捕捉鍵盤上來的中斷信號(即按ctrl+c鍵),當(dāng)捕捉到中斷信號后,父進(jìn)程用系統(tǒng)調(diào)用 kill() 向兩個子進(jìn)程發(fā)出信號,子進(jìn)程捕捉到信號后,分別輸出下列信息后終止:Child process 1 is killed by parent!Child process 2 is killed by parent!父進(jìn)程等待兩個子進(jìn)程終止后,輸出以下信息后終止:Parent process
12、 is killed!參考程序#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)程中*/
13、wait_mark=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
14、(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;實驗要求:、運行程序并分析結(jié)果。roothebin 桌 面# ./progressACchild process 1 is killed by parent I child process 2 Is killed by parent! parent proces
15、s is killed!rootghebin 桌面#中斷后,父進(jìn)程收到子進(jìn)程退出狀態(tài),依次殺死子進(jìn)程2子進(jìn)程1,等待子進(jìn)程完全退出后,殺死父進(jìn)程、如果把signal(SIGINT,stop)放在號和號位置,結(jié)果會怎樣并分析原因。roothebin 桌面# ./progress"child p rocess 2 is killed by parent! parent process is killed!roothebin 桌面#改變signal(SIGINT,stop) 的位置后發(fā)現(xiàn),只是殺死了子進(jìn)程 2和 父進(jìn)程,而子進(jìn)程1沒有被殺死。是因為子進(jìn)程1沒有設(shè)置對信號的處 理操作,則鍵盤
16、中斷時,仍然無法將其殺死。、該程序段前面部分用了兩個wait(0),為什么?wait(0)是為了讓前面的子進(jìn)程完全執(zhí)行完,才可以進(jìn)行下面的操作。、該程序段中每個進(jìn)程退出時都用了語句exit(0),為什么?首先是為了讓進(jìn)程退出,其次是向父進(jìn)程返回退出時的狀態(tài);5、修改上面的程序,增加語句 signal(SIGINT,SIG_IGN) 和語句 signal(SIGQUIT,SIG_IGN),再 觀察程序執(zhí)行時屏幕上出現(xiàn)的現(xiàn)象,并分析其原因。參考程序# include<stdio.h># include<signal.h># include<unistd.h>ma
17、in() 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(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);elsewhile(pid2=fork()= =-1);if(pid2=0)signal(SIGUSER1,Int1);signal(SIGQUIT,SIG_IGN);pause();exit(0);elsesignal(SIGINT,IntDelete);waitpid(-1,&exitcode,0);prin
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安裝天然氣申請書
- 2025年基因工程項目風(fēng)險評估報告
- 2025年春江蘇開放大學(xué)經(jīng)濟(jì)法基礎(chǔ)作業(yè)答案
- 探索組件快速迭代方法論
- 2024-2025學(xué)年廣東省廣州市花都區(qū)二校聯(lián)考高一(上)期末地理試卷
- 時政時事政治100題和答案
- 物品領(lǐng)取申請書
- 公司融資申請書
- 天津市北辰區(qū)2024-2025學(xué)年高二上學(xué)期期中考試物理試卷(解析版)
- 2024-2025學(xué)年江蘇省常州市高三上學(xué)期期末質(zhì)量調(diào)研考試英語試題(解析版)
- 小紅書營銷師(初級)認(rèn)證理論知識考試題庫(附答案)
- 2025年民營醫(yī)院工作總結(jié)及2025年工作計劃
- 2025年九年級物理中考復(fù)習(xí)計劃
- 急診科護(hù)理未來五年規(guī)劃
- 農(nóng)業(yè)機械設(shè)備供貨及售后服務(wù)方案
- 《跟單信用證統(tǒng)一慣例》UCP600中英文對照版
- 合資經(jīng)營工廠合同范本
- 《醫(yī)院應(yīng)急培訓(xùn)》課件
- 2024年EHS法律法規(guī)培訓(xùn):企業(yè)風(fēng)險防范與合規(guī)之道
- 證件使用協(xié)議書(2篇)
- 三級安全教育試題(公司級、部門級、班組級)
評論
0/150
提交評論