宋新偉
摘要:該文首先介紹了存儲(chǔ)管理中可變分區(qū)的管理方式。通過實(shí)驗(yàn)編寫程序模擬實(shí)現(xiàn)了可變分區(qū)存儲(chǔ)管理方式的內(nèi)存分配和回收。
關(guān)鍵詞:可變分區(qū);存儲(chǔ)管理;內(nèi)存分配;回收
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)12-2880-03
1 存儲(chǔ)管理中可變分區(qū)的管理方式
可變分區(qū)管理方式將內(nèi)存除操作系統(tǒng)占用區(qū)域外的空間看做一個(gè)大的空閑區(qū)。當(dāng)作業(yè)要求裝入內(nèi)存時(shí),根據(jù)作業(yè)需要內(nèi)存空間的大小 查詢內(nèi)存中的各個(gè)空閑區(qū),當(dāng)從內(nèi)存空間中找到一個(gè)大于或等于該作業(yè)大小的內(nèi)存空閑區(qū)時(shí),選擇其中一個(gè)空閑區(qū),按作業(yè)需求量劃出一個(gè)分區(qū)裝人該作業(yè),作業(yè)執(zhí)行完后,其所占的內(nèi)存分區(qū)被收回,成為一個(gè)空閑區(qū)。如果該空閑區(qū)的相鄰分區(qū)也是空閑區(qū),則需要將相鄰空閑區(qū)合并成一個(gè)空閑區(qū)。
2 本實(shí)驗(yàn)的具體實(shí)現(xiàn)
本次實(shí)驗(yàn)的具體內(nèi)容包括:1)建立相關(guān)的數(shù)據(jù)結(jié)構(gòu),作業(yè)控制塊、已分配分區(qū)及未分配分區(qū);2)實(shí)現(xiàn)一個(gè)分區(qū)分配算法,如最先適應(yīng)分配算法、最壞或者最優(yōu)適應(yīng)分配算法;3)實(shí)現(xiàn)一個(gè)分區(qū)回收算法;4)給定一批作業(yè)/進(jìn)程,選擇一個(gè)分配或者回收算法,實(shí)現(xiàn)分區(qū)存儲(chǔ)模擬管理;5)設(shè)計(jì)界面并將所有的模塊整合到一起,形成一個(gè)完整的系統(tǒng)。
2.1 設(shè)計(jì)所采用的算法
采用最壞適應(yīng)算法,每次為作業(yè)分配內(nèi)存時(shí),總是把最大的空閑分區(qū)和所需要的程序塊進(jìn)行比較,如果該塊的大小大于或者等于所需要的內(nèi)存大小,則從該塊中分配出一塊內(nèi)存給程序。
2.2 內(nèi)存分配與回收所使用的結(jié)構(gòu)體
為便于對(duì)內(nèi)存的分配和回收,建立兩張表記錄內(nèi)存的使用情況。一張為記錄作業(yè)占用分區(qū)的“內(nèi)存分配表”,內(nèi)容包括分區(qū)起始地址、長(zhǎng)度、作業(yè)名/標(biāo)志(為0時(shí)作為標(biāo)志位表示空欄目);一張為記錄空閑區(qū)的“空閑分區(qū)表”,內(nèi)容包括分區(qū)起始地址、長(zhǎng)度、標(biāo)志(0表空欄目,1表未分配)。兩張表都采用順序表形式。
2.3 關(guān)于分配留下的內(nèi)存小碎片問題
當(dāng)要裝入一個(gè)作業(yè)時(shí),從“空閑分區(qū)表”中查找標(biāo)志為“1”(未分配)且滿足作業(yè)所需內(nèi)存大小的最小空閑區(qū),若空閑區(qū)的大小與作業(yè)所需大小的差值小于或等于minsize,把該分區(qū)全部分配給作業(yè),并把該空閑區(qū)的標(biāo)志改為“0”(空欄目)。同時(shí),在已分配區(qū)表中找到一個(gè)標(biāo)志為“0”的欄目登記新裝人作業(yè)所占用分區(qū)的起始地址,長(zhǎng)度和作業(yè)名。若空閑區(qū)的大小與作業(yè)所需大小的差值大于minsize。則把空閑區(qū)分成兩部分,一部分用來裝入作業(yè),另外一部分仍為空閑區(qū)。這時(shí)只要修改原空閑區(qū)的長(zhǎng)度,且把新裝人的作業(yè)登記到已分配區(qū)表中。
2.4 內(nèi)存的回收
在可變分區(qū)方式下回收內(nèi)存空間時(shí),先檢查是否有與歸還區(qū)相鄰的空閑區(qū)(上鄰空閑區(qū),下鄰空閑區(qū))。若有,則將它們合件成一個(gè)空閑區(qū)。程序?qū)崿F(xiàn)時(shí),首先將要釋放的作業(yè)在“內(nèi)存分配表”中的記錄項(xiàng)的標(biāo)志改為“0”(空欄目),然后檢查“空閑區(qū)表”中標(biāo)志為‘1(未分配)的欄目,查找是否有相鄰的空閑區(qū),若有,將之合并,并修改空閑區(qū)的起始地址和長(zhǎng)度。
3 數(shù)據(jù)結(jié)構(gòu)
1)塊類結(jié)構(gòu)
public class Kuai{
private int startAddr; //塊的在內(nèi)存中的開始位置
private int size; //塊的大小
private int state=0; //塊的狀態(tài),1表示已分配,0表示未分配
private int runprogram; } //表示該快所運(yùn)行的程序編號(hào)
2)分區(qū)表結(jié)構(gòu)
Public class KuaiBiao()//塊表
{private int memorysize=1000; //系統(tǒng)的內(nèi)存大小,為1000
private List
public KuaiBiao()
{ Kuai kuai=new Kuai();
kuai.setRunprogram(0);
kuai.setSize(1000);
kuai.setStartAddr(0);
this.KuaiList.add(kuai);}}
3)表模型結(jié)構(gòu)
Public class TableModel{
Vector
Vector
4 程序算法
本程序的功能模塊主要為內(nèi)存分配和內(nèi)存回收。首頁是一個(gè)顯示界面,從list 中獲取數(shù)據(jù),將數(shù)據(jù)加入JTable中,顯示出來。首頁有兩個(gè)功能按鈕即:內(nèi)存分配按鈕和內(nèi)存回收按鈕。點(diǎn)擊每個(gè)按鈕執(zhí)行相應(yīng)的功能模塊。當(dāng)點(diǎn)擊內(nèi)存分配按鈕時(shí),會(huì)彈出一個(gè)對(duì)話框,輸入待分配內(nèi)存的大小和指定程序編號(hào),如果輸入的內(nèi)存大小超出最大未分配內(nèi)存的大小,程序會(huì)提示錯(cuò)誤信息。如果想回收某個(gè)內(nèi)存塊,選定該行,點(diǎn)擊回收按鈕,執(zhí)行相應(yīng)的功能,更新JTable表格,完成相應(yīng)功能的顯示。
4.1 內(nèi)存分配模塊算法
內(nèi)存的分配采用最壞適應(yīng)算法(Worst fit)。最壞適應(yīng)分配算法要掃描整個(gè)空閑分區(qū)分割給作業(yè)使用。該算法要求將所有的空閑分區(qū)按其容量以從大到小的順序形成一空閑分區(qū)鏈,查找時(shí)只要看第一個(gè)分區(qū)是否滿足作業(yè)要求。在系統(tǒng)分配內(nèi)存的時(shí)候,每次調(diào)用分配算法,只需要傳遞一個(gè)待分配內(nèi)存的大小和所要運(yùn)行的程序編號(hào),然后通過Util類中的FenPei(int size,int prograid)方法從內(nèi)存表中分配一塊內(nèi)存。FenPei(int size,int prograid)方法每次都會(huì)將塊表中的塊按size大小從大到小排序,遍歷塊表判斷該塊的狀態(tài)是否為空閑,如果該塊狀態(tài)為空閑,則從 該塊中分配出一塊內(nèi)存作為程序運(yùn)行所需要的內(nèi)存。如果該塊的狀態(tài)不為空閑,則繼續(xù)遍歷塊表(KuaiBiao)中的下一個(gè)塊內(nèi)存。
4.2 內(nèi)存回收模塊算法
選擇回收的內(nèi)存塊,當(dāng)點(diǎn)擊回收內(nèi)存時(shí),調(diào)用public List
5 內(nèi)存分配回收實(shí)現(xiàn)部分截圖
1)系統(tǒng)內(nèi)存未分配(如圖1所示)。
6 結(jié)束語
本文通過編寫和調(diào)試存儲(chǔ)管理的模擬程序,加深了對(duì)存儲(chǔ)管理方案的理解,熟悉了對(duì)可變分區(qū)存儲(chǔ)管理的內(nèi)存分配和回收。
參考文獻(xiàn):
[1] 戴銀飛,趙耀紅.可變分區(qū)存儲(chǔ)管理方式的模擬[J].長(zhǎng)春大學(xué)學(xué)報(bào),2005(4):36-38.
[2] 曹剛.大數(shù)據(jù)存儲(chǔ)管理系統(tǒng)面臨挑戰(zhàn)的探討[J].軟件產(chǎn)業(yè)與工程,2013(6):34-38.
[3] 張迎舂,張衛(wèi).虛擬化環(huán)境中的存儲(chǔ)基礎(chǔ)架構(gòu)管理及優(yōu)化方案[J].計(jì)算機(jī)與現(xiàn)代化,2013(10).
[4] 朱愷文,戴麗絲.系統(tǒng)配置參數(shù)通用性存儲(chǔ)管理的設(shè)計(jì)與實(shí)現(xiàn)[J].科技信息,2013(12).
4.2 內(nèi)存回收模塊算法
選擇回收的內(nèi)存塊,當(dāng)點(diǎn)擊回收內(nèi)存時(shí),調(diào)用public List
5 內(nèi)存分配回收實(shí)現(xiàn)部分截圖
1)系統(tǒng)內(nèi)存未分配(如圖1所示)。
6 結(jié)束語
本文通過編寫和調(diào)試存儲(chǔ)管理的模擬程序,加深了對(duì)存儲(chǔ)管理方案的理解,熟悉了對(duì)可變分區(qū)存儲(chǔ)管理的內(nèi)存分配和回收。
參考文獻(xiàn):
[1] 戴銀飛,趙耀紅.可變分區(qū)存儲(chǔ)管理方式的模擬[J].長(zhǎng)春大學(xué)學(xué)報(bào),2005(4):36-38.
[2] 曹剛.大數(shù)據(jù)存儲(chǔ)管理系統(tǒng)面臨挑戰(zhàn)的探討[J].軟件產(chǎn)業(yè)與工程,2013(6):34-38.
[3] 張迎舂,張衛(wèi).虛擬化環(huán)境中的存儲(chǔ)基礎(chǔ)架構(gòu)管理及優(yōu)化方案[J].計(jì)算機(jī)與現(xiàn)代化,2013(10).
[4] 朱愷文,戴麗絲.系統(tǒng)配置參數(shù)通用性存儲(chǔ)管理的設(shè)計(jì)與實(shí)現(xiàn)[J].科技信息,2013(12).
4.2 內(nèi)存回收模塊算法
選擇回收的內(nèi)存塊,當(dāng)點(diǎn)擊回收內(nèi)存時(shí),調(diào)用public List
5 內(nèi)存分配回收實(shí)現(xiàn)部分截圖
1)系統(tǒng)內(nèi)存未分配(如圖1所示)。
6 結(jié)束語
本文通過編寫和調(diào)試存儲(chǔ)管理的模擬程序,加深了對(duì)存儲(chǔ)管理方案的理解,熟悉了對(duì)可變分區(qū)存儲(chǔ)管理的內(nèi)存分配和回收。
參考文獻(xiàn):
[1] 戴銀飛,趙耀紅.可變分區(qū)存儲(chǔ)管理方式的模擬[J].長(zhǎng)春大學(xué)學(xué)報(bào),2005(4):36-38.
[2] 曹剛.大數(shù)據(jù)存儲(chǔ)管理系統(tǒng)面臨挑戰(zhàn)的探討[J].軟件產(chǎn)業(yè)與工程,2013(6):34-38.
[3] 張迎舂,張衛(wèi).虛擬化環(huán)境中的存儲(chǔ)基礎(chǔ)架構(gòu)管理及優(yōu)化方案[J].計(jì)算機(jī)與現(xiàn)代化,2013(10).
[4] 朱愷文,戴麗絲.系統(tǒng)配置參數(shù)通用性存儲(chǔ)管理的設(shè)計(jì)與實(shí)現(xiàn)[J].科技信息,2013(12).