操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第4頁(yè)
操作系統(tǒng)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩7頁(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é) (計(jì)算機(jī)學(xué)院)課內(nèi)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱: 進(jìn)程管理 專業(yè)名稱: 計(jì)算機(jī)科學(xué)與技術(shù)班 級(jí): 學(xué)生姓名: 學(xué)號(hào)(8位): 指導(dǎo)教師:實(shí)驗(yàn)日期: *年*月*日一. 實(shí)驗(yàn)?zāi)康募皩?shí)驗(yàn)環(huán)境目的:(1)加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。 (2)進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)。 (3)分析進(jìn)程競(jìng)爭(zhēng)資源現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法。 (4)了解linux系統(tǒng)中進(jìn)程通信的基本原理。環(huán)境:linux操作系統(tǒng)環(huán)境:二. 實(shí)驗(yàn)內(nèi)容(1)閱讀linux的sched.h源文件,加深對(duì)進(jìn)程管理概念的理解。 (2)閱讀linux的fork.c源文件,分析進(jìn)程的創(chuàng)建過(guò)程。三方案設(shè)計(jì)(1)進(jìn)程的創(chuàng)建 編寫

2、一段源程序,使系統(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”。試觀察紀(jì)錄屏幕上的顯示結(jié)果,并分析原因。 (2)進(jìn)程的控制 修改已編寫的程序,將每個(gè)進(jìn)程輸出一個(gè)字符改為每個(gè)進(jìn)程輸出一句話,在觀察程序執(zhí)行時(shí)屏幕出現(xiàn)的現(xiàn)象,并分析原因。 如果在程序中使用調(diào)用lockf()來(lái)給每一個(gè)子進(jìn)程加鎖,可以實(shí)現(xiàn)進(jìn)程之間的互斥,觀察并分析出現(xiàn)的現(xiàn)象。 (3)編寫一段程序,使其現(xiàn)實(shí)進(jìn)程的軟中斷通信。 要求:使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal()讓父進(jìn)

3、程捕捉鍵盤上來(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 processll is killed by parent! child processl2 is killed by parent! 父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出如下的信息后終止 parent process is killed!程序流程圖如下: 在上面的程序中增加語(yǔ)句signal (signal, sig-ign) 和signal (sigquit, sig-ign), 觀察執(zhí)行結(jié)果,并分析原因。 (4)進(jìn)程的管道通信

4、編制一段程序,實(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)程的信息,顯示在屏幕上。 要求父進(jìn)程先接收子進(jìn)程p1發(fā)來(lái)的消息,然后再接收子進(jìn)程p2發(fā)來(lái)的消息。四測(cè)試數(shù)據(jù)及運(yùn)行結(jié)果1.創(chuàng)建進(jìn)程,顯示結(jié)果bca,這是因?yàn)槌绦驁?zhí)行時(shí),先執(zhí)行fork()創(chuàng)建進(jìn)程所需的時(shí)間多于輸出一個(gè)字符的時(shí)間,因此在主進(jìn)程創(chuàng)建進(jìn)程2的同時(shí),進(jìn)程1就輸出了“b”,而進(jìn)程2和主程序的輸出次序是有隨機(jī)性的,2.進(jìn)

