北郵-操作系統(tǒng)-實(shí)驗(yàn)2-代碼--進(jìn)程管理-實(shí)驗(yàn)報(bào)告_第1頁(yè)
北郵-操作系統(tǒng)-實(shí)驗(yàn)2-代碼--進(jìn)程管理-實(shí)驗(yàn)報(bào)告_第2頁(yè)
北郵-操作系統(tǒng)-實(shí)驗(yàn)2-代碼--進(jìn)程管理-實(shí)驗(yàn)報(bào)告_第3頁(yè)
北郵-操作系統(tǒng)-實(shí)驗(yàn)2-代碼--進(jìn)程管理-實(shí)驗(yàn)報(bào)告_第4頁(yè)
北郵-操作系統(tǒng)-實(shí)驗(yàn)2-代碼--進(jìn)程管理-實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩1頁(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、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)實(shí)驗(yàn)2 進(jìn)程管理(1) 進(jìn)程的創(chuàng)建:編寫一段程序,使用系統(tǒng)調(diào)用fork() 創(chuàng)建兩個(gè)子進(jìn)程。當(dāng)此程序運(yùn)行時(shí),在系統(tǒng)中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)。讓每一個(gè)進(jìn)程在屏幕上顯示一個(gè)字符:父進(jìn)程顯示字符“a”,子進(jìn)程分別顯示字符“b”和“c”。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。實(shí)驗(yàn)代碼:#include #include main()pid_t pid1,pid2;pid1=fork();if(pid1=0)putchar(b);else if(pid10)return

2、-1;elsepid2=fork();if(pid2=0)putchar(c);else if(pid20)return -1;else putchar(a);運(yùn)行結(jié)果bca(會(huì)出現(xiàn)acb等任意的排列),如圖分析原因進(jìn)程執(zhí)行并發(fā),輸出排列是隨機(jī)的,fork()創(chuàng)建進(jìn)程所需的時(shí)間一般多于輸出一個(gè)字符的時(shí)間,所以輸出a較晚,但各個(gè)進(jìn)程的時(shí)間片的獲得卻不是一定是順序的。(2)進(jìn)程的控制修改已經(jīng)編寫的程序,將每個(gè)進(jìn)程輸出一個(gè)字符改為每個(gè)進(jìn)程輸出一句話,再觀察程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析原因。實(shí)驗(yàn)代碼#include #include main()pid_t pid1,pid2;pid1=fork

3、();if(pid1=0)printf(this is process b.n);else if(pid10)return -1;elsepid2=fork();if(pid2=0)printf(this is process c.n);else if(pid20)return -1;else printf(this is father process.n);運(yùn)行結(jié)果this is father process.this is process c.this is process b.分析原因由于函數(shù)printf()輸出的字符串之間不會(huì)被中斷,因此,每個(gè)字符串內(nèi)部的字符順序輸出時(shí)不變。但是,由于

4、進(jìn)程并發(fā)執(zhí)行時(shí)的調(diào)度順序會(huì)不同,輸出字符串的順序和先后隨著執(zhí)行的不同而發(fā)生變化。后建的進(jìn)程c可以在進(jìn)程b之前完成。父進(jìn)程需要?jiǎng)?chuàng)建進(jìn)程,執(zhí)行輸出較晚,這與打印單字符的結(jié)果相同。(3)進(jìn)程通信a) 編寫一段程序,使其實(shí)現(xiàn)進(jìn)程的軟中斷通信。要求:使用系統(tǒng)調(diào)用fork() 創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal() 讓父進(jìn)程捕捉鍵盤上來(lái)的中斷信號(hào)(即按DEL鍵);當(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 b

5、y Parent!父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出如下的信息后終止:Parent Process is killed!實(shí)驗(yàn)代碼#include#include#includevoid waiting();void stop();void alarming();int wait_mark;main() int pid1,pid2;pid1=fork(); if(pid10) pid2=fork(); if(pid20) wait_mark=1; signal(SIGINT,stop);/*接收到c信號(hào),轉(zhuǎn)stop*/ signal(SIGALRM,alarming);/*接受SIGALRMwai

6、ting();*/ while(wait_mark!=0); kill(pid1,16);/*向pid1發(fā)軟中斷信號(hào)16*/ kill(pid2,17);/*向pid2發(fā)軟中斷信號(hào)17*/ wait(0);/*同步*/ wait(0); printf(Parent process is killed!n); exit(0); else if(pid2=0) wait_mark=1; signal(17,stop); signal(SIGINT,SIG_IGN);/*忽略c信號(hào)*/ while(wait_mark!=0) lockf(1,1,0); printf(Child Process 2

7、is killed by Parent!n); lockf(1,0,0); exit(0); else if(pid1=0) wait_mark=1;signal(16,stop); signal(SIGINT,SIG_IGN);/*忽略c信號(hào)*/ while(wait_mark!=0) lockf(1,1,0); printf(nChild Process 1 is killed by Parent!n); lockf(1,0,0); exit(0); void waiting() sleep(5); if(wait_mark!=0) kill(getpid(),SIGALRM);void

8、alarming() wait_mark=0;void stop() wait_mark=0;運(yùn)行結(jié)果Child Process 1 is killed by Parent!Child Process 2 is killed by Parent!Parent Process is killed!(4)進(jìn)程的管道通信編制一段程序,實(shí)現(xiàn)進(jìn)程的管道通信。使用系統(tǒng)調(diào)用pipe() 建立一條管道線;兩個(gè)子進(jìn)程P1和P2分別向管道各寫一句話:Child 1 is sending a message!Child 2 is sending a message!而父進(jìn)程則從管道中讀出來(lái)自于兩個(gè)子進(jìn)程的信息,顯示

9、在屏幕上。要求父進(jìn)程先接收子進(jìn)程P1發(fā)來(lái)的消息,然后再接收子進(jìn)程P2發(fā)來(lái)的消息。實(shí)驗(yàn)代碼#include #include #include int pid1,pid2;main()int fd2;char outpipe100,inpipe100;pipe(fd);/*創(chuàng)建一個(gè)管道*/while(pid1=fork()=-1);if(pid1=0)lockf(fd1,1,0);sprintf(outpipe,Child 1 is sending a message!);/*把串放入數(shù)組outpipe中*/write(fd1,outpipe,50);/*向管道寫長(zhǎng)為50字節(jié)的串*/sleep(5);/*自我阻塞5秒*/lockf(fd1,0,0);exit(0);elsewhile(pid2=fork()=-1);if(pid2=0)lockf(fd1,1,0);/*互斥*/sprintf(outpipe,Child 2 is sending a message!);write(fd1,outpipe,50);sleep(5);lockf(fd1,0,0);exit(0);elsewait(0);/*同步*/read(fd0,inpipe,50);/*從管道中讀長(zhǎng)為50字節(jié)

溫馨提示

  • 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)論