資源描述:
《實驗四可變分區(qū)存儲管理方式的內(nèi)存分配和回收》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、實驗四實驗四可變分區(qū)存儲管理方式的內(nèi)存分配和回收一.實驗?zāi)康耐ㄟ^編寫和調(diào)試存儲管理的模擬程序以加深對存儲管理方案的理解,熟悉可變分區(qū)存儲管理的內(nèi)存分配和回收。二.實驗屬性設(shè)計三.實驗內(nèi)容1.確定內(nèi)存空間分配表;2.采用最優(yōu)適應(yīng)算法完成內(nèi)存空間的分配和回收;3.編寫主函數(shù)對所做工作進行測試。四.實驗背景材料實現(xiàn)可變分區(qū)的分配和回收,主要考慮的問題有三個:第一,設(shè)計記錄內(nèi)存使用情況的數(shù)據(jù)表格,用來記錄空閑區(qū)和作業(yè)占用的區(qū)域;第二,在設(shè)計的數(shù)據(jù)表格基礎(chǔ)上設(shè)計內(nèi)存分配算法;第三,在設(shè)計的數(shù)據(jù)表格基礎(chǔ)上設(shè)計內(nèi)存回收算法。首先,考慮第一個問題,設(shè)計記
2、錄內(nèi)存使用情況的數(shù)據(jù)表格,用來記錄空間區(qū)和作業(yè)占用的區(qū)域。由于可變分區(qū)的大小是由作業(yè)需求量決定的,故分區(qū)的長度是預(yù)先不固定的,且分區(qū)的個數(shù)也隨內(nèi)存分配和回收變動??傊?,所有分區(qū)情況隨時可能發(fā)生變化,數(shù)據(jù)表格的設(shè)計必須和這個特點相適應(yīng)。由于分區(qū)長度不同,因此設(shè)計的表格應(yīng)該包括分區(qū)在內(nèi)存中的起始地址和長度。由于分配時空閑區(qū)有時會變成兩個分區(qū):空閑區(qū)和已分分區(qū),回收內(nèi)存分區(qū)時,可能會合并空閑分區(qū),這樣如果整個內(nèi)存采用一張表格記錄己分分區(qū)和空閑區(qū),就會使表格操作繁瑣。分配內(nèi)存時查找空閑區(qū)進行分配,然后填寫己分配區(qū)表,主要操作在空閑區(qū);某個作業(yè)執(zhí)行
3、完后,將該分區(qū)變成空閑區(qū),并將其與相鄰的空閑區(qū)合并,主要操作也在空閑區(qū)。由此可見,內(nèi)存的分配和回收主要是對空閑區(qū)的操作。這樣為了便于對內(nèi)存空間的分配和回收,就建立兩張分區(qū)表記錄內(nèi)存使用情況,一張表格記錄作業(yè)占用分區(qū)的“己分分區(qū)表”;一張是記錄空閑區(qū)的“空閑區(qū)表”。這兩張表的實現(xiàn)方法一般有兩種:一種是鏈表形式,一種是順序表形式。在實驗中,采用順序表形式,用數(shù)組模擬。由于順序表的長度必須提前固定,所以無論是“已分分區(qū)表”還是“空閑區(qū)表”都必須事先確定長度。它們的長度必須是系統(tǒng)可能的最大項數(shù)?!耙逊址謪^(qū)表”的結(jié)構(gòu)定義#definen10//假定
4、系統(tǒng)允許的最大作業(yè)數(shù)量為nstruct{floataddress;//已分分區(qū)起始地址floatlength;//已分分區(qū)長度、單位為字節(jié)intflag;//已分分區(qū)表登記欄標(biāo)志,“0”表示空欄目,實驗中只支持一個字符的作業(yè)名}used_table[n];//已分分區(qū)表“空閑區(qū)表”的結(jié)構(gòu)定義#definem10//假定系統(tǒng)允許的空閑區(qū)最大為mstruct{floataddress;//空閑區(qū)起始地址floatlength;//空閑區(qū)長度、單位為字節(jié)intflag;//空閑區(qū)表登記欄標(biāo)志,“0”表示空欄目,“1”表示未分配}used_tab
5、le[n];//空閑區(qū)表第二,在設(shè)計的數(shù)據(jù)表格基礎(chǔ)上設(shè)計內(nèi)存分配。裝入一個作業(yè)時,從空閑區(qū)表中查找滿足作業(yè)長度的未分配區(qū),如大于作業(yè),空閑區(qū)劃分成兩個分區(qū),一個給作業(yè),一個成為小空閑分區(qū)。實驗中內(nèi)存分配的算法采用“最優(yōu)適應(yīng)”算法,即選擇一個能滿足要求的最小空閑分區(qū)??勺兎謪^(qū)方式的內(nèi)存分配流程如圖。第三,在設(shè)計的數(shù)據(jù)表格基礎(chǔ)上設(shè)計內(nèi)存回收問題。內(nèi)存回收時若相鄰有空閑分區(qū)則合并空閑區(qū),修改空閑區(qū)表??勺兎謪^(qū)方式的內(nèi)存回收流程如圖。五.實驗報告1.寫出你編寫的C語言程序。2.描述可變分區(qū)存儲管理的算法和思路。3.總結(jié)體會可變分區(qū)存儲管理方法。六
6、、參考程序#definen10//假定系統(tǒng)允許的最大作業(yè)數(shù)量為n#definem10//假定系統(tǒng)允許的空閑區(qū)最大為m#defineminisize100struct{floataddress;//已分分區(qū)起始地址floatlength;//已分分區(qū)長度、單位為字節(jié)intflag;//已分分區(qū)表登記欄標(biāo)志,“0”表示空欄目,實驗中只支持一個字符的作業(yè)名}used_table[n];//已分分區(qū)表struct{floataddress;//空閑區(qū)起始地址floatlength;//空閑區(qū)長度、單位為字節(jié)intflag;//空閑區(qū)表登記欄標(biāo)志,
7、“0”表示空欄目,“1”表示未分配}used_table[n];//空閑區(qū)表allocate(J,xk)//采用最優(yōu)分配算法分配xk大小的空間charJ;floatxk;{inti,k;floatad;k=-1;for(i=0;i=xk&&free_table[i].flag==1)if(k==-1
8、
9、free_table[i].length10、ntf("無可用的空閑區(qū)");return;}//找到可用空閑區(qū),開始分配;若空閑區(qū)大小與要求分配的空間差小于minisize大小,則空閑區(qū)全部分配;//若空閑區(qū)大小與要求分配的空間差大于