基于linux的實現(xiàn)進(jìn)程的信號量互斥申請操作系統(tǒng)課程設(shè)計1_第1頁
已閱讀1頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  操作系統(tǒng)課程設(shè)計</b></p><p><b>  說 明 書</b></p><p>  2013 年 11月 6 日</p><p><b>  1需求分析</b></p><p>  基于Linux的進(jìn)程同步與通信的模擬實現(xiàn)需要完成以下功能

2、:</p><p> ?。?)創(chuàng)建進(jìn)程:手動創(chuàng)建幾個進(jìn)程,或者隨即創(chuàng)建幾個進(jìn)程,都在界面上完成;要求包括進(jìn)程的名稱(不能重復(fù))、執(zhí)行時間和申請資源的等待時間等。在同一時刻可能有多個進(jìn)行在內(nèi)存申請某資源,即可以輸入多個進(jìn)程的資源申請。</p><p> ?。?)3類臨界資源的管理,包括申請以及分配等。分別通過信號量實現(xiàn)或者管程實現(xiàn)。 </p><p> ?。?)

3、銀行家算法,判斷是否可以進(jìn)行資源的分配。</p><p>  基于以上的功能,可以使用戶選擇操作,模擬臨界資源的管理和銀行家算法。</p><p>  目的:實現(xiàn)臨界資源的管理及死鎖的避免。</p><p><b>  2 總體設(shè)計</b></p><p>  進(jìn)程同步與模擬實現(xiàn)系統(tǒng)分為4個模塊:輸入輸出,進(jìn)程對資源的

4、隨機(jī)申請及分配,臨界資源管理,銀行家算法避免死鎖。</p><p>  輸入輸出:包括系統(tǒng)運(yùn)行所需要的進(jìn)程的名稱,執(zhí)行時間,申請資源的等待時間,進(jìn)程對資源的需要量等信息以及系統(tǒng)所要顯示出的進(jìn)程的創(chuàng)建信息,資源的分配信息,進(jìn)行執(zhí)行信息,進(jìn)行動態(tài)申請資源信息等。</p><p>  進(jìn)程對資源的隨機(jī)申請及分配:根據(jù)所輸入的進(jìn)程、資源、以及進(jìn)程對資源的最大申請情況,隨機(jī)產(chǎn)生進(jìn)程當(dāng)前對資源的申請,

5、輸出相應(yīng)的分配信息與進(jìn)程執(zhí)行信息并調(diào)用銀行家算法對進(jìn)程的資源申請進(jìn)行判斷。</p><p>  臨界資源的管理:創(chuàng)建相應(yīng)個數(shù)的進(jìn)程,完成進(jìn)程的并發(fā)執(zhí)行,使用互斥信號量使各進(jìn)程互斥的進(jìn)入各自的臨界區(qū)對資源進(jìn)行申請,進(jìn)程執(zhí)行完畢后,互斥的對資源進(jìn)行恢復(fù)。</p><p>  銀行家算法避免死鎖:對當(dāng)前進(jìn)程對資源的申請利用銀行家算法進(jìn)行判斷,看系統(tǒng)分配后是否處于安全狀態(tài),若處于安全狀態(tài),則將資源

6、分配給進(jìn)程,并輸出分配信息,否則對不予以分配。</p><p><b>  3.詳細(xì)設(shè)計</b></p><p>  在該系統(tǒng)中我主要實現(xiàn)了輸入和輸出管理的模塊,該模塊中主要使用了結(jié)構(gòu)體數(shù)組的數(shù)據(jù)結(jié)構(gòu).</p><p>  3.1進(jìn)程模擬thread模塊</p><p><b>  圖3.1輸入流程圖</

7、b></p><p><b>  源代碼:</b></p><p><b>  //輸入資源信息</b></p><p>  int ziyuan()</p><p><b>  {</b></p><p><b>  int i,x;&

8、lt;/b></p><p>  printf("************************************************\n");</p><p>  printf("請輸入資源的種類數(shù):\n");</p><p>  fflush(stdin);</p><p>  x

