操作系統(tǒng)實驗報告_第1頁
操作系統(tǒng)實驗報告_第2頁
操作系統(tǒng)實驗報告_第3頁
操作系統(tǒng)實驗報告_第4頁
操作系統(tǒng)實驗報告_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論