操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程的軟中斷通信與管道通信_(tái)第1頁(yè)
已閱讀1頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論