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