![操作系統(tǒng)課程設(shè)計報告動態(tài)分區(qū)分配_第1頁](http://file4.renrendoc.com/view/d21912cdd7de5c2a725c935677cb6f07/d21912cdd7de5c2a725c935677cb6f071.gif)
![操作系統(tǒng)課程設(shè)計報告動態(tài)分區(qū)分配_第2頁](http://file4.renrendoc.com/view/d21912cdd7de5c2a725c935677cb6f07/d21912cdd7de5c2a725c935677cb6f072.gif)
![操作系統(tǒng)課程設(shè)計報告動態(tài)分區(qū)分配_第3頁](http://file4.renrendoc.com/view/d21912cdd7de5c2a725c935677cb6f07/d21912cdd7de5c2a725c935677cb6f073.gif)
![操作系統(tǒng)課程設(shè)計報告動態(tài)分區(qū)分配_第4頁](http://file4.renrendoc.com/view/d21912cdd7de5c2a725c935677cb6f07/d21912cdd7de5c2a725c935677cb6f074.gif)
![操作系統(tǒng)課程設(shè)計報告動態(tài)分區(qū)分配_第5頁](http://file4.renrendoc.com/view/d21912cdd7de5c2a725c935677cb6f07/d21912cdd7de5c2a725c935677cb6f075.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、青島理工大學(xué)操作系統(tǒng)課程設(shè)計報告院(系):計算機工程學(xué)院專業(yè):計算機科學(xué)弓技術(shù)專業(yè)學(xué)生姓名:牛利利班級:計算073 學(xué)號:200707106題目:動態(tài)分區(qū)分配模擬起迄日期:-2010年7月5日至7月16日設(shè)計地點:2號實驗樓402室指導(dǎo)教師:李 2009201 ()年度 第2學(xué)期完成日期:2010年7月16日一、課程設(shè)計目的操作系統(tǒng)是曇重要的計算機系統(tǒng)軟件,同時也是最活躍的學(xué)科之一。計算機系統(tǒng)由硬件 和軟件兩部分組成。操作系統(tǒng)是配直在計算機硬件上的第一層軟件,是對硬件的首次擴充。 本次課程設(shè)計的主要目的是在學(xué)習(xí)操作系統(tǒng)理論知識的基礎(chǔ)上,對操作系統(tǒng)整體的一個模 擬。也是對本學(xué)期所學(xué)知識的一個總體
2、的檢測,使理論知識應(yīng)用到實際的編程中,根據(jù)理論 的算法來實現(xiàn)具體的編程操作。同時通過本次課程設(shè)計加深對操作系統(tǒng)理論知識各個部分管 理功能的感性認識,進一步分析和理解各個部分之間的聯(lián)系和功能,最后達到對完整系統(tǒng)的 理解。同時,可以提高運用操作系統(tǒng)知識和解決實際問題的能力;并且鍛煉自己的編程能力、 創(chuàng)新能力以及開發(fā)軟件的能力;還能提高自己的調(diào)査研究、査閱文獻、資料以及編寫軟件設(shè) 計文檔的能力并提高分析問題的能力。操作系統(tǒng)課程設(shè)計的主要任務(wù)是研究計算機操作系統(tǒng)的墓本原理和算法,拿握操作系統(tǒng)的 存儲器管理、設(shè)杳管理、文件管理和進程管理的基本原理和算法。使學(xué)生李握墓本的原理和 方法,最后達到對完整系統(tǒng)的
3、理解。二、課程設(shè)計內(nèi)容仿真實現(xiàn)動態(tài)可變分區(qū)存儲管理模擬系統(tǒng)。內(nèi)存調(diào)度策路可采用首次適應(yīng)算法、循環(huán)首次 適應(yīng)算法和最佳適應(yīng)法尊,并對各種算法進行性能比較。為了實現(xiàn)分區(qū)分配,系統(tǒng)中必須配 直相應(yīng)的數(shù)據(jù)結(jié)構(gòu),用來描述空閑區(qū)和已分配區(qū)的情況,為分配提供依據(jù)。常用的數(shù)據(jù)結(jié)構(gòu) 有兩種形式:空閑分區(qū)表和空閑分區(qū)鏈。為把一個新作業(yè)裝入內(nèi)存,狽按照一定的算法,從 空閑分區(qū)表或空閑分區(qū)鏈中選出一個分區(qū)分配給該作業(yè)。三、系統(tǒng)分析與設(shè)計1、系統(tǒng)分析:動態(tài)分區(qū)分配是根據(jù)進程的實際需要,動態(tài)地為之分配內(nèi)存空間。在實現(xiàn)可變分區(qū)分配 時,將涉尺到分區(qū)分配中所用的數(shù)據(jù)結(jié)構(gòu)、分區(qū)分配算法和分區(qū)的分配和回收操作這樣三個 問題。為丁
4、實現(xiàn)分區(qū)分配,系統(tǒng)中必須配疊相應(yīng)的數(shù)據(jù)結(jié)構(gòu),用來描述空閑區(qū)和巳分配區(qū)的 情況,為分配提供依據(jù)。常用的數(shù)據(jù)結(jié)構(gòu)有兩種形式:空閑分區(qū)表和空閑分區(qū)鏈。為把一個 新作業(yè)裝入內(nèi)存,須按照一定的算法,從空閑分區(qū)表或空閑分區(qū)鏈中選出一個分區(qū)分配給該 作業(yè)。目前常用的分配算法有:首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法、最壞適 應(yīng)算法和快速適應(yīng)算法。在動態(tài)分區(qū)存儲管理方式中,主要操作是分配內(nèi)存和回收內(nèi)存。2、系統(tǒng)設(shè)計:系統(tǒng)利用某種分配算法,從空閑分區(qū)表中找到所需大小的分區(qū)。設(shè)請求分區(qū)的大小為U- size,表中每個空閑分區(qū)的大小可表示為m.sizc,若m.sizu-u.sizusizu (SiZU為事先規(guī)
5、定的不 再切割的剩余分區(qū)的大小)成立,則說明多余部分太小,可不再切割,將整個分區(qū)分配給請 求者;否則,從該分區(qū)中按請求的大小劃分出一塊內(nèi)存空間分配出去,余下的部分留在空閑 區(qū)表中,然后將分配區(qū)的首址返回給調(diào)用者。當(dāng)進程運行完畢釋放內(nèi)存時,系統(tǒng)根據(jù)回收區(qū) 的首址,從空閑區(qū)表中找到相應(yīng)的插入點,并且按照四種情況進行插入。3、模塊設(shè)計:空閑區(qū)說明表結(jié)構(gòu):把空閑區(qū)定義為結(jié)構(gòu)體變長,包括空閑區(qū)始址,空閑區(qū)大小和空閑 區(qū)狀態(tài),用O表示空表目,1為可用空閑塊。StrUCt FrCCarCaint startaddress;/* 空閑區(qū)始址 */ int sizc*空閑區(qū)大小*/int state;/*空閑區(qū)
6、狀態(tài):0為空表目,1為可用空閑塊*/frccbk)ckN= l,20,20,l,2,80,50,l,3,150,30,1,4,300,30,1,5,500,10,1; 為作業(yè)分配 主存空間的函數(shù)allocO,三個算法分別對應(yīng)三個分配主存空間的算法。aplyarca為作業(yè)申請 長、mg為檢査是否有滿足作業(yè)雲(yún)要的空閑區(qū)的標志。首次適應(yīng)算法:檢査空閑區(qū)說明表是否有滿足作業(yè)要求的空閑區(qū)時,如果大于作業(yè)要求,則分配紿作業(yè), 修改地址和空閑區(qū)大小,并將Mg晝“1”,表示有滿足作業(yè)要求的空閑區(qū),返回為作業(yè)分配 主存的地址程序如下所示:if(frccblock 0 .state=1&frccblocki .s
7、izcapplyarca)frccblockf.startaddrcss=frccbl()cki.strtaddrcss+applyarca; frccbk)cki.sizc=frccbl()cki.sizc-aplyarca;tag=;return FrCCbIockp.startaddrcss-aplyarca;如果空閑區(qū)等于作業(yè)要求,則分配給作業(yè)修改地址和空閑區(qū)大小,并將噸直 T ,表示 有滿足作業(yè)要求的空閑區(qū),返回為作業(yè)分配主存的地址if(frccblock PJ-Statc=1& frccblockp.sizc=aplyarca)frccblocki.statc=0;Iag= 1;r
8、eturn frccblock0.startaddress;如果沒有滿足條件的空閑區(qū),分配不成功,返回-1if(tag=0)rctx循環(huán)首次適應(yīng)算法的abcO函數(shù)與首次適應(yīng)算法的山疋0函教區(qū)別在于從哪里開始找是否 有滿足作業(yè)要求的空閑區(qū),它是從上次找到的空閑區(qū)的下一個空閑分區(qū)開始找,只雲(yún)要 改變?nèi)毖h(huán)的條件即可。for(i=s;iN;i+)黒佳適應(yīng)算法:該算法總是把滿足要求、又是最小的空閑區(qū)分配給作業(yè)。檢査空閑區(qū)說明表是否有滿足作業(yè)要求的空閑區(qū),也分為三種情況:大于,等于,小于。若檢査到有 “等于”的情況,就可以直接分配,若沒有,則繼續(xù)檢査是否有“大于”的情況: if(frccbkrkp.st
9、ate=1& frccblr(i=0;i applyarea)a Q+=i;再從數(shù)組中挑出最小的那個:果敵組中的元素大干一個,則雷要一個個比較過去,然后取出最小的那個分配給作業(yè):if(jl)h=a0;min= frccbkck h;f()r(k=l;kj;k+)h=ak;if(frccbl0ckh.sizcmin.si2c)mid.size=& CCbloCk l.size;mid.statc=frccblockp.statc;mid.startaddrcss=frccblockh.startaddrcss; frccblockh.sizc=min.sizc;frccblockh.statc=
10、min.statc;frccblockh.startaddrcss=mi.startaddrcss;min.si2c=mid.sizc;min.statc=mid.state; mi.startaddrcss=mid.startaddrcss;mi.startaddrcss=mi.startaddrcss+applyarca; mi.sizc=mi.sizc-aplyarca;tag=l;return min.starddrcss-applyarca;如果數(shù)組中只有一個元素,則直接分配紿作業(yè):if(i=i)h=aO;min= frccbl)ck h;mi.startaddrcss=mi.sta
11、rtaddrcss+applyarca; mi.sizc=mi.si2c-alyarca;Iag= 1;return m in. S tar tadd res S- apply area;如果沒有滿足條件的空閑區(qū),分配不成功,返回-1if(tag=O)rclurn -1; 主存回收函數(shù)sctfrccO: Sgl代表釋放區(qū)的高地址是否鄰接一個空閑區(qū),mg2代表釋放 區(qū)的高低地址是否都鄰接一個空閑區(qū),1慫3代表釋放區(qū)的低地址是否鄰接一個空閑區(qū)。 分為四種情況:回收分區(qū)的上鄰和下鄰分區(qū)都不是空閑的,則直接將回收區(qū)的相關(guān)信息記錄在空閑區(qū)表中。if(tag3=0)for(j=0;jck.Startadd
12、rcss=S; frccblockO.sizc=l; FrCCbk)Ck 0.StatC= 1; break;0回收分區(qū)的上鄰分區(qū)是空閑的,需要將這兩個相鄰的空閑區(qū)臺并成一個較大的空閑區(qū),然后修改空閑區(qū)表。if(frccblocki.startaddrcss=s+l&frccbkcki.statc= 1)l=l+frccblocki.sizc;Iagl = 1;回收分區(qū)的下鄰分區(qū)是空閑區(qū),雷要將這兩個相鄰的空閑區(qū)臺并成一個空閑區(qū),并修改閑區(qū)表。ifr(& CCbk)Cki.startaddrcssfrccblocki.sizc=s& frccblocki.state= 1)FrCCbIocki
13、.sizc=frccbkrki.sizc+l;Mg3=l;break;回收分區(qū)的上鄰和下鄰都是空閑區(qū),則雷要將這三個空閑區(qū)臺并成一個更大的空閑區(qū),然后修改空閑區(qū)表。先判斷有上鄰空閑區(qū)(如所示),再判斷有下鄰空閑區(qū)(如所示),若都有,則將ug2l0(4)對空閑區(qū)表中的空閑區(qū)調(diào)整的函數(shù)adjust。:使空閑區(qū)按始地址從小到大排列,空表目放 在舅后EI O打印空閑區(qū)說明表函數(shù):Prinlo首次適應(yīng)算法函數(shù)FirSt_乩0:若有作業(yè)雷要分配內(nèi)存,則對空閑區(qū)表中的空閑區(qū)進行調(diào) 整,調(diào)用調(diào)整函數(shù)“djustO,再將其打印出來;輸入作業(yè)申請長,調(diào)用毗CO函數(shù)為作業(yè) 分配空間,分配結(jié)束后,要進行主存回收,再次
14、調(diào)整空閑區(qū)表后,打印出來。循環(huán)執(zhí)行 直到?jīng)]有作業(yè)為止。循環(huán)首次適應(yīng)算法NCXL-fiO首次適應(yīng)算法不同的是,循環(huán)首次適應(yīng)算法要記錄上次找到的空閑區(qū)地址,并在下次分配時從這個地址開始。最佳時應(yīng)算法Bcst-fitO:該算法在分配內(nèi)存時,把所有滿足要求的空閑區(qū)中最小的那個空 閑區(qū)分配給請求迸程。(9)主函數(shù)mai0 :主要用于調(diào)用各個函數(shù)來實現(xiàn)各項功能和顯示主界面。4、數(shù)據(jù)結(jié)構(gòu)說明:空閑區(qū)說明表結(jié)構(gòu)SlTUCI frCCarea:把空閑區(qū)定義為結(jié)構(gòu)體變長,包括空閑區(qū)始址,空閑 區(qū)大小和空閑區(qū)狀態(tài),用0表示空表目,1為可用空閑塊。為作業(yè)分配主存空間的函數(shù)allocO ,三個算法分別對應(yīng)三個分配主存空
15、間的算法。 applyarca為作業(yè)申請長,Mg為檢査是否有滿足作業(yè)需要的空閑區(qū)的標志。 主存回收函SCtfrCCO: MgI代表釋放區(qū)的高地址是否鄰接一個空閑區(qū),Ug2代表釋放區(qū) 的高低地址是否都鄰接一個空閑區(qū),噸3代表釋放區(qū)的低地址是否鄰接一個空閑區(qū)。分 為四種情況。(4)對空閑區(qū)表中的空閑區(qū)調(diào)整的函adjUSt0:使空閑區(qū)按始地址從小到大排列,空表目放 在星!后IsI O打印空閑區(qū)說明表函數(shù):Prinlo首次適應(yīng)算法函數(shù)FirSt港有作業(yè)雷要分配內(nèi)存,則對空閑區(qū)表中的空閑區(qū)進行調(diào) 整,調(diào)用調(diào)整函數(shù)ndjust,再將其打印出來;輸入作業(yè)申請長,調(diào)用叔c函數(shù)為作業(yè) 分配空間,分配結(jié)束后,要迸
16、行主存回收,再次調(diào)整空閑區(qū)表后,打印出來。循環(huán)執(zhí)行 直到?jīng)]有作業(yè)為止。G)循環(huán)首次適應(yīng)算法NCXL-fio首次適應(yīng)算法不同的是,循環(huán)首次適應(yīng)算法要記錄上次找 到的空閑區(qū)地址,并在下次分配時從這個地址開始。最佳時應(yīng)算法Bcst-fitO:該算法在分配內(nèi)存時,把所有滿足要求的空閑區(qū)中晟小的那個空閑區(qū)分配給請求迸程。主函數(shù)main。:主要用于調(diào)用各個函數(shù)來實現(xiàn)各項功能和顯示主界面。5、算法流程圖內(nèi)存分配流程主函數(shù)流程圖四、模塊調(diào)試與系統(tǒng)測試1、模塊調(diào)試 輸入的形式和輸入值的范圍首先打開主界面輸入整形常數(shù)選擇所要使用的算法,再根據(jù)界面上的提示內(nèi)容進行輸 入整形常數(shù)選擇所要進行的操作,主要包括作業(yè)的申請
17、是、釋放的起始地址、釋放區(qū)的 大小。輸出的形式輸出形式主要包括空閑區(qū)表的狀態(tài)、申請作業(yè)的起始地址和作業(yè)的申請長=程序所能達到的功能程序所能達到的功能主要包括:初始化空閑區(qū)表的狀態(tài),按照首次適應(yīng)算法、循環(huán)首 次適應(yīng)算法和杲佳適應(yīng)算法對內(nèi)存空間進行分配,對內(nèi)存空間進行回收并輸出進行各項 操作后的空閑區(qū)表的狀態(tài)。2、系統(tǒng)測試測試方法本系統(tǒng)采用黑盒測試方法進行測試。測試數(shù)據(jù)及測試擢吿試用例數(shù)據(jù)預(yù)測結(jié)果實際結(jié)果是否相符合法: 輸入1-3進行 算法選擇成功迸入下一步成功進入下一步相符非法:輸入13以外 的數(shù)據(jù)顯示出錯提示“有 誤,請重新輸入”顯示出錯提示“有誤, 請重新輸入”相符合法:輸入03選擇 操作成
18、功選擇所要迸行 的操作成功選擇所要進行的 操作相符非法: 輸入13以外 的數(shù)據(jù)顯示“輸入有誤, 請重試”顯示“輸入有誤,請 重試”相符臺法:輸入分配內(nèi)存 操作下的申請 長為20顯示:申請作業(yè)的 起始地址、申諳長 和內(nèi)存分配成功顯示:申請作業(yè)的起 始地址、申請長和內(nèi) 存分配成功相符非法:輸入內(nèi)存分配 操作下的申請 呈為60顯示:作業(yè)申諳昱 過大,分配失敗顯示:作業(yè)申請長過 大,分配失敗相符3、調(diào)試分析:在調(diào)試過程中定義為作業(yè)分配主存的空間函教11x20時程序出現(xiàn)錯誤,主要原因是由 于for循環(huán)的編寫出現(xiàn)錯誤,由于alloc2()與albc()的主要差異就在于for循環(huán),昱終經(jīng)過査閱 課本從根本上
19、理解丁首次適應(yīng)算法和循環(huán)首次適應(yīng)算法的本質(zhì)區(qū)別,最終使錯誤得以解決程 序正確運行。在編寫alc30時,引入數(shù)組將總體情況分為大的兩種,并在數(shù)組中又分為兩 種小的情況。但是在誇慮所有大于所要求的空閑區(qū)放入數(shù)組時,落拉了只有一個數(shù)組的情況, 最終經(jīng)過自己的仔細檢査和同學(xué)的幫助使錯誤得以解決。在編寫主存回收函SCLfrCCo時由于對在空閑表中的適當(dāng)位直迸行插入時的情況誇慮不 全面,使得其中一種情況落拉導(dǎo)致編程出現(xiàn)錯誤,最后經(jīng)過仔細閱讀課本和同學(xué)的幫助并在網(wǎng)上收索相關(guān)的知識使得錯誤得以解決。在編寫對空閑區(qū)表中的空閑區(qū)調(diào)整旳函教adjust () 時也多次出現(xiàn)錯誤,是終經(jīng)過同學(xué)的幫助和在網(wǎng)上收索相關(guān)知識
20、,借鑒別人的算法使得第 誤得以解決。五、用戶手冊本系統(tǒng)是用C+語言編寫的,使用MiCroSt)FI ViSUal C+平臺開發(fā),不雲(yún)要安裝。經(jīng)運 行驗證本程序可正常運行。具體使用步驟如下:(I) 經(jīng)過編譯.鏈接無誤后便可正常運行,出現(xiàn)主界面根據(jù)主界面上的顯示選擇所要使用的動態(tài)分區(qū)分配算法。(2) 選擇所要使用的算法之后就會顯示所要迸行的各項操作如下 若選擇1分配內(nèi)存則根據(jù)界面提示輸入作業(yè)的申清星則會彈出申請作業(yè)的起 始地址和作業(yè)的申請長CC *C: VDociiBeiits and SettingsVAdainiStratOr桌面Debugwo. exe*Jnl 操的起量功 的業(yè)的請擊 e作業(yè)
21、申配 、店分 請 若選擇2回收內(nèi)存則界面提示輸入釋放區(qū)的起始地址和釋放區(qū)的大小,輸入 之后則會自動顯示空閑區(qū)表的狀態(tài)c *C : VDocuBents and SettingsVAdaini StratOr桌面Debugwo. exe*-InlX請jfe的操宦:2請W放區(qū)的起始地址:20請輸入釋放區(qū)的大小:38I 若選擇3査看空閑區(qū)表則輸入3之后界面就會自動顯示當(dāng)前的空閑區(qū)表的狀 態(tài) 若選擇O退出則系統(tǒng)會回到剛開始的初始界面狀態(tài)重褊先擇動態(tài)分區(qū)分配的 算法-ll jnc *C : Bocuents and SettingsYdainiStratorMJebugVro. eze* 請輸入您的操作
22、;0動態(tài)分區(qū)分配方式的模擬P 1首次適應(yīng)算法2循環(huán)首次適應(yīng)算法3最佳適應(yīng)算法 卞W)(MM)()(呉)()()(Xx幀軸呉)G)G)G)G)C)C XXXXXXXXMXMXXMXXX 請選擇分配算法;m程序清單/車動態(tài)分區(qū)的分配與回收演示程序*/#includc #includc #dcfinc N 5it Stait;存放首址StrUCt frccarca *te義一個空閑區(qū)說明表結(jié)構(gòu),并初始化變長int ID;/*分區(qū)號*7int startaddress;/*空閑區(qū)始址*/int size;/*空閑區(qū)大小*/int state;/*空閑區(qū)狀態(tài):0為空表目,1為可用空閑塊*/febk)ck
23、(N=1r2020J ,2,80,50,350,30,4,300,30,1,5,500,10;/*定義為作業(yè)分配主存空間的函數(shù)allocO,首次適應(yīng)算法調(diào)用*/int alloc(int alyarca)int i,lag=O;*aplyarca為作業(yè)申諳昱,tag為檢査是否有滿足作業(yè)需要的空閑區(qū)的標志*/for(i=0;i applyarca)& Ucrbh)Cki.startddwss=frcxbh)ckisMr 匕 KidrcrSS+applyarc; frccbk)cki.si2c=frccbl0cki.sizc-aplyarca;tag=l; 嚴有滿足條件的空閑區(qū)時,tag I*/r
24、eturn frccblock0.startaddress-applyarea; /*返回為作業(yè)分配的主存地址*7if(frccblocki.state=1& frccblock i.sizc=applyarca)frccblocki S tatc=0;Iag= 1;/*有滿足條件的空閑區(qū)時,Mg貫I*/return FrCCbk)Cki.Startaddrcss;/琢返回為作業(yè)分配的主存地址3*7 if(lag=O)return -1;廣沒有滿足條件的空閑區(qū),分配不成功,返回-1*/廣定義為作業(yè)分配主存空間的函數(shù)alloc20,循環(huán)首次適應(yīng)算法調(diào)用*/ int aoc2(int applya
25、rca,int S) *applyarea 為作業(yè)申 1*/int i,tag=O;*tag為檢査是否有滿足作業(yè)雲(yún)要的空閑區(qū)的標志玫/for(i=s;icki.sizcapplyarca)frccblocki.startaddress=frccbl()cki.startaddrcss+alarca; frccbl()cki.si2c=frccbl0cki.sizc-aplyarca;Iag= 1;廣有滿足條件的空閑區(qū)時,tag 1*/Start= frccblocki.s tartaddrcss-applyarca;return i;CISCif(frccblocki.state=1&frcc
26、blocki.sizc=applyarca)frccbkcki.statc=0;Iag= 1;/*有滿足條件的空閑區(qū)時,tag 1*/StarI=frccblocki.startaddress;/返回為作業(yè)分配的主存地址*/return i;if(tag=O)return -1;/球沒有滿足條件的空閑區(qū),分配不成功,返回屮/球定義為作業(yè)分配主存空間的函數(shù)alk)c30,佳適應(yīng)算法調(diào)用*/int alloc3(int applyarea)*applyarea 為作業(yè)申請縣*7int i,k,h,fMg=0j=0;*tag為檢査是否有滿足作業(yè)需要的空閑區(qū)的標志*/int aN;StrUCt frc
27、carca min;StrUCt frccarca mid;for(i=0;il*/return frccblockp.startaddress;/球返回為作業(yè)分配的主存地址j17for(i=0;iaplyarca)aj+=i;h=a0;mill= FrCCbloCk h;/min.startaddrcss=& UCrblQCk h. StarUiddruss;/min.sizc=frccblockh.sizc;/min.statc=frccbk)ckl.statf()r(k=l;kj;k+)h=ak;if(frccblockl).sizctagl =0,tag2=0,tag3=0,j;Pri
28、nlff請輸入釋放區(qū)的起始地址:”);SCanF(”d”,&s);/*輸入釋放區(qū)的開始地址*/PrimF(M請輸入釋放區(qū)的大小:H);SCanF(”廣輸入釋放區(qū)的大小a7PrintfC*回收內(nèi)存后空閑區(qū)表的狀態(tài)如下*n);for(i=0;iN;i+)if(frccblocki.startaddrcss=s+l& &frccblock0.State=I)l=l+frccblocki.sizc;IagI = 1;/*有與釋放區(qū)高地址鄰接的空閑區(qū),UgI直1*/for(j=0;jckj.statc=l)frccblocki.statc=O;frccblockj.sizc=frccbk)ckj.siz
29、c+l;tag2=l;/*有與釋放區(qū)上下都鄰接的空閑區(qū),tag2 1*/break;if(tag2=0)/*無與釋放區(qū)高低地址鄰接的空閑區(qū)*/FrCCbIocki.Startaddrcss=S;FrCCbIocki.sizc=l;break;if(iagl=O)廠無與釋放區(qū)高地址鄰接的空閑區(qū),并檢査是否低地址有鄰接空閑區(qū)巧 for(i=0r(j=O;jN;i+)if(frccblocki.staic=0)/*找一個空表目,將釋放區(qū)放入表中球/ frccblockj.Startaddrcss=S;frccblockj.sizc=l;frccblockj.statc=1;break;廠定義對空閑區(qū)
30、表中的空閑區(qū)調(diào)整的函數(shù)adjust,使空閑區(qū)按始地址從小到大排列,空表目放在最后面V(Md adj ustiiit i,j;StrUCt frccarca middata;for(i=0;iN3+)/*將空閑區(qū)按始地址順序在表中排列*/for(j=0;jfrccbl)ckj+l.startaddress) middata.startaddrcss=frccblockj.startaddrcss; middata.sizc=frccblockj.sizc;middata.statc=frccblockj .state; frccblockj.startaddrcss=frccbk)ckj+l.s
31、tartaddress; frccbl0ckj.sizc=frccbl()ckj+l.si2c;frccblockj.statc=frccbl()ckj+l.statc; frccblockj+l.staruddrcss=middata.startaddrcss; frccblockj+l.sizc=middata.sizc;frccblockj+l.statc=middata.statc;for(i=0;iN;i+)*將空表目放在表后面*/for(j=0;jN;j+)if(frccblockj.stale=()&frccblock j+1 . state=1)middata.startadd
32、rcss=& UUbl(Xkj. StarMddruss; middata.sizc = & CCbk)Ck j.size;middata.statc=fr CXblockjsmtc:; frccblocki.startaddrcss=frccbk)ckj+l.startaddress;frccbk)ckj.sizc=frccbl()ck+l.sizc; frccblockj.statc=frccblockj+l.state;frccblockj+l.startaddrcss=middata.startaddrcss;frccblockj+l.sizc=middata.sizc; frccbl
33、ockj+l.statc=middata.statc;/定義打印空閑區(qū)說明表函數(shù):RrintO*/ttfctfc呎 nnn Itri 口 -HPPPVoid Print0n*);IDStartSiZCStatC n);n);for(i=0;icki.startaddress, &uubbcki.si2cr,frcxbl()di .state);Prjntf(”I1 n);/首次Void FirsCfitQint applyarca,start;PrintfetiW輸入作業(yè)的申請呈:”);scanf(,t%d1l,capplyarca);/* 輸入作業(yè)的申請星 */Start=alloc(app
34、lyarca);/*調(diào)用alloc()函數(shù)為作業(yè)分配空間,Start為返回的始地址琢/if(start=-l)*;IlIQCo分配不成功時,返臥 1*/Printf(”作業(yè)申諳長過大,空閑區(qū)表中的存儲空間無法滿足,分配失敗n”);CISCadjust();PrintfC申請作業(yè)的起始地址為start);Printfc 作業(yè)的申諳長為 %dn,aplyarca);PrintfC內(nèi)存分配成功護);/循環(huán)首次VOid Ncxt_fitQint applyarca3=0;Printf(”請輸入作業(yè)的申請長:”);SCiUlf(n%dH,&applyarca);/*輸入作業(yè)的申請星球/ if(i=N-l
35、)i=alloc2(applyarca,i);if(i=-l)i=O;CISC if(iut*動態(tài)分區(qū)分配方式的模擬n;CoUt,* cout* 1)首次適應(yīng)算法2)循環(huán)首次適應(yīng)算法3)舅佳適應(yīng)算法*n,t;CoUtch;int choice; /操作選擇標記CoUtm*1:分配內(nèi)存couichoicc;if(choicc=l) / 分配內(nèi)存int ch;if(ch=l)First_fitO;if(ch=2)Ncxl_fkO;CISCBusi;ClSC if(choicc=2) / 回收內(nèi)存sctfrccO;adjust。;Print0;ClSC if(choicc=3) Print0;/顯示空閑分區(qū)表CISC if(choicc=0) goto loop; /退出ClSC /輸入操作有誤COUtVV”輸入有誤,請重試Wmdl; continue;七、體會與自我評價本次操作系統(tǒng)課程設(shè)計讓我學(xué)握了動態(tài)分區(qū)分配的實質(zhì):動態(tài)分區(qū)分配是根據(jù)進程的實 際需要,動態(tài)地為之分配內(nèi)存空間。分區(qū)管理是滿足多道程序運行的最簡單的存儲管理方式, 為了實現(xiàn)對內(nèi)存空間的有效管理,雷要采取一些方法和策路,用以實現(xiàn)對內(nèi)存空間的分配或 回收。在實現(xiàn)可變分區(qū)分配時,將涉及
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年產(chǎn)品試制協(xié)議樣本(2篇)
- 2025年九年級物理教學(xué)工作上半年總結(jié)(三篇)
- 2025年二年級體育教師工作總結(jié)(2篇)
- 城市廣場石材運輸合同樣本
- 服裝公司辦公樓裝修合同
- 健身房裝修工程合同-@-1
- 展覽館裝修委托合同
- 陽江金平路施工方案
- 2025年度化工安全工程師簡易勞動合同
- 油氣田廢渣運輸服務(wù)協(xié)議
- 課堂精練九年級全一冊數(shù)學(xué)北師大版2022
- 著衣母嬰臥像教學(xué)設(shè)計
- 【課件】DNA片段的擴增及電泳鑒定課件高二下學(xué)期生物人教版(2019)選擇性必修3
- GB/T 6417.1-2005金屬熔化焊接頭缺欠分類及說明
- 2023年湖北成人學(xué)位英語考試真題及答案
- 《社會主義市場經(jīng)濟理論(第三版)》第七章社會主義市場經(jīng)濟規(guī)則論
- 《腰椎間盤突出》課件
- 漢聲數(shù)學(xué)圖畫電子版4冊含媽媽手冊文本不加密可版本-29.統(tǒng)計2500g早教
- simotion輪切解決方案與應(yīng)用手冊
- 柴油發(fā)電機運行檢查記錄表格
- DSC曲線反映PET得結(jié)晶度
評論
0/150
提交評論