實(shí)驗(yàn)二進(jìn)程管理_第1頁
實(shí)驗(yàn)二進(jìn)程管理_第2頁
實(shí)驗(yàn)二進(jìn)程管理_第3頁
實(shí)驗(yàn)二進(jìn)程管理_第4頁
實(shí)驗(yàn)二進(jìn)程管理_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

實(shí)驗(yàn)二

進(jìn)程管理(一)實(shí)驗(yàn)的或?qū)嶒?yàn)理.加深對進(jìn)概念的理,明確進(jìn)和程序的區(qū)別。.進(jìn)一步認(rèn)并發(fā)執(zhí)行實(shí)質(zhì)。.分析進(jìn)程爭資源現(xiàn),學(xué)習(xí)解進(jìn)程互斥的方法。.了解inux系統(tǒng)進(jìn)程通信基本原理。(二)實(shí)驗(yàn)容.進(jìn)程的創(chuàng)。.進(jìn)程的控。.①編寫一程序,使現(xiàn)實(shí)進(jìn)程軟中斷通信。要求:使用統(tǒng)調(diào)用fork()建兩個進(jìn)程,再系統(tǒng)調(diào)用ignal()讓父進(jìn)捕捉鍵盤上來的中斷信按EL鍵當(dāng)捕到中斷信號后,父進(jìn)程用系統(tǒng)調(diào)用Kill()兩個進(jìn)程發(fā)出信號,子進(jìn)程捕捉信號后分輸出下列息后終止:ChildProcessllisKilledbyParent!ChildProcessl2isKilledbyParent!父進(jìn)程等待個子進(jìn)程止后,輸如下的信息后終止ParentProcessisKilled!②在上面的序中增加句signal(SIGNAL,SIG-IGN)和ignal(SIGQUIT,SIG-IGN),觀察執(zhí)行結(jié)果,分析原因4.進(jìn)程的管通信。編制一段程,實(shí)現(xiàn)進(jìn)的管理通。使用系統(tǒng)調(diào)pipe()建立一條道線;兩個子進(jìn)程1和2分別管道中寫一話:Child1issendingamessage!Child2issendingamessage!而父進(jìn)程則管道中讀來自于兩子進(jìn)程的信息,顯示在屏幕上。要求父進(jìn)程接收子進(jìn)P發(fā)來的息,然后再接收子進(jìn)程P2發(fā)來的息。實(shí)驗(yàn)2指導(dǎo)[驗(yàn)內(nèi)容1.進(jìn)程的創(chuàng)建〈任務(wù)〉編寫一段程,使用系調(diào)用fork()創(chuàng)兩個子進(jìn)。當(dāng)此程運(yùn)行時(shí),在系統(tǒng)中有一個父進(jìn)程和兩個子程活動。每一個進(jìn)在屏幕上顯示一個字符;父進(jìn)程顯字符“a”,子進(jìn)程分別顯示字符“b和“c”試觀記錄屏幕上顯示結(jié)果并分析原?!闯绦颉?include<>main(){intp1,p2;if(p1=fork())/*進(jìn)程創(chuàng)建功*/putchar('b');else{if(p2=fork())/*子程創(chuàng)建成功*putchar('c');elseputchar('a');/*父程執(zhí)行*/}}<運(yùn)行結(jié)果bca(時(shí)會出abc的任的排列分析:從進(jìn)執(zhí)行并發(fā)看,輸出的排列是有可的。原因:創(chuàng)建進(jìn)程需的時(shí)間雖可能多于出一個字的時(shí)間,各個進(jìn)程的時(shí)間片的獲得卻不是一定順序的,以輸出abc的排列都是可能的。2.進(jìn)程的控制<任務(wù)>修改已編寫的程序,每個程序輸出由單個字符改為一句話,再觀程序執(zhí)行屏幕上出的現(xiàn)象,并析其原因如果在程中使用系統(tǒng)調(diào)用lockf()來給每個程加鎖,可以實(shí)現(xiàn)進(jìn)程之間的互斥,觀并分析出的現(xiàn)象?!闯绦?#include<>main(){intp1,p2,i;if(p1=fork()){for(i=0;i<500;i++)printf("parent%d\n",i);wait(0);/*保證在子進(jìn)終止前,父程不會終*/exit(0);}else{if(p2=fork()){for(i=0;i<500;i++)printf("son%d\n",i);wait(0);/*保證在子進(jìn)終止前,父程不會終*/exit(0);/*向父進(jìn)程信號且進(jìn)程退出*/}else{for(i=0;i<500;i++)printf(“grandchild%d\n",i);exit(0);}}}〈運(yùn)行結(jié)果parent….son…grandchild…grandchild…或grandchild…son…grandchild…son…parent分析:由于數(shù)出的字符之間不會中斷,因,每個字符內(nèi)部的字順序輸出時(shí)不變。是由于進(jìn)并發(fā)執(zhí)行的調(diào)度順序和父子進(jìn)程的搶占處理問題,輸字符串的序和先后隨執(zhí)行的不而發(fā)生變。這與打印單字符的結(jié)果相同?!闯绦?#include<>#include<>main(){intp1,p2,i;if(p1=fork()){lockf(1,1,0);for(i=0;i<500;i++)printf("parent%d\n",i);lockf(1,0,0);wait(0);/*保在子進(jìn)程終止前,父進(jìn)不會終止*/exit(0);}else{if(p2=fork()){lockf(1,1,0);for(i=0;i<500;i++)printf("son%d\n",i);lockf(1,0,0);wait(0);/*保證在子進(jìn)終止前,父程不會終*/exit(0);}else{lockf(1,1,0);for(i=0;i<500;i++)printf("daughter%d\n",i);lockf(1,0,0);exit(0);}}}<運(yùn)行結(jié)果〉輸出parent塊son塊grandchild的順可能不同,但是每個塊的輸出過程會被打斷分析:因?yàn)槭龀绦驁?zhí)時(shí),lockf(1,1,0)鎖定標(biāo)準(zhǔn)輸設(shè)備,lockf(1,0,0)解鎖準(zhǔn)輸出設(shè)備,在lockf(1,1,0)與lockf(1,0,0)中間的for循環(huán)輸出不被中斷,鎖與不加鎖效果不相同。3.軟中斷通信〈任務(wù)1編制一段程,使用系調(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)程捕到信號后分別輸出下列信息后終止:childkilledbyparent!childkilledbyparent!父進(jìn)程等待個子進(jìn)程止后,輸以下信息后終止:parentprocessiskilled!<程序流程圖>〈程序〉#include<>#include<>#include<>voidwaiting(),stop(),alarming();intwait_mark;main(){intp1,p2;if(p1=fork())/*創(chuàng)建進(jìn)程p1*/{if(p2=fork()){

/*創(chuàng)建進(jìn)程wait_mark=1;signal(SIGINT,stop);/*接收到c信,轉(zhuǎn)stop*/接受SIGALRM*/waiting();kill(p1,16);/*向p1軟中信號kill(p2,17);/*向發(fā)中斷信號wait(0);/*同步/wait(0);printf("parentprocessiskilled!\n");exit(0);}else{wait_mark=1;signal(17,stop);signal(SIGINT,SIG_IGN);/*忽略^c信號/while(wait_mark!=0);lockf(1,1,0);printf("childprocess2iskilledbyparent!\n");lockf(1,0,0);exit(0);}}else{wait_mark=1;signal(16,stop);signal(SIGINT,SIG_IGN);/*忽略^信號/while(wait_mark!=0)lockf(1,1,0);printf("childprocess1killedparent!\n");lockf(1,0,0);exit(0);}}voidwaiting(){sleep(5);if(wait_mark!=0)kill(getpid(),SIGALRM);}voidalarming(){wait_mark=0;}voidstop(){wait_mark=0;}<運(yùn)行結(jié)果不做任何操等待五秒父進(jìn)程回子進(jìn)程縣推出后退出,并打印退出順序;或點(diǎn)擊ctrl+C后程序退出打印退出順序?!慈蝿?wù)2在上面的任1中增加語句signal(SIGINT,SIG_IGN)和句signal(SIGQUIT,SIG_IGN),觀察執(zhí)行結(jié)果,分析原因這里,signal(SIGINT,SIG_IGN)和signal(SIGQUIT,SIG_IGN)分別為忽鍵信號以及忽中斷信號<程序>#include<>#include<>#include<>intpid1,pid2;intEndFlag=0;intpf1=0;intpf2=0;voidIntDelete(){kill(pid1,16);kill(pid2,17);}voidInt1(){printf("childprocesskilled!byparent\n");exit(0);}voidInt2(){printf("childprocesskilled!byparent\n");exit(0);}main(){intexitpid;if(pid1=fork()){if(pid2=fork()){signal(SIGINT,IntDelete);waitpid(-1,&exitpid,0);waitpid(-1,&exitpid,0);printf("parentprocessiskilled\n");exit(0);}else{signal(SIGINT,SIG_IGN);signal(17,Int2);pause();}}else{signal(SIGINT,SIG_IGN);signal(16,Int1);pause();}}〈運(yùn)行結(jié)果請將上述程輸入計(jì)算后,執(zhí)行觀察。3.進(jìn)程的管道信〈任務(wù)〉編制一段程,實(shí)現(xiàn)進(jìn)的管道通。使用系統(tǒng)調(diào)用pipe()建立一條管線。兩個進(jìn)程p1和p2分別向通道寫一句話child1processissendingmessage!child2processissendingmessage!而父進(jìn)程則管道中讀來自兩個程的信息,顯示在屏幕上。〈程序〉#include<>#include<>#include<>intpid1,pid2;main(){intfd[2];charoutpipe[100],inpipe[100];pipe(fd);/*建一管道/while((pid1=fork())==-1);if(pid1==0){lockf(fd[1],1,0);sprintf(outpipe,"child1processissendingmessage!");/*把串入數(shù)組outpipe中/write(fd[1],outpipe,50);/*向管道寫長50字節(jié)的串/sleep(5);/*我阻塞5秒/lockf(fd[1],0,0);exit(0);}else{while((pid2=fork(if(pid2==0){lockf(fd[1],1,0);/*斥*/sprintf(outpipe,"child2processissendingmessage!");write(fd[1],outpipe,50);sleep(5);lockf(fd[1],0,0);exit(0);}else{wait(0);/*同步/read(fd[0],inpipe,50);/*管道

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論