版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課 程 設(shè) 計(jì)</p><p> 課程設(shè)計(jì)名稱: 操作系統(tǒng)課程設(shè)計(jì) </p><p> 專 業(yè) 班 級(jí) : </p><p> 學(xué) 生 姓 名 : </p><p> 學(xué) 號(hào) : </p><p>
2、指 導(dǎo) 教 師 : </p><p> 課程設(shè)計(jì)時(shí)間: 6月24日-6月28日 </p><p> 計(jì)算機(jī)科學(xué) 專業(yè)課程設(shè)計(jì)任務(wù)書</p><p> 說明:本表由指導(dǎo)教師填寫,由教研室主任審核后下達(dá)給選題學(xué)生,裝訂在設(shè)計(jì)(論文)首頁(yè)</p><p><b> 1 需求分析</b&g
3、t;</p><p> ?。?)編制一段程序,實(shí)現(xiàn)進(jìn)程的管道通信。</p><p> 使用系統(tǒng)調(diào)用pipe()建立一條管道線,兩個(gè)子進(jìn)程P1和P2分別向管道各寫一句話:</p><p> Child 1 is sending a message!</p><p> Child 2 is sending a message!</p&
4、gt;<p> 而父進(jìn)程則從管道中讀出來自兩個(gè)子進(jìn)程的信息,顯示在屏幕上。</p><p> 要求父進(jìn)程先接收子進(jìn)程P1發(fā)來的消息,再接收子進(jìn)程P2發(fā)來的消息。</p><p> (2)編制一段程序,實(shí)現(xiàn)進(jìn)程的軟中斷通信。</p><p> 使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal()讓父進(jìn)程捕捉鍵盤上來的中斷信號(hào)(即按
5、DEL鍵);當(dāng)捕捉到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用Kill()向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕捉到信號(hào)后分別輸出下列信息后終止:</p><p> Child 1 is killed by parent!</p><p> Child 2 is killed by parent!</p><p> 父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出下列信息后終止。</p>
6、;<p> Parent is killed!</p><p><b> 2 概要設(shè)計(jì)</b></p><p> 參數(shù)說明:lockf(fd[1],1,0);</p><p> fd 是打開文件的文件描述符。為通過此函數(shù)調(diào)用建立鎖定,文件描述符必須使用只寫權(quán)限或讀寫權(quán)限打開。權(quán)限的組的成員,它也可以使用
7、;lockf()來鎖定使用只讀權(quán)限(O_RDONLY)打開的文件。 </p><p> 第二個(gè)參數(shù)是指定要采取的操作的控制值,# define F_ULOCK 0 //解鎖 # define F_LOCK 1 //互斥鎖定區(qū)域 。F_TEST 用于檢測(cè)在指定的區(qū)域中是否
8、存在其他進(jìn)程的鎖定。如果該區(qū)域可訪問,lockf()將返回 0,否則返回?1。</p><p> len 是要鎖定或解鎖的連續(xù)字節(jié)數(shù)。 len 為零,則鎖定從當(dāng)前偏移量到文件結(jié)尾的區(qū)域(即從當(dāng)前偏移量到現(xiàn)有或任何將來的文件結(jié)束標(biāo)志)。</p><p><b> 3 運(yùn)行環(huán)境</b></p><p>
9、 軟件:C語(yǔ)言 linux</p><p> 硬件:2G內(nèi)存 3.1CPU</p><p> 4 開發(fā)工具和編程語(yǔ)言</p><p><b> 編程工具:記事本</b></p><p><b> 編程語(yǔ)言:C語(yǔ)言</b></p><p><b> 5 詳
10、細(xì)設(shè)計(jì)</b></p><p><b> 管道通信:</b></p><p> (1)p1創(chuàng)建成功,加鎖,讓后寫入管道一段字符,睡一秒,解鎖,最后自我終止。代碼如下:</p><p><b> if(p1==0)</b></p><p><b> {//pi進(jìn)程<
11、/b></p><p> lockf(fd[1],1,0);</p><p> sprintf(outpipe,"child 1 process is sending a message!");</p><p> write(fd[1],outpipe,50);</p><p><b> sleep
12、(1);</b></p><p> lockf(fd[1],0,0);</p><p><b> exit(0);</b></p><p><b> }</b></p><p> ?。?)進(jìn)程p2的亦是如此,此處不再說明。</p><p> ?。?)這是父進(jìn)
13、程,剛開始等待信號(hào)的到來,然后從管道中讀出p1寫進(jìn)去的東西。然后在等待信號(hào)的到來,然后從管道中讀出p2寫進(jìn)去的東西。最后自我終止。代碼如下:</p><p><b> wait(0);</b></p><p> read(fd[0],inpipe,50);</p><p> printf("%s\n",inpipe);
14、</p><p><b> wait(0);</b></p><p> read(fd[0],inpipe,50);</p><p> printf("%s\n",inpipe);</p><p><b> exit(0);</b></p><p>
15、;<b> 軟中斷通信:</b></p><p> 系統(tǒng)調(diào)用signal()讓父進(jìn)程捕捉鍵盤上來的中斷信號(hào)(即按DEL鍵);當(dāng)捕捉到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用Kill()向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕捉到信號(hào)后分別輸出信息,父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出下列信息后終止。代碼如下(p1與p2相同,略去):</p><p><b> //父進(jìn)程<
16、/b></p><p> wait_mark=1;</p><p> signal(SIGINT,stop);</p><p> waiting();</p><p> kill(p1,16);</p><p> kill(p2,17);</p><p><b> w
17、ait(0);</b></p><p><b> wait(0);</b></p><p> printf("parent process is killed!\n");</p><p><b> exit(0);</b></p><p><b>
18、//p1進(jìn)程</b></p><p> wait_mark=1;</p><p> signal(16,stop);</p><p> signal(SIGINT, SIG_IGN);</p><p> waiting();</p><p> printf("child process
19、1 is killed by parent!\n");</p><p><b> exit(0);</b></p><p><b> 6 調(diào)試分析</b></p><p><b> 7 測(cè)試結(jié)果</b></p><p> 管道通信的運(yùn)行結(jié)果如圖7-1所示<
20、;/p><p><b> 圖7-1</b></p><p> 軟中斷通信的運(yùn)行結(jié)果如圖7-2所示,捕捉中斷信號(hào)后的結(jié)果如圖7-3所示</p><p><b> 圖7-2</b></p><p><b> 圖7-3</b></p><p><b&
21、gt; 參考文獻(xiàn)</b></p><p> [1] 任滿杰等,《操作系統(tǒng)原理實(shí)用教程》,電子工業(yè)出版社 ,2006</p><p> [2] 湯子瀛,《計(jì)算機(jī)操作系統(tǒng)》(修訂版),西安電子科技大學(xué)出版社,2001</p><p> [3] 張堯?qū)W 史美林,《計(jì)算機(jī)操作系統(tǒng)教程》實(shí)驗(yàn)指導(dǎo), 清華大學(xué)出版社,2000 </p><
22、p> [4] 羅宇等,《操作系統(tǒng)課程設(shè)計(jì)》,機(jī)械工業(yè)出版社 ,2005</p><p> [5] 李大友,《計(jì)算機(jī)操作系統(tǒng)》,機(jī)械工業(yè)出版社,1996.4</p><p> [6] 徐虹, 《操作系統(tǒng)實(shí)驗(yàn)指導(dǎo):基于Linux內(nèi)核》,清華大學(xué)出版社,2004</p><p><b> 心得體會(huì)</b></p><
23、p><b> 代碼:</b></p><p> #include <unistd.h></p><p> #include <stdio.h></p><p> #include<stdlib.h></p><p> #include <signal.h>&
24、lt;/p><p> int p1,p2;</p><p><b> main()</b></p><p><b> {</b></p><p> int fd[3];</p><p> char outpipe[100],inpipe[100];</p>
25、<p><b> pipe(fd);</b></p><p> while((p2=fork())==-1);</p><p><b> if(p2==0)</b></p><p><b> {//p1榪涚▼</b></p><p> lockf(fd[1
26、],1,0);//fd 鏄墦寮€鏂囦歡鐨勬枃浠舵弿榪扮.濡傛灉len涓洪浂,鍒欓攣瀹氫粠褰撳墠鍋忕Щ閲忓埌鏂囦歡緇撳熬鐨勫尯鍩?</p><p> sprintf(outpipe,"child 2 process is sending a message!");</p><p> write(fd[1],outpipe,50);</p><p
27、><b> sleep(1);</b></p><p> lockf(fd[1],0,0);</p><p> exit(0);//榪涚▼緇堟</p><p><b> }</b></p><p><b> else{</b></p><p
28、> while((p1=fork())==-1);</p><p><b> if(p1==0)</b></p><p><b> {//p2榪涚▼</b></p><p> lockf(fd[1],1,0);</p><p> sprintf(outpipe,"child
29、 1 process is sending a message!");</p><p> write(fd[1],outpipe,50);</p><p><b> sleep(1);</b></p><p> lockf(fd[1],0,0);</p><p><b> exit(0);&l
30、t;/b></p><p><b> }</b></p><p><b> else</b></p><p><b> {//鐖惰繘紼?</b></p><p> wait(0);//絳夊緟瀛愯繘紼嬬粨鏉?</p><p> read(f
31、d[0],inpipe,50);</p><p> printf("%s\n",inpipe);</p><p> wait(0);//絳夊緟瀛愯繘紼嬬粨鏉?</p><p> read(fd[0],inpipe,50);</p><p> printf("%s\n",inpipe);</
32、p><p><b> exit(0);</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> #include <unistd.h&g
33、t;</p><p> #include <stdio.h></p><p> #include<stdlib.h></p><p> #include <signal.h></p><p> void waiting(),stop();</p><p> int wait
34、_mark;</p><p><b> main()</b></p><p><b> {</b></p><p> int p1,p2;</p><p> while((p2=fork())==-1);</p><p><b> if(p2>0)&
35、lt;/b></p><p><b> {</b></p><p> while((p1=fork())==-1);</p><p><b> if(p1>0)</b></p><p><b> {//parent</b></p><p&
36、gt; wait_mark=1;</p><p> signal(SIGINT,stop);//鎺ユ敹鍒頒俊鍙鳳紝杞瑂top</p><p> waiting();</p><p> kill(p1,16);//鍙戦€佷俊鍙風(fēng)粰瀛愯繘紼?</p><p> kill(p2,17);</p><p> wai
37、t(0);//絳夊緟瀛愯繘紼嬬粨鏉?</p><p> wait(0);//絳夊緟瀛愯繘紼嬬粨鏉?</p><p> printf("parent process is killed!\n");</p><p> exit(0);//鑷垜緇堟</p><p><b> }</b></
38、p><p><b> else</b></p><p><b> {//p1</b></p><p> wait_mark=1;</p><p> signal(16,stop);//鎺ユ敹鐖惰繘紼嬪彂鏉ョ殑淇″彿</p><p> signal(SIGINT, SIG
39、_IGN);</p><p> waiting();</p><p> printf("child process 1 is killed by parent!\n");</p><p><b> exit(0);</b></p><p><b> }</b></p
40、><p><b> }</b></p><p><b> else</b></p><p><b> {//p2</b></p><p> wait_mark=1;</p><p> signal(17,stop);</p><
41、p> signal(SIGINT, SIG_IGN);</p><p> waiting();</p><p> printf("child process 2 is killed by parent!\n");</p><p><b> exit(0);</b></p><p><
42、;b> }</b></p><p><b> }</b></p><p> void waiting()</p><p><b> {</b></p><p> while (wait_mark!=0);</p><p><b> }&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)-管道通信課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程通信與進(jìn)程同步機(jī)制實(shí)踐
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程通信與進(jìn)程同步機(jī)制實(shí)踐
- 操作系統(tǒng)課程設(shè)計(jì)linux系統(tǒng)管理實(shí)踐與進(jìn)程通信實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)--- 多線程管理與線程通信
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)
- 進(jìn)程之間的同步互斥與通信理發(fā)師問題操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)
- 操作系統(tǒng)模擬進(jìn)程課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)說明書--基于linux的進(jìn)程之間通信
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程的創(chuàng)建
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程管理系統(tǒng)
- nachos線程通信和調(diào)度分析操作系統(tǒng)課程設(shè)計(jì)
- 進(jìn)程調(diào)度算法 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)進(jìn)程控制課程設(shè)計(jì)
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)-進(jìn)程調(diào)度模擬
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度算法
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論