基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū)3_第1頁(yè)
基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū)3_第2頁(yè)
基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū)3_第3頁(yè)
基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū)3_第4頁(yè)
基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū)3_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

PAGEPAGE10中北大學(xué)操作系統(tǒng)課程設(shè)計(jì)說(shuō)明書(shū)

學(xué)院、系:軟件學(xué)院專(zhuān)業(yè)軟件工程學(xué)生姓名:1121011042學(xué)號(hào):段俊偉設(shè)計(jì)題目:基于Linux的實(shí)現(xiàn)進(jìn)程的信號(hào)量互斥申請(qǐng)起迄日期:2013年11月22日-2013年12月6日指導(dǎo)教師:康珺

2013年11月6日需求分析基于Linux的進(jìn)程同步與通信的模擬實(shí)現(xiàn)需要完成以下功能:(1)創(chuàng)建進(jìn)程:手動(dòng)創(chuàng)建幾個(gè)進(jìn)程,或者隨即創(chuàng)建幾個(gè)進(jìn)程,都在界面上完成;要求包括進(jìn)程的名稱(chēng)(不能重復(fù))、執(zhí)行時(shí)間和申請(qǐng)資源的等待時(shí)間等。在同一時(shí)刻可能有多個(gè)進(jìn)行在內(nèi)存申請(qǐng)某資源,即可以輸入多個(gè)進(jìn)程的資源申請(qǐng)。(2)3類(lèi)臨界資源的管理,包括申請(qǐng)以及分配等。分別通過(guò)信號(hào)量實(shí)現(xiàn)或者管程實(shí)現(xiàn)。(3)銀行家算法,判斷是否可以進(jìn)行資源的分配。基于以上的功能,可以使用戶(hù)選擇操作,模擬臨界資源的管理和銀行家算法。目的:實(shí)現(xiàn)臨界資源的管理及死鎖的避免。總體設(shè)計(jì)進(jìn)程同步與模擬實(shí)現(xiàn)系統(tǒng)分為4個(gè)模塊:輸入輸出,進(jìn)程對(duì)資源的隨機(jī)申請(qǐng)及分配,臨界資源管理,銀行家算法避免死鎖。輸入輸出:包括系統(tǒng)運(yùn)行所需要的進(jìn)程的名稱(chēng),執(zhí)行時(shí)間,申請(qǐng)資源的等待時(shí)間,進(jìn)程對(duì)資源的需要量等信息以及系統(tǒng)所要顯示出的進(jìn)程的創(chuàng)建信息,資源的分配信息,進(jìn)行執(zhí)行信息,進(jìn)行動(dòng)態(tài)申請(qǐng)資源信息等。進(jìn)程對(duì)資源的隨機(jī)申請(qǐng)及分配:根據(jù)所輸入的進(jìn)程、資源、以及進(jìn)程對(duì)資源的最大申請(qǐng)情況,隨機(jī)產(chǎn)生進(jìn)程當(dāng)前對(duì)資源的申請(qǐng),輸出相應(yīng)的分配信息與進(jìn)程執(zhí)行信息并調(diào)用銀行家算法對(duì)進(jìn)程的資源申請(qǐng)進(jìn)行判斷。臨界資源的管理:創(chuàng)建相應(yīng)個(gè)數(shù)的進(jìn)程,完成進(jìn)程的并發(fā)執(zhí)行,使用互斥信號(hào)量使各進(jìn)程互斥的進(jìn)入各自的臨界區(qū)對(duì)資源進(jìn)行申請(qǐng),進(jìn)程執(zhí)行完畢后,互斥的對(duì)資源進(jìn)行恢復(fù)。銀行家算法避免死鎖:對(duì)當(dāng)前進(jìn)程對(duì)資源的申請(qǐng)利用銀行家算法進(jìn)行判斷,看系統(tǒng)分配后是否處于安全狀態(tài),若處于安全狀態(tài),則將資源分配給進(jìn)程,并輸出分配信息,否則對(duì)不予以分配。3.詳細(xì)設(shè)計(jì)在該系統(tǒng)中我主要實(shí)現(xiàn)了銀行家算法避免死鎖的模塊,該模塊中主要使用了數(shù)組的數(shù)據(jù)結(jié)構(gòu).3.1銀行家算法:設(shè)Request[i]是進(jìn)程i的請(qǐng)求向量,如果Request[i][j]=k,表示進(jìn)程i需要k各j類(lèi)型的資源。當(dāng)i發(fā)出資源請(qǐng)求后,系統(tǒng)按下述步驟進(jìn)行檢查:如果Request[i][j]<=Need[i][j],便轉(zhuǎn)向步驟(2);否則認(rèn)為出錯(cuò),因?yàn)樗枰馁Y源數(shù)已超過(guò)它所宣布的最大值。如果Request[i][j]<=Available[i][j],便轉(zhuǎn)向步驟(3);否則表示尚無(wú)足夠資源,進(jìn)程i需要等待。系統(tǒng)試探著把資源分配給進(jìn)程i,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:Available[j]=Available[j]-Request[tr][j]; Allocation[tr][j]=Allocation[tr][j]+Request[tr][j]; Need[tr][j]=Need[tr][j]-Request[tr][j];系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后系統(tǒng)是否處于安全狀態(tài),若安全,才正式將資源分配給進(jìn)程I,以完成本次分配;否則,將本次的試探分配作廢,恢復(fù)原來(lái)的資源分配狀態(tài),讓i等待。安全性算法步驟如下:(1)設(shè)置兩個(gè)向量:工作向量Work,它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類(lèi)資源數(shù)目,它含有m各元素,在執(zhí)行安全算法開(kāi)始時(shí),Work:=Available;Finish,它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成。開(kāi)始時(shí)先做Finish[i]:=false;當(dāng)有足夠自語(yǔ)啊分配給進(jìn)程是,再令Finish[i]:=true.(2)從進(jìn)程集合中找到一個(gè)能滿(mǎn)足下述條件的進(jìn)程:Finish[i]=false;Need[i][j]<=Work[j];若找到,執(zhí)行步驟(3),否則,執(zhí)行步驟(4)。(3)當(dāng)進(jìn)程i獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:Work[j]:=Work[j]+Allocation[i][j];Finish[i]:=true;Gotostep2;(4)如果所有進(jìn)程的Finish[i]=true都滿(mǎn)足,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。3.2數(shù)據(jù)結(jié)構(gòu)intAvailable[NUM];//可使用資源向量intMax[10][NUM];//最大需求矩陣intAllocation[10][NUM];//分配矩陣intNeed[10][NUM];//需求矩陣intWork[NUM];//工作向量intFinish[NUM];//狀態(tài)標(biāo)志intRequest[10][NUM];//進(jìn)程申請(qǐng)資源向量3.3核心代碼intrequest(inttr,intz,intr)//進(jìn)程提出新申請(qǐng)的代碼部分{intp=0,q=0,i,j,f=0,b,l,t=0,k=0;//g記錄進(jìn)程序號(hào) if(u==0||a==0) { printf("請(qǐng)先輸入信息!\n");return0; } else{ for(i=0;i<a;i++) { if(Request[tr][i]>Need[tr][i]) p++; if(Request[tr][i]>Available[i]) q++; } if(p) { printf("\n出錯(cuò)!進(jìn)程申請(qǐng)的資源數(shù)多于它自己申報(bào)的最大量\n"); print1(); if(z!=-1)//手動(dòng)輸入時(shí)不執(zhí)行 { for(i=0;i<a;i++) { if(Need[tr][i]==0) { for(t=0;t<z;t++) { if(Y[r][t].index==i) Y[r][t].flag1=1; } } } } return0; } elseif(q) { printf("\n進(jìn)程%c必須等待\n",JC[tr].name); print1(); if(z!=-1) { for(i=0;i<a;i++) { if(Need[tr][i]==0) { for(t=0;t<z;t++) { if(Y[r][t].index==i) Y[r][t].flag1=1; } } } } return0; } else { for(j=0;j<a;j++) {//以下是預(yù)分配 Available[j]=Available[j]-Request[tr][j]; Allocation[tr][j]=Allocation[tr][j]+Request[tr][j]; Need[tr][j]=Need[tr][j]-Request[tr][j]; Work[j]=Available[j]; } for(i=0;i<a;i++) { Work[i]=Available[i];//Work[i]只是一個(gè)暫時(shí)寄存的中間變量,為防止在下面//安全性檢查時(shí)修改到Available[i]而代替的一維數(shù)組 Finish[i]=0; } for(k=0;k<u;k++) { for(i=0;i<u;i++) { b=0;//計(jì)數(shù)器初始化,記錄進(jìn)程中滿(mǎn)足條件的資源數(shù) for(j=0;j<a;j++) { if(Need[i][j]<=Work[j]) { b=b+1; } if(Finish[i]==0&&b==a) { for(l=0;l<a;l++) { Work[l]=Work[l]+Allocation[i][l]; } Finish[i]=1; printf("$$%c",JC[i].name);//依次輸出進(jìn)程安全序列之一中每個(gè)元素 } } } } printf("\n"); for(i=0;i<u;i++) { if(Finish[i]==1){f=f+1;}//統(tǒng)計(jì)Finish[i]==1的個(gè)數(shù) } if(f==u) { printf("安全性算法檢查預(yù)分配后系統(tǒng)處于安全狀態(tài),以上為安全序列!可以將資源分配給進(jìn)程%c",JC[tr].name); f=0;//將計(jì)數(shù)器f重新初始化,為下一次提出新的進(jìn)程申請(qǐng)做準(zhǔn)備 print1(); if(z!=-1) { for(i=0;i<a;i++) { Request[tr][i]=0; if(Need[tr][i]==0) { for(t=0;t<z;t++) { if(Y[r][t].index==i) Y[r][t].flag1=1; } } Available[i]=ZY[i].n; } } for(i=0;i<a;i++) { Available[i]=ZY[i].n; } } else { printf("安全性算法檢查預(yù)分配后系統(tǒng)處于不安全狀態(tài),不能進(jìn)行分配!");//以下代碼為當(dāng)系統(tǒng)被判定為不安全狀態(tài)時(shí)//返回提出申請(qǐng)前的狀態(tài) for(i=0;i<a;i++) { Available[i]=Available[i]+Request[tr][i]; Allocation[tr][i]=Allocation[tr][i]-Request[tr][i]; Need[tr][i]=Need[tr][i]+Request[tr][i]; } print1(); } }return1;}}3.4運(yùn)行結(jié)果圖3.4.1圖3.4.2圖3.4.3圖3.4.4圖3.4.54.心得體會(huì)經(jīng)過(guò)這次的操作系統(tǒng)課程設(shè)計(jì),讓我經(jīng)歷了一次有意義的項(xiàng)目開(kāi)發(fā)過(guò)程,讓我了解了團(tuán)隊(duì)合作的重要性,起初我們只是在不停的各干各的,發(fā)現(xiàn)根本不可能完成預(yù)期的任務(wù),后來(lái)我們坐下來(lái)討

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論