9、=scanf("%d",&a);</p><p>  while(x==0)</p><p><b>  {</b></p><p>  printf("不符合規(guī)則,請重新輸入!\n");</p><p>  fflush(stdin);</p><p&

10、gt;  x=scanf("%d",&a);</p><p><b>  }</b></p><p>  for(i=0;i<a;i++)</p><p><b>  {</b></p><p>  printf("請輸入第%d種資源的名稱(A---Z):

11、\n",i);</p><p>  scanf("%c",&ZY[i].type);</p><p>  while(ZY[i].type=='\n')scanf("%c",&ZY[i].type);</p><p>  while(!isupper(ZY[i].type))</

12、p><p><b>  {</b></p><p>  printf("不符合規(guī)則,請重新輸入!\n");</p><p>  scanf("%c",&ZY[i].type);</p><p>  while(ZY[i].type=='\n')scanf(&qu

13、ot;%c",&ZY[i].type);</p><p><b>  }</b></p><p>  printf("請輸入資源%c的數(shù)量:",ZY[i].type);</p><p>  fflush(stdin);</p><p>  x=scanf("%d"

14、,&ZY[i].n);</p><p>  while(x==0)</p><p><b>  {</b></p><p>  printf("不符合規(guī)則,請重新輸入!\n");</p><p>  fflush(stdin);</p><p>  x=scanf(&q

15、uot;%d",&ZY[i].n);</p><p><b>  }</b></p><p>  Available[i]=ZY[i].n;//對可使用資源向量進(jìn)行初始化</p><p><b>  }</b></p><p><b>  return 0;</b&

16、gt;</p><p><b>  }</b></p><p><b>  //進(jìn)程的信息</b></p><p>  int jincheng()</p><p><b>  {</b></p><p><b>  int i=0;</

17、b></p><p>  int j,g,x;</p><p>  char name;</p><p>  printf("請輸入進(jìn)程的個數(shù):\n");</p><p>  fflush(stdin);</p><p>  x=scanf("%d",&u);<

18、;/p><p>  while(x==0)</p><p><b>  {</b></p><p>  printf("不符合規(guī)則,請重新輸入!\n");</p><p>  fflush(stdin);</p><p>  x=scanf("%d",&

19、u);</p><p><b>  }</b></p><p>  for(i=0;i<u;i++)</p><p><b>  { </b></p><p>  printf("請輸入第%d種進(jìn)程的名稱:\n",i);</p><p>  sc

20、anf("%c",&JC[i].name);</p><p>  while(JC[i].name=='\n')scanf("%c",&JC[i].name);</p><p>  for(g=0;g<a;g++)</p><p><b>  {</b></p&

21、gt;<p>  JC[i].r[g].type=ZY[g].type;</p><p><b>  }</b></p><p>  for(j=0;j<a;j++)</p><p><b>  {</b></p><p>  printf("請輸入進(jìn)程%c對資源%c的

22、最大申請量:",JC[i].name,JC[i].r[j].type);</p><p>  fflush(stdin);</p><p>  x=scanf("%d",&Max[i][j]);</p><p>  while(x==0)</p><p><b>  {</b><

23、;/p><p>  printf("不符合規(guī)則,請重新輸入!\n");</p><p>  fflush(stdin);</p><p>  x=scanf("%d",&Max[i][j]);</p><p><b>  }</b></p><p>  

24、while(Max[i][j]>ZY[j].n)</p><p><b>  {</b></p><p>  printf("進(jìn)程%c對資源%c的最大申請量大于資源%c的數(shù)量,請重新輸入:",JC[i].name,JC[i].r[j].type,JC[i].r[j].type);</p><p>  fflush(s

25、tdin);</p><p>  x=scanf("%d",&Max[i][j]);</p><p>  while(x==0)</p><p><b>  {</b></p><p>  printf("不符合規(guī)則,請重新輸入!\n");</p><p

26、>  fflush(stdin);</p><p>  x=scanf("%d",&Max[i][j]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

27、;<p><b>  }</b></p><p><b>  init();</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  運(yùn)行結(jié)果:</b

28、></p><p><b>  圖3.2 資源輸入</b></p><p>  圖3.3進(jìn)程輸出信息</p><p><b>  4.心得體會</b></p><p>  經(jīng)過這次的操作系統(tǒng)課程設(shè)計,讓我經(jīng)歷了一次有意義的項目開發(fā)過程,讓我了解了團(tuán)隊合作的重要性,起初我們只是在不停的各干各的,

29、發(fā)現(xiàn)根本不可能完成預(yù)期的任務(wù),后來我們坐下來討論了系統(tǒng)的功能,然后各司其職,發(fā)現(xiàn)效果真的不一樣,雖然在這兩周的時間里我們做了很多,中間也遇到了一些問題,比如說臨界資源管理模塊和銀行家模塊怎樣結(jié)合起來,起初是將兩個交叉起來,可是效果不是很好,最后還是決定將它們分開,慢慢地其他問題也同樣得到了解決,這就是團(tuán)隊合作的力量,這個系統(tǒng)需要完善的內(nèi)容還有很多,我們以后還會在一起討論完善并改進(jìn),在此過程中,我也發(fā)現(xiàn)了編程是需要絕對的耐心與細(xì)心的,不然

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論