版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
個(gè)人資料整理 僅限學(xué)習(xí)使用課程設(shè)計(jì)指導(dǎo)教師評(píng)語課程設(shè)計(jì)報(bào)告書2018/2018 學(xué)年 第1 學(xué)期課程名稱:操作系統(tǒng)實(shí)踐課程設(shè)計(jì)專業(yè)班級(jí):成績:____________計(jì)算機(jī)0801_________學(xué)號(hào):080405003指導(dǎo)教師簽字:________________姓名:_______王乾龍___________指導(dǎo)教師:邵虹題目1銀行家算法的實(shí)現(xiàn)1.1題目的主要研究內(nèi)容及預(yù)期達(dá)到的目標(biāo)個(gè)人資料整理 僅限學(xué)習(xí)使用編程序模擬實(shí)現(xiàn)銀行家算法。1.2題目研究的工作基礎(chǔ)或?qū)嶒?yàn)條件<1)硬件環(huán)境:widows<2)軟件環(huán)境:JAVA,VC1.3設(shè)計(jì)思想先對(duì)用戶提出的請(qǐng)求進(jìn)行合法性檢查,即檢查請(qǐng)求是否大于需要的,是否大于可利用的。若請(qǐng)求合法,則進(jìn)行預(yù)分配,對(duì)分配后的狀態(tài)調(diào)用安全性算法進(jìn)行檢查。若安全,則分配;若不安全,則拒絕申請(qǐng),恢復(fù)到原來的狀態(tài),拒絕申請(qǐng)。1.4流程圖1、系統(tǒng)主要過程流程圖2個(gè)人資料整理 僅限學(xué)習(xí)使用3、安全性算法流程圖個(gè)人資料整理 僅限學(xué)習(xí)使用1.5主要程序代碼packagebank。importjava.util.Scanner。publicclassTest{intno1,no2。staticintMax[][]。 //最大需求staticintAllocation[][] 。 //已分配資源數(shù)staticintNeed[][]。 //仍需資源數(shù)staticintAvailable[]。 //可利用資源數(shù)staticStringname1[]。staticStringname2[]。staticboolean[]Finish。staticint[]temp={0} 。 //存放安全序列staticintwork[]。staticint[]Request。Scannerinput=newScanner(System.in>。publicstaticvoidmain(String[]args>{Testt=newTest(>。t.printFrame(>。//t.print(>。t.Safty(>。t.judge(>。}/*
輸入初始化數(shù)據(jù)
*/publicvoidprintFrame(>{System.out.println("*****************************************************">
。System.out.println("*
*">
。System.out.println("*
銀行家算法設(shè)計(jì)與實(shí)現(xiàn)
*">
。System.out.println("*
*">
。System.out.println("*****************************************************">
。System.out.print("
請(qǐng)輸入系統(tǒng)中進(jìn)程的個(gè)數(shù) :">。no1=input.nextInt(>。System.out.print("請(qǐng)輸入資源的種類數(shù):no2=input.nextInt(>。Max=newint[no1][no2]。Allocation=newint[no1][no2] 。Need=newint[no1][no2]。Available=newint[no2]。
">。name1=newString[no1]。name2=newString[no2]。intsum[]=newint[3]。for(inti=0。i<no1。i++>{System.out.print("請(qǐng)輸入進(jìn)程"+i+"的名字:">。name1[i]=input.next(>。}for(inti=0。i<no2。i++>{System.out.print("請(qǐng)輸入資源"+i+"的名字:">。name2[i]=input.next(>。}for(inti=0。i<no1。i++>{for(intj=0。j<no2。j++>{System.out.print("請(qǐng)輸入進(jìn)程"+name1[i]+"的"+name2[j]個(gè)人資料整理 僅限學(xué)習(xí)使用+"類資源最大需求量Max[i][j]=input.nextInt(> 。}
:">。}for(inti=0。i<no1。i++>{for(intj=0。j<no2。j++>{System.out.print("請(qǐng)輸入進(jìn)程"+name1[i]+"的"+name2[j]+"類資源已占有資源量 :">。Allocation[i][j]=input.nextInt(> 。Need[i][j]=Max[i][j]-Allocation[i][j] 。}for(inti=0
}。i<no2。i++>{System.out.print("請(qǐng)輸入類資源 "+name2[i]+"Available[i]=input.nextInt(> 。
的可利用資源數(shù):
">。}for(inti=0。i<no2。i++>{Available[i]=Available[i]-sum[i]
。}}/*打印輸出*/publicvoidprint(>{System.out.println("**************System.out.println("Numberfor(inti=0。i<no1。i++>{System.out.print(" "+i+"
此時(shí)刻資源分配情況 **************">Name Max Allocation Need">"> 。
。
。System.out.print(name1[i]+"
">
。for(intj=0
。
j<no2。
j++>{System.out.print(Max[i][j]+"">
。}for(intj=0
。
j<no2。
j++>{System.out.print("
"+Allocation[i][j]>
。}for(intj=0
。
j<no2。
j++>{System.out.print(""+Need[i][j]>
。}System.out.println(>
。}System.out.print("各個(gè)類資源可利用的資源數(shù)分別為for(intj=0。j<no2。j++>
:">。{System.out.print(""+Available[j]>
。}System.out.println(>
。}/***進(jìn)行安全性檢測*/publicvoidSafty(>{Finish=newboolean[no1]temp=newint[no1]。inti,k=0,m,apply,j。//kintflag=0。work=newint[no2]。for(i=0。i<no2。i++>{work[i]=Available[i] 。}for(i=0。i<no1。i++>{apply=0。
。為安全序列的序列數(shù)//當(dāng)前執(zhí)行換后,重第一個(gè)開始檢測for(j=0。j<no2。j++>{if(Finish[i]==false&&Need[i][j]<=work[j]> //{apply++。if(apply==no2>{for(m=0。m<no2。m++>work[m]=work[m]+Allocation[i][m]。//變分配數(shù)Finish[i]=true。temp[k]=i+1。 //保存安全序列個(gè)人資料整理 僅限學(xué)習(xí)使用i=-1。 //k++。flag++。}}}}for(i=0。i<no2。i++>{if(Finish[i]==false>{System.out.println("系統(tǒng)不安全!">。}else{System.out.print("系統(tǒng)是安全的,安全序列為: ">。for(i=0。i<no1。i++> //{System.out.print(temp[i]+"-->">
輸出運(yùn)行進(jìn)程數(shù)組。}System.out.println(>
。print(>。}}}/*進(jìn)行資源分配 */publicvoidchangdata(inti>{intj
。for(j=0
。
j<no2。
j++>{Available[j]=Available[j]-Request[j] 。Allocation[i][j]=Allocation[i][j]+Request[j]Need[i][j]=Need[i][j]-Request[j] 。
。}}/*
利用銀行家算法對(duì)申請(qǐng)資源對(duì)進(jìn)行判定
*/voidjudge(>{Request=newint[no2]。charch='y'。inti=0,j=0。System.out.print("請(qǐng)輸入您要分配的資源進(jìn)程號(hào):
">。for(j=0。j<10。j++>{i=input.nextInt(>。if(i>no1>{System.out.println("
輸入錯(cuò)誤,請(qǐng)重新輸入
:">。continue。}elsebreak。}//System.out.println("錯(cuò)誤次數(shù)太多,看來您今天不適合進(jìn)行操作,系統(tǒng)退出!">。//System.exit(0>。}System.out.println("請(qǐng)輸入進(jìn)程"+i+"申請(qǐng)的資源:">。for(j=0。j<no2。j++>{System.out.print(name2[j]+"類資源請(qǐng)求:">。Request[j]=input.nextInt(>。//輸入需要申請(qǐng)的資源}for(j=0。j<no2。j++>{if(Request[j]>Need[i][j]>// 判斷申請(qǐng)是否大于需求,若大于則出錯(cuò){System.out.println("進(jìn)程"+i+"申請(qǐng)的資源大于它所需要的資源。 ">。個(gè)人資料整理 僅限學(xué)習(xí)使用System.out.println("分配不合理,不予分配! ">。ch='n'。break。}else{if(Request[j]>Available[j]>// 判斷申請(qǐng)是否大于當(dāng)前資源,若大于則{System.out.println("進(jìn)程"+i+"申請(qǐng)的資源大于系統(tǒng)現(xiàn)在可利用的資源。">。System.out.println("
分配不合理,不予分配!
">。ch='n'。break。}}}if(ch=='y'>{changdata(i>。
//根據(jù)進(jìn)程需求量變換資源Safty(>。 //根據(jù)進(jìn)程需求量進(jìn)行銀行家算法判斷}System.out.println("請(qǐng)輸入您所要進(jìn)行的操作:
1:繼續(xù)分配
2:退出
">。for(i=0。i<5。i++>{intchoice=input.nextInt(>。if(choice==1>judge(>。elseif(choice==2> System.exit(0>。elseSystem.out.println("輸入錯(cuò)誤,請(qǐng)重新輸入:
">。}System.out.println("
錯(cuò)誤次數(shù)太多,看來您今天不適合進(jìn)行操作,系統(tǒng)退出!
">。System.exit(0>。}}1.6運(yùn)行結(jié)果及分析<可以抓取界面)1.開始界面2.初始化并打印輸出個(gè)人資料整理 僅限學(xué)習(xí)使用3.用例測試a:進(jìn)程1發(fā)出請(qǐng)求Request(2,1,2>——Request>Need,不予分配。4.用例測試b:進(jìn)程0發(fā)出請(qǐng)求Request(2,2,2>——Request>Available, 不予分配。5.用例測試c:進(jìn)程1發(fā)出請(qǐng)求Request(1,0,1>——可以分配。個(gè)人資料整理 僅限學(xué)習(xí)使用6.用例測試d:進(jìn)程0發(fā)出請(qǐng)求Request(1,0,1>——系統(tǒng)不安全。7.輸入測試a:如果所輸入的要分配資源的進(jìn)程號(hào)不在存在的進(jìn)程,則報(bào)錯(cuò)請(qǐng)求重新輸入。8.輸入測試b:在選擇繼續(xù)分配還是退出中,如果輸入不符合求,則報(bào)錯(cuò)請(qǐng)求重新輸入,連續(xù)錯(cuò)誤5次后系統(tǒng)將自動(dòng)關(guān)閉。1.7心得體會(huì)通過對(duì)此題目的研究,我基本達(dá)到了預(yù)期目標(biāo),編程模擬實(shí)現(xiàn)了銀行家算法。題目2磁盤調(diào)度算法的模擬2.1題目的主要研究內(nèi)容及預(yù)期達(dá)到的目標(biāo)模擬實(shí)現(xiàn)磁盤調(diào)度算法中的 FCFS、SSTF、SCAN和CSCAN算法。2.2題目研究的工作基礎(chǔ)或?qū)嶒?yàn)條件<1)硬件環(huán)境:windows<2)軟件環(huán)境:VisualC++2.3設(shè)計(jì)思想用戶輸入當(dāng)前磁頭和磁道范圍,隨機(jī)的生成 10個(gè)磁道數(shù)。然后通過四種磁盤調(diào)度的模擬算法來顯示出不同的方法調(diào)度后的磁道順序。開始生成的隨機(jī)數(shù)列是字符串形式的,在每個(gè)算法過程中都要將其先轉(zhuǎn)換成數(shù)組形式,然后將值賦給一個(gè)臨時(shí)的數(shù)組??傮w思想是將數(shù)組逐一的相減得到磁道數(shù),然后將整個(gè)數(shù)組向前移動(dòng)一位。計(jì)算出總磁道數(shù)和平均尋道長度。在后面的兩個(gè)算法中用到了冒泡排序?qū)?shù)組先按大小排序然后再處理。最后將得到的數(shù)組結(jié)果再轉(zhuǎn)換成字符串的形式輸出。在 list 控件中也顯示出來,這樣便于對(duì)這幾種方法進(jìn)行比較獨(dú)處結(jié)論。2.4流程圖<1)FCFS個(gè)人資料整理 僅限學(xué)習(xí)使用開始初始化臨時(shí)數(shù)組Rline[10]初始化變量x,i,k,All,Temp復(fù)制磁道號(hào)到臨時(shí)數(shù)組RLinem_fcfssc="";All=Hand-RLine[0];i<=9是Temp=Rline[0]-Rline[1];類型轉(zhuǎn)換為Cstringm_fcfssc+=ran0+"";All=Temp+All;每個(gè)磁道數(shù)向前移動(dòng)一位i++在控件上顯示排序后的數(shù)列結(jié)束<2)SSTF個(gè)人資料整理 僅限學(xué)習(xí)使用開始初始化變量x,i=0,j,k,h,All;Temp;初始化臨時(shí)數(shù)組 RLine[10];復(fù)制磁道號(hào)到臨時(shí)數(shù)組RLinei<9是RLine[j]>Han是否Temp=RLine[j]-HanTemp=Han-RLine[j]否Temp<Min是Min=Temph=ji++All=All+Min在控件上顯示排序有的數(shù)列結(jié)束<3)SCAN個(gè)人資料整理 僅限學(xué)習(xí)使用開始初始化變量確定磁道的方向復(fù)制磁道號(hào)到臨時(shí)數(shù)組RLine用冒泡排序?qū)υL問磁道按由小到大順序排列輸出RLine[9]<=Hand是sum=Hand-RLine[0]否RLine[9]<=Hand是sum=RLine[9]-HandRLine[k]<=Hand是k++L=k-1r=k否磁頭方向向內(nèi)是j>=0是m_scansc+=ran2+"否J++j<10是m_scansc+=ran2+""J--j<10是m_scansc+=ran2+""否J--j>=0是m_scansc+=ran2+"J++M_zscan=sum;m_c=(float)(sum)/10;在控件上顯示排序后的數(shù)列結(jié)束<4)CSCAN開始初始化變量和臨時(shí)數(shù)組復(fù)制磁道號(hào)到臨時(shí)數(shù)組 RLine冒泡排序?qū)υL問磁道按由小到大順序排列輸出磁頭位置在最外圍欲訪問磁道是xiangnei==1是將int類型轉(zhuǎn)換為CstrinRLine[9]<=Hand是sum=Hand-2*RLine[0]+RLine[9]RLine[0]>=Handsum=RLine[9]-Hand將int類型轉(zhuǎn)換為CstrinRLine[9]<=Hand是sum=RLine[9]-HandRLine[0]>=Handsum=Hand-2*RLine[0]+RLine[9]
個(gè)人資料整理 僅限學(xué)習(xí)使用否xiangnei==1 否是RLine[k]<Hand RLine[k]<Hand是是k++k++L=k-1L=k-1否R=kR=k否j=rj=1j<10J>=0是是將int類型轉(zhuǎn)換為Cstring將int類型轉(zhuǎn)換為Cstringm_cscansc+=ran3+""m_cscansc+=ran3+""否否J++J--j<rJ>=r是是將int類型轉(zhuǎn)換為Cstring將int類型轉(zhuǎn)換為Cstringm_cscansc+=ran3+""m_cscansc+=ran3+""否J++J--sum=2*RLine[9]-Hand-sum=2*RLine[9]+Hand-2*RLine[0]+RLine[l]2*RLine[0]-RLine[r]在空間安上顯示,結(jié)束2.5主要程序代碼voidCTest04Dlg::OnSc(>{//TODO:Addyourcontrolnotificationhandlercodehere((CButton*>GetDlgItem(IDC_FCFS>>->EnableWindow(TRUE>。//解除鎖定((CButton*>GetDlgItem(IDC_SSTF>>->EnableWindow(TRUE> 。((CButton*>GetDlgItem(IDC_SCAN>>->EnableWindow(TRUE> 。((CButton*>GetDlgItem(IDC_CSCAN>>->EnableWindow(TRUE> 。m_ListCtrl.DeleteAllItems(> 。//列表清空J(rèn)age=-1。inti。CStringran。個(gè)人資料整理 僅限學(xué)習(xí)使用UpdateData(TRUE>。Hand=m_Hand。if(m_Limit>65535||m_Limit<=10||m_Hand>65535||m_Hand<=0>MessageBox("超出范圍!">。else{for(i=0。i<=9。i++>{DiscLine[i]=rand(>%m_Limit 。//隨機(jī)生成 10個(gè)磁道號(hào)}m_suiji=""。for(i=0。i<=9。i++>{ran.Format("%d",DiscLine[i]> 。//將int類型轉(zhuǎn)換為 Cstringm_suiji+=ran。m_suiji+=""。}UpdateData(FALSE>。}}voidCTest04Dlg::OnFcfs(>{if(Jage>=0>m_ListCtrl.DeleteAllItems(> 。Jage=0。//TODO:AddyourcontrolnotificationhandlercodehereintRLine[10]。 //將隨機(jī)生成的磁道數(shù)數(shù)組 Discline[]復(fù)制給數(shù)組intx,i,k,All,Temp。//Temp是計(jì)算移動(dòng)的磁道距離的臨時(shí)變量 allAll=0。 //統(tǒng)計(jì)全部的磁道數(shù)變量
RLine[]是計(jì)算總的移動(dòng)磁頭數(shù)k=9。
//限定
10個(gè)的磁道數(shù)CStringran0。for(i=0。i<=9。i++>//復(fù)制磁道號(hào)到臨時(shí)數(shù)組 RLine{RLine[i]=DiscLine[i]}m_fcfssc=""。All=Hand-RLine[0]if(All<0>All=(-All>
。。。for(i=0。i<=9。i++>{Temp=RLine[0]-RLine[1]。//求出移動(dòng)磁道數(shù),前一個(gè)磁道數(shù)減去后一個(gè)磁道數(shù)得出臨時(shí)的移動(dòng)距離if(Temp<0>Temp=(-Temp>。 //移動(dòng)磁道數(shù)為負(fù)數(shù)時(shí) ,算出相反數(shù)作為移動(dòng)磁道數(shù)ran0.Format("%d",RLine[0]>
。
//將
int
類型轉(zhuǎn)換為
Cstringm_fcfssc+=ran0+""
。All=Temp+All
。
//求全部磁道數(shù)的總和個(gè)人資料整理 僅限學(xué)習(xí)使用//每個(gè)磁道數(shù)向前移動(dòng)一位x=0。for(inta=x。a<k。a++>{RLine[a]=RLine[a+1]。x++。}k--。}m_zfcfs=All。m_a=(float>(All>/10 。UpdateData(FALSE>。BIJIAOsc。ran0.Format("%d",Jage+1>。//它是以"%"開始,而以type結(jié)束.d十進(jìn)制數(shù),表示一個(gè)整型值sc.code=="FCFS"。sc.shunxu=m_fcfssc。ran0.Format("%d",m_zfcfs>。sc.daxiao=ran0。ran0.Format("%f",m_a>。sc.pingjun=ran0。show(sc>。}voidCTest04Dlg::OnSstf(>//最短尋道時(shí)間優(yōu)先{//TODO:AddyourcontrolnotificationhandlercodehereJage=1。intHan=Hand。intx,i,j,k,h,All。intTemp。 //Temp是計(jì)算移動(dòng)的磁道距離的臨時(shí)變量intRLine[10]。 //將隨機(jī)生成的磁道數(shù)數(shù)組 Discline[]復(fù)制給數(shù)組 RLine[]intMin。 //設(shè)置一個(gè)大數(shù)作為存放最小的磁道數(shù)差CStringran1。All=0。 //統(tǒng)計(jì)全部的磁道數(shù)變量k=9。 //限定10個(gè)的磁道數(shù)for(i=0。i<=9。i++>//復(fù)制磁道號(hào)到臨時(shí)數(shù)組 RLine{RLine[i]=DiscLine[i] 。}m_sstfsc=""。for(i=0。i<=9。i++>{Min=64000。for(j=0。j<=k。j++> //內(nèi)循環(huán)尋找與當(dāng)前磁道號(hào)最短尋道的時(shí)間的磁道號(hào){if(RLine[j]>Han> // 如果第一個(gè)隨機(jī)生成的磁道號(hào)大于當(dāng)前的磁道號(hào),執(zhí)行下一句Temp=RLine[j]-Han。 //求出臨時(shí)的移動(dòng)距離elseTemp=Han-RLine[j]。 //求出臨時(shí)的移動(dòng)距離if(Temp<Min>{Min=Temp。
//如果每求出一次的移動(dòng)距離小于//Temp臨時(shí)值賦予 Min
Min,執(zhí)行下一句個(gè)人資料整理 僅限學(xué)習(xí)使用h=j。 //把最近當(dāng)前磁道號(hào)的數(shù)組下標(biāo)賦予 h}}All=All+Min 。ran1.Format("%d",RLine[h]>
//統(tǒng)計(jì)一共移動(dòng)的距離。 //將int類型轉(zhuǎn)換為
Cstringm_sstfsc+=ran1+""
。Han=RLine[h]。//將當(dāng)前選出的數(shù)當(dāng)作開頭,與其他數(shù)做比較x=h。for(inta=x。a<k。a++> //
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度牛奶質(zhì)量安全追溯體系建設(shè)合同4篇
- 2025年度農(nóng)產(chǎn)品質(zhì)量追溯體系建設(shè)合同3篇
- 2025版新能源項(xiàng)目民工權(quán)益保障合同4篇
- 港口小學(xué)2025版炊事員勞動(dòng)合同續(xù)簽及更新協(xié)議3篇
- 2025年度農(nóng)用車租賃與農(nóng)業(yè)技術(shù)研發(fā)合作合同4篇
- 2025年度智能門窗安裝與售后服務(wù)合同4篇
- 2025年度擴(kuò)大勞務(wù)合同范本:核能產(chǎn)業(yè)勞務(wù)輸出協(xié)議3篇
- 2025年度心理咨詢與治療個(gè)人勞務(wù)合同書2篇
- 南昌市二零二五年度租賃合同范本:公寓租賃規(guī)范版2篇
- 2025版企業(yè)年會(huì)場地租賃合同范本8篇
- 2024企業(yè)答謝晚宴會(huì)務(wù)合同3篇
- 高中生物選擇性必修1試題
- 電氣工程及其自動(dòng)化專業(yè)《畢業(yè)設(shè)計(jì)(論文)及答辯》教學(xué)大綱
- 《客艙安全管理與應(yīng)急處置》課件-第14講 應(yīng)急撤離
- 中華人民共和國文物保護(hù)法
- 2025屆高考作文押題預(yù)測5篇
- 節(jié)前物業(yè)安全培訓(xùn)
- 一年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)集錦
- 阿里巴巴國際站:2024年珠寶眼鏡手表及配飾行業(yè)報(bào)告
- 高甘油三酯血癥相關(guān)的器官損傷
- 手術(shù)室護(hù)士考試題及答案
評(píng)論
0/150
提交評(píng)論