操作系統課程設計--進程的軟中斷通信與管道通信_第1頁
已閱讀1頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  課 程 設 計</p><p>  課程設計名稱: 操作系統課程設計 </p><p>  專 業(yè) 班 級 : </p><p>  學 生 姓 名 : </p><p>  學 號 : </p><p>  

2、指 導 教 師 : </p><p>  課程設計時間: 6月24日-6月28日 </p><p>  計算機科學 專業(yè)課程設計任務書</p><p>  說明:本表由指導教師填寫,由教研室主任審核后下達給選題學生,裝訂在設計(論文)首頁</p><p><b>  1 需求分析</b&g

3、t;</p><p> ?。?)編制一段程序,實現進程的管道通信。</p><p>  使用系統調用pipe()建立一條管道線,兩個子進程P1和P2分別向管道各寫一句話:</p><p>  Child 1 is sending a message!</p><p>  Child 2 is sending a message!</p&

4、gt;<p>  而父進程則從管道中讀出來自兩個子進程的信息,顯示在屏幕上。</p><p>  要求父進程先接收子進程P1發(fā)來的消息,再接收子進程P2發(fā)來的消息。</p><p> ?。?)編制一段程序,實現進程的軟中斷通信。</p><p>  使用系統調用fork()創(chuàng)建兩個子進程,再用系統調用signal()讓父進程捕捉鍵盤上來的中斷信號(即按

5、DEL鍵);當捕捉到中斷信號后,父進程用系統調用Kill()向兩個子進程發(fā)出信號,子進程捕捉到信號后分別輸出下列信息后終止:</p><p>  Child 1 is killed by parent!</p><p>  Child 2 is killed by parent!</p><p>  父進程等待兩個子進程終止后,輸出下列信息后終止。</p>

6、;<p>  Parent is killed!</p><p><b>  2 概要設計</b></p><p>  參數說明:lockf(fd[1],1,0);</p><p>  fd 是打開文件的文件描述符。為通過此函數調用建立鎖定,文件描述符必須使用只寫權限或讀寫權限打開。權限的組的成員,它也可以使用 

7、;lockf()來鎖定使用只讀權限(O_RDONLY)打開的文件。  </p><p>  第二個參數是指定要采取的操作的控制值,# define F_ULOCK 0 //解鎖  # define F_LOCK 1 //互斥鎖定區(qū)域 。F_TEST 用于檢測在指定的區(qū)域中是否

8、存在其他進程的鎖定。如果該區(qū)域可訪問,lockf()將返回 0,否則返回?1。</p><p>  len 是要鎖定或解鎖的連續(xù)字節(jié)數。 len 為零,則鎖定從當前偏移量到文件結尾的區(qū)域(即從當前偏移量到現有或任何將來的文件結束標志)。</p><p><b>  3 運行環(huán)境</b></p><p> 

9、 軟件:C語言 linux</p><p>  硬件:2G內存 3.1CPU</p><p>  4 開發(fā)工具和編程語言</p><p><b>  編程工具:記事本</b></p><p><b>  編程語言:C語言</b></p><p><b>  5 詳

10、細設計</b></p><p><b>  管道通信:</b></p><p>  (1)p1創(chuàng)建成功,加鎖,讓后寫入管道一段字符,睡一秒,解鎖,最后自我終止。代碼如下:</p><p><b>  if(p1==0)</b></p><p><b>  {//pi進程<

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> ?。?)進程p2的亦是如此,此處不再說明。</p><p> ?。?)這是父進

13、程,剛開始等待信號的到來,然后從管道中讀出p1寫進去的東西。然后在等待信號的到來,然后從管道中讀出p2寫進去的東西。最后自我終止。代碼如下:</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>  系統調用signal()讓父進程捕捉鍵盤上來的中斷信號(即按DEL鍵);當捕捉到中斷信號后,父進程用系統調用Kill()向兩個子進程發(fā)出信號,子進程捕捉到信號后分別輸出信息,父進程等待兩個子進程終止后,輸出下列信息后終止。代碼如下(p1與p2相同,略去):</p><p><b>  //父進程<

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進程</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 調試分析</b></p><p><b>  7 測試結果</b></p><p>  管道通信的運行結果如圖7-1所示<

20、;/p><p><b>  圖7-1</b></p><p>  軟中斷通信的運行結果如圖7-2所示,捕捉中斷信號后的結果如圖7-3所示</p><p><b>  圖7-2</b></p><p><b>  圖7-3</b></p><p><b&

21、gt;  參考文獻</b></p><p>  [1] 任滿杰等,《操作系統原理實用教程》,電子工業(yè)出版社 ,2006</p><p>  [2] 湯子瀛,《計算機操作系統》(修訂版),西安電子科技大學出版社,2001</p><p>  [3] 張堯學 史美林,《計算機操作系統教程》實驗指導, 清華大學出版社,2000 </p><

22、p>  [4] 羅宇等,《操作系統課程設計》,機械工業(yè)出版社 ,2005</p><p>  [5] 李大友,《計算機操作系統》,機械工業(yè)出版社,1996.4</p><p>  [6] 徐虹, 《操作系統實驗指導:基于Linux內核》,清華大學出版社,2004</p><p><b>  心得體會</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);//鍙戦€佷俊鍙風粰瀛愯繘紼?</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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論