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