5、程的控制3.軟中斷通信a.b.因?yàn)闆](méi)有了中斷與退出信號(hào),程序一直是阻塞狀態(tài)而無(wú)法退出。關(guān)鍵代碼:main()int p1,p2;if(p1=fork() /*創(chuàng)建子進(jìn)程p1*/if(p2=fork() /*創(chuàng)建子進(jìn)程p2*/wait_mark=1;signal(sigint,stop); /*接收到c信號(hào),轉(zhuǎn)stop*/waiting();kill(p1,16); /*向p1發(fā)軟中斷信號(hào)16*/ kill(p2,17); /*向p2發(fā)軟中斷信號(hào)17*/ wait(0); /*同步*/wait(0);printf(parent process is killed!n);exit(0);elsew

6、ait_mark=1;signal(sigint,stop);waiting();lockf(1,0,0);printf(child process2 is killed by parent!n);lockf(1,0,0);exit(0);elsewait_mark=1;signal(sigint,stop);waiting();lockf(1,0,0);printf(child process1 is killed by parent!n);lockf(1,0,0);exit(0);4.進(jìn)程的管道通信五總結(jié)1.在軟中斷通信中,調(diào)用函數(shù)signal()都放在一段程序的前面位置,而不是在其接受信

7、號(hào)處,這是因?yàn)閟ignal()的執(zhí)行只是為指定信號(hào)量16和17的作用,以及分配相應(yīng)的與stop()過(guò)程的指針。從而signal()函數(shù)必須在程序前面部分執(zhí)行。2.通過(guò)這次實(shí)驗(yàn),加深了對(duì)進(jìn)程管理的認(rèn)識(shí)。這次實(shí)驗(yàn)更需要耐心觀察,一步一步執(zhí)行調(diào)試,不能操之過(guò)急。做實(shí)驗(yàn)是對(duì)課本知識(shí)的鞏固,更是對(duì)自己動(dòng)手能力的鍛煉。六附錄:源代碼(電子版)1.創(chuàng)建進(jìn)程:#includemain()int p1,p2;if(p1=fork() /*子進(jìn)程創(chuàng)建成功*/ putchar(b);else if(p2=fork() /*子進(jìn)程創(chuàng)建成功*/ putchar(c); else putchar(a); /*父進(jìn)程執(zhí)行*

8、/2.進(jìn)程的控制程序1.#includemain()int p1,p2,i;if(p1=fork() for(i=0;i500;i+) printf(child %dn,i);else if(p2=fork() for(i=0;i500;i+) printf(son %dn,i); else for(i=0;i500;i+) printf(daughter %dn,i);程序2#includemain()int p1,p2,i;if(p1=fork() lockf(1,1,0); for(i=0;i500;i+) printf(child %dn,i); lockf(1,1,0);else i

9、f(p2=fork() lockf(1,1,0); for(i=0;i500;i+) printf(son %dn,i); lockf(1,1,0); else lockf(1,1,0); for(i=0;i500;i+) printf(daughter %dn,i); lockf(1,0,0); 3軟中斷通信程序1#include#include#include void waiting(),stop();int wait_mark;main()int p1,p2;if(p1=fork() /*創(chuàng)建子進(jìn)程p1*/if(p2=fork() /*創(chuàng)建子進(jìn)程p2*/wait_mark=1;sign

10、al(sigint,stop); /*接收到c信號(hào),轉(zhuǎn)stop*/waiting();kill(p1,16); /*向p1發(fā)軟中斷信號(hào)16*/ kill(p2,17); /*向p2發(fā)軟中斷信號(hào)17*/ wait(0); /*同步*/wait(0);printf(parent process is killed!n);exit(0);elsewait_mark=1;signal(sigint,stop);waiting();lockf(1,0,0);printf(child process2 is killed by parent!n);lockf(1,0,0);exit(0);elsewait

11、_mark=1;signal(sigint,stop);waiting();lockf(1,0,0);printf(child process1 is killed by parent!n);lockf(1,0,0);exit(0);void waiting()while (wait_mark!=0);void stop()wait_mark=0;#include#include#includeint pid1,pid2;int endflag=0;int pf1=0;int pf2=0;void intdelete()kill(pid1,16);kill(pid2,17);endflag=1

12、;void int1()printf(child process 1 is killed !by parentn);exit(0);void int2()printf(child process 2 is killed !by parentn);exit(0);main()int exitpid;signal(sigint,sig_ign);signal(sigquit,sig_ign);if(pid1=fork()signal(sigusr1,int1);signal(sigint,sig_ign);pause();exit(0);elseif(pid2=fork()signal(sigus

13、r1,int1);signal(sigint,sig_ign);pause();exit(0);elsesignal(sigint,intdelete);waitpid(-1,&exitpid,0);printf(parent process is killedn);exit(0);4.進(jì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 process is sending message!); /*把串放入數(shù)組outpipe中*/ write(fd1,outpipe,50); /*向管道寫長(zhǎng)為50字節(jié)的串*/ sleep(5); /*自我阻塞5秒*/ lockf(fd1,0,0); exit(0); else while(pid2=fork( )=-1); if(pid2=0) lockf(fd1,1,0); /*互斥*/ sprintf(outpipe,child 2 process

溫馨提示

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