實驗三動態(tài)分區(qū)存儲管理方式的主存分配回收實驗三動態(tài)分區(qū)存儲_第1頁
實驗三動態(tài)分區(qū)存儲管理方式的主存分配回收實驗三動態(tài)分區(qū)存儲_第2頁
實驗三動態(tài)分區(qū)存儲管理方式的主存分配回收實驗三動態(tài)分區(qū)存儲_第3頁
實驗三動態(tài)分區(qū)存儲管理方式的主存分配回收實驗三動態(tài)分區(qū)存儲_第4頁
實驗三動態(tài)分區(qū)存儲管理方式的主存分配回收實驗三動態(tài)分區(qū)存儲_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實驗三 動態(tài)分區(qū)存儲管理方式的主存分配回收1實驗?zāi)康纳钊肓私鈩討B(tài)分區(qū)存儲管理方式的主存分配回收的實現(xiàn)。2實驗預(yù)備知識存儲管理中動態(tài)分區(qū)的管理方式。3實驗內(nèi)容編寫程序完成動態(tài)分區(qū)存儲管理方式的主存分配回收的實現(xiàn)。實驗具體包括:首先確定主存空間分配表;然后采用最優(yōu)適應(yīng)算法完成主存空間的分配,完成主存空間的回收;最后編寫主函數(shù)對所作工作進(jìn)程測試。存分配時查找空閑區(qū)進(jìn)行分配,然后填寫已分配區(qū)表,主要操作在空閑區(qū);某個作業(yè)執(zhí)行完后,將該分區(qū)變成空閑區(qū),并將其與相鄰的空閑區(qū)合并,主要操作也在空閑區(qū)。由此可見,主存的分配和回收主要是對空閑區(qū)的操作。這樣為了便于對主存空間的分配和回收,就建立兩張分區(qū)表記錄主存

2、使用情,一張表格記錄作業(yè)占用分區(qū)的“已分配區(qū)表”;一張是記錄空閑區(qū)的“空閑區(qū)表”。這兩張表的實現(xiàn)方法一般有兩種,一種是鏈表形式,一種是順序表形式。在實驗中,采用順序表形式,用數(shù)組模擬。由于順序表的長度必須提前固定,所以無論是“已分配區(qū)表”還是“空閑區(qū)表”都必須事先確定長度。它們的長度必須是系統(tǒng)可能的最大項數(shù),系統(tǒng)運行過程中才不會出錯,因而在多數(shù)情況下,無論是“已分配區(qū)表”還是“空閑區(qū)表”都有空閑欄目。已分配區(qū)表中除了分區(qū)起始地址、長度外,也至少還要有一項“標(biāo)志”,如果是空閑欄目,內(nèi)容為“空”,如果為某個作業(yè)占用分區(qū)的登記項,內(nèi)容為該作業(yè)的作業(yè)名;空閑區(qū)表中除了分區(qū)起始地址、長度外,也要有一項“

3、標(biāo)志”,如果是空閑欄目,內(nèi)容為“空”,如果為某個空閑區(qū)的登記項,內(nèi)容為“未分配”(。在實際系統(tǒng)中,這兩表格的內(nèi)容可能還要多,實驗中僅僅使用上述必須的數(shù)據(jù)。為此,“已分配區(qū)表”和“空閑區(qū)表”在實驗中有如下的結(jié)構(gòu)定義。已分配區(qū)表的定義:#define n 10 /假定系統(tǒng)允許的最大作業(yè)數(shù)量為nstructfloat address; /已分分區(qū)起始地址 float length; /已分分區(qū)長度,單位為字節(jié) int flag; /已分配區(qū)表登記欄標(biāo)志,“0”表示空欄目,實驗中只支持一個字符的作業(yè)名used_tablen; /已分配區(qū)表空閑區(qū)表的定義:#define m 10 /假定系統(tǒng)允許的空閑區(qū)

4、表最大為mstructfloat address; /空閑區(qū)起始地址 float length; /空閑區(qū)長度,單位為字節(jié) int flag; /空閑區(qū)表登記欄標(biāo)志,用“0”表示空欄目,用“1”表示未分配free_tablem; /空閑區(qū)表其中分區(qū)起始地址和長度數(shù)值太大,超出了整型表達(dá)范圍,所以采用了float類型。然后,就要考慮如何在設(shè)計的數(shù)據(jù)表格上進(jìn)行主存的分配。當(dāng)要裝入一個作業(yè)時,從空閑區(qū)表中查找標(biāo)志為“未分配”的空閑區(qū),從中找出一個能容納該作業(yè)的空閑區(qū)。如果找到的空閑區(qū)正好等于該作業(yè)的長度,則把該分區(qū)全部分配給作業(yè)。這時應(yīng)該把該空閑區(qū)登記欄中的標(biāo)志改為“空”,同時在已分配區(qū)表中找到一個

5、標(biāo)志為“空”的欄目登記新裝入作業(yè)所占用分區(qū)的起始地址、長度和作業(yè)名。如果找到的空閑區(qū)大于作業(yè)長度,則把空閑區(qū)分成兩部分,一部分用來裝入作業(yè),另外一部分仍為空閑區(qū)。這時只要修改原空閑區(qū)的長度,且把新裝入的作業(yè)登記到已分配區(qū)表中。實驗中主存分配算法采用“最優(yōu)適應(yīng)”算法。最優(yōu)適應(yīng)算法是按作業(yè)要求挑選一個能滿足作業(yè)要求的最小空閑區(qū),這樣保證可以不去分割一個大的區(qū)域,使裝入大作業(yè)時比較容易得到滿足。但是最優(yōu)適應(yīng)算法容易出現(xiàn)找到的一個分區(qū)可能只比作業(yè)所要求的長度略大一點的情況,這時,空閑區(qū)分割后剩下的空閑區(qū)就很小,這種很小的空閑區(qū)往往無法使用,卻影響了主存的使用。為了一定程度上解決這個問題,如果空閑區(qū)的大

6、小比作業(yè)要求的長度略大一點,不再將空閑區(qū)分成已分分區(qū)和空閑區(qū)兩部分,而是將整個空閑區(qū)分配給作業(yè)。在實現(xiàn)最優(yōu)適應(yīng)算法時,可把空閑區(qū)按長度以遞增方式登記在空閑區(qū)表中。分配時順序查找空閑表,查找到的第一個空閑區(qū)就是滿足作業(yè)要求的最小分區(qū)。這樣查找速度快,但是為使空閑區(qū)按長度以遞增順序登記在空閑表中,就必須在分配回收時進(jìn)行空閑區(qū)表的調(diào)整??臻e區(qū)表調(diào)整時移動表目的代價要高于查詢整張表的代價,所以實驗中不采用空閑區(qū)有序登記在空閑表中的方法。動態(tài)分區(qū)方式的主存分配流程圖如圖2.4所示。最后是動態(tài)分區(qū)方式下的主存回收問題。動態(tài)分區(qū)方式下回收主存空間時,應(yīng)該檢查是否有與歸還區(qū)相鄰的空閑區(qū)。若有,則應(yīng)該合并成一個

7、空閑區(qū)。一個歸還區(qū)可能有上鄰空閑區(qū),也可能有下鄰空閑區(qū),或者既有上鄰空閑區(qū)又有下鄰空閑區(qū),或者既無上鄰空閑區(qū)也無下鄰空閑區(qū)。在實現(xiàn)回收時,首先將作業(yè)歸還的區(qū)域在已分配表中找到,將該欄目的狀態(tài)變?yōu)椤翱铡?,然后檢查空閑區(qū)表中標(biāo)志為“未分配”的欄目,查找是否有相鄰空閑區(qū);最后,合并空閑區(qū),修改空閑區(qū)表。假定作業(yè)歸還的分區(qū)起始地址為s,長度為l,則: 歸還區(qū)有下鄰空閑區(qū)如果s+l正好等于空閑區(qū)表中某個登記欄目(假定為第j欄)的起始地址,則表明歸還區(qū)有一個下鄰空閑區(qū)。這時只要修改第j欄登記項的內(nèi)容:起始地址=s;第j欄長度=第j欄長度+l;則第j欄指示的空閑區(qū)是歸還區(qū)和下鄰空閑區(qū)合并后的大空閑區(qū); 歸還

8、區(qū)有上鄰空閑區(qū)如果空閑區(qū)表中某個登記欄目(假定為第k欄)的“起始地址+長度”正好等于s,則表明歸還區(qū)有一個上鄰空閑區(qū)。這時要修改第k欄登記項的內(nèi)容(起始地址不變):第k欄長度=第k欄長度+l;于是第k欄指示的空閑區(qū)是歸還區(qū)和上鄰空閑區(qū)合并后的大空閑區(qū);2 歸還區(qū)既有上鄰空閑區(qū)又有下鄰空閑區(qū)如果s+l正好等于空閑區(qū)表中某個登記欄目(假定為第j欄)的起始地址,同時還有某個登記欄目(假定為第k欄)的“起始地址+長度”正好等于s,這表明歸還區(qū)既有一個上鄰空閑區(qū)又有一個下鄰空閑區(qū)。此時對空閑區(qū)表的修改如下:第k欄長度=第k欄長度+第j欄長度+l;(第k欄起始地址不變)第j欄狀態(tài)=“空”;(將第j欄登記項

9、刪除)這樣,第k欄指示的空閑區(qū)是歸還區(qū)和上、下鄰空閑區(qū)合并后的大空閑區(qū);原來的下鄰空閑區(qū)登記項(第j欄)被刪除,置為“空”。 2.4 動態(tài)分區(qū)最優(yōu)分配算法流程圖4圖2.5 動態(tài)分區(qū)回收流程圖 歸還區(qū)既無上鄰空閑區(qū)又無下鄰空閑區(qū)如果在檢查空閑區(qū)表時,無上述三種情況出現(xiàn),則表明歸還區(qū)既無上鄰空閑區(qū)又無下鄰空閑區(qū)。這時,應(yīng)該在空閑區(qū)表中查找一個狀態(tài)為“空”的欄目(假定查到的是第t欄),則第t欄的內(nèi)容修改如下:第t欄起始地址=s;第t欄長度=l;第t欄狀態(tài)=“未分配”這樣,第t欄指示的空閑區(qū)是歸還區(qū)。按上述方法歸還主存區(qū)域的流程圖如圖2.5所示。由于是實驗,沒有真正的主存要分配,所以在實驗中,首先應(yīng)建

10、立一張空閑區(qū)表,初始狀態(tài)只有一個空閑登記項(假定的主存空閑區(qū))和一張所有狀態(tài)都為“空”的已分配區(qū)表,假定主存空間110kb,操作系統(tǒng)占用10kb,其余為空閑區(qū);然后,可以選擇進(jìn)行主存分配或主存回收,如果是分配,要求輸入作業(yè)名和所需主存空間大小,如果是回收,輸入回收作業(yè)的作業(yè)名,循環(huán)進(jìn)行主存分配和回收后,如果需要,則顯示兩張表的內(nèi)容,以檢查主存的分配和回收是否正確。4提示與講解動態(tài)分區(qū)管理方式預(yù)先不將主存劃分成幾個區(qū)域,而把主存除操作系統(tǒng)占用區(qū)域外的空間看作一個大的空閑區(qū)。當(dāng)作業(yè)要求裝入主存時,根據(jù)作業(yè)需要的主存空間的大小查詢主存內(nèi)各個空閑區(qū),當(dāng)從主存空間中找到一個大于或等于該作業(yè)大小的主存空閑

11、區(qū)時,選擇其中一個空閑區(qū),按作業(yè)需求量劃出一個分區(qū)裝入該作業(yè)。作業(yè)執(zhí)行完后,它所占的主存分區(qū)被收回,成為一個空閑區(qū)。如果該空閑區(qū)的相鄰分區(qū)也是空閑區(qū),則需要將相鄰空閑區(qū)合并成一個空閑區(qū)。實現(xiàn)動態(tài)分區(qū)的分配和回收,主要考慮的問題有三個:第一,設(shè)計記錄主存使用情況的數(shù)據(jù)表格,用來記錄空閑區(qū)和作業(yè)占用的區(qū)域;第二,在設(shè)計的數(shù)據(jù)表格基礎(chǔ)上設(shè)計主存分配算法;第三,在設(shè)計的數(shù)據(jù)表格基礎(chǔ)上設(shè)計主存回收算法。首先,考慮第一個問題:設(shè)計記錄存分配時查找空閑區(qū)進(jìn)行分配,然后填寫已分配區(qū)表,主要操作在空閑區(qū);某個作業(yè)執(zhí)行完后,將該分區(qū)變成空閑區(qū),并將其與相鄰的空閑區(qū)合并,主要操作也在空閑區(qū)。由此可見,主存的分配和回

12、收主要是對空閑區(qū)的操作。這樣為了便于對主存空間的分配和回收,就建立兩張分區(qū)表記錄主存使用情,一張表格記錄作業(yè)占用分區(qū)的“已分配區(qū)表”;一張是記錄空閑區(qū)的“空閑區(qū)表”。這兩張表的實現(xiàn)方法一般有兩種,一種是鏈表形式,一種是順序表形式。在實驗中,采用順序表形式,用數(shù)組模擬。由于順序表的長度必須提前固定,所以無論是“已分配區(qū)表”還是“空閑區(qū)表”都必須事先確定長度。它們的長度必須是系統(tǒng)可能的最大項數(shù),系統(tǒng)運行過程中才不會出錯,因而在多數(shù)情況下,無論是“已分配區(qū)表”還是“空閑區(qū)表”都有空閑欄目。已分配區(qū)表中除了分區(qū)起始地址、長度外,也至少還要有一項“標(biāo)志”,如果是空閑欄目,內(nèi)容為“空”,如果為某個作業(yè)占用

13、分區(qū)的登記項,內(nèi)容為該作業(yè)的作業(yè)名;空閑區(qū)表中除了分區(qū)起始地址、長度外,也要有一項“標(biāo)志”,如果是空閑欄目,內(nèi)容為“空”,如果為某個空閑區(qū)的登記項,內(nèi)容為“未分配”(。在實際系統(tǒng)中,這兩表格的內(nèi)容可能還要多,實驗中僅僅使用上述必須的數(shù)據(jù)。為此,“已分配區(qū)表”和“空閑區(qū)表”在實驗中有如下的結(jié)構(gòu)定義。已分配區(qū)表的定義:#define n 10 /假定系統(tǒng)允許的最大作業(yè)數(shù)量為nstructfloat address; /已分分區(qū)起始地址 float length; /已分分區(qū)長度,單位為字節(jié) int flag; /已分配區(qū)表登記欄標(biāo)志,“0”表示空欄目,實驗中只支持一個字符的作業(yè)名used_tabl

14、en; /已分配區(qū)表空閑區(qū)表的定義:#define m 10 /假定系統(tǒng)允許的空閑區(qū)表最大為mstructfloat address; /空閑區(qū)起始地址 float length; /空閑區(qū)長度,單位為字節(jié) int flag; /空閑區(qū)表登記欄標(biāo)志,用“0”表示空欄目,用“1”表示未分配free_tablem; /空閑區(qū)表其中分區(qū)起始地址和長度數(shù)值太大,超出了整型表達(dá)范圍,所以采用了float類型。然后,就要考慮如何在設(shè)計的數(shù)據(jù)表格上進(jìn)行主存的分配。當(dāng)要裝入一個作業(yè)時,從空閑區(qū)表中查找標(biāo)志為“未分配”的空閑區(qū),從中找出一個能容納該作業(yè)的空閑區(qū)。如果找到的空閑區(qū)正好等于該作業(yè)的長度,則把該分區(qū)全

15、部分配給作業(yè)。這時應(yīng)該把該空閑區(qū)登記欄中的標(biāo)志改為“空”,同時在已分配區(qū)表中找到一個標(biāo)志為“空”的欄目登記新裝入作業(yè)所占用分區(qū)的起始地址、長度和作業(yè)名。如果找到的空閑區(qū)大于作業(yè)長度,則把空閑區(qū)分成兩部分,一部分用來裝入作業(yè),另外一部分仍為空閑區(qū)。這時只要修改原空閑區(qū)的長度,且把新裝入的作業(yè)登記到已分配區(qū)表中。實驗中主存分配算法采用“最優(yōu)適應(yīng)”算法。最優(yōu)適應(yīng)算法是按作業(yè)要求挑選一個能滿足作業(yè)要求的最小空閑區(qū),這樣保證可以不去分割一個大的區(qū)域,使裝入大作業(yè)時比較容易得到滿足。但是最優(yōu)適應(yīng)算法容易出現(xiàn)找到的一個分區(qū)可能只比作業(yè)所要求的長度略大一點的情況,這時,空閑區(qū)分割后剩下的空閑區(qū)就很小,這種很小

16、的空閑區(qū)往往無法使用,卻影響了主存的使用。為了一定程度上解決這個問題,如果空閑區(qū)的大小比作業(yè)要求的長度略大一點,不再將空閑區(qū)分成已分分區(qū)和空閑區(qū)兩部分,而是將整個空閑區(qū)分配給作業(yè)。在實現(xiàn)最優(yōu)適應(yīng)算法時,可把空閑區(qū)按長度以遞增方式登記在空閑區(qū)表中。分配時順序查找空閑表,查找到的第一個空閑區(qū)就是滿足作業(yè)要求的最小分區(qū)。這樣查找速度快,但是為使空閑區(qū)按長度以遞增順序登記在空閑表中,就必須在分配回收時進(jìn)行空閑區(qū)表的調(diào)整??臻e區(qū)表調(diào)整時移動表目的代價要高于查詢整張表的代價,所以實驗中不采用空閑區(qū)有序登記在空閑表中的方法。動態(tài)分區(qū)方式的主存分配流程圖如圖2.4所示。最后是動態(tài)分區(qū)方式下的主存回收問題。動態(tài)

17、分區(qū)方式下回收主存空間時,應(yīng)該檢查是否有與歸還區(qū)相鄰的空閑區(qū)。若有,則應(yīng)該合并成一個空閑區(qū)。一個歸還區(qū)可能有上鄰空閑區(qū),也可能有下鄰空閑區(qū),或者既有上鄰空閑區(qū)又有下鄰空閑區(qū),或者既無上鄰空閑區(qū)也無下鄰空閑區(qū)。在實現(xiàn)回收時,首先將作業(yè)歸還的區(qū)域在已分配表中找到,將該欄目的狀態(tài)變?yōu)椤翱铡保缓髾z查空閑區(qū)表中標(biāo)志為“未分配”的欄目,查找是否有相鄰空閑區(qū);最后,合并空閑區(qū),修改空閑區(qū)表。假定作業(yè)歸還的分區(qū)起始地址為s,長度為l,則: 歸還區(qū)有下鄰空閑區(qū)如果s+l正好等于空閑區(qū)表中某個登記欄目(假定為第j欄)的起始地址,則表明歸還區(qū)有一個下鄰空閑區(qū)。這時只要修改第j欄登記項的內(nèi)容:起始地址=s;第j欄長

18、度=第j欄長度+l;則第j欄指示的空閑區(qū)是歸還區(qū)和下鄰空閑區(qū)合并后的大空閑區(qū); 歸還區(qū)有上鄰空閑區(qū)如果空閑區(qū)表中某個登記欄目(假定為第k欄)的“起始地址+長度”正好等于s,則表明歸還區(qū)有一個上鄰空閑區(qū)。這時要修改第k欄登記項的內(nèi)容(起始地址不變):第k欄長度=第k欄長度+l;于是第k欄指示的空閑區(qū)是歸還區(qū)和上鄰空閑區(qū)合并后的大空閑區(qū);3 歸還區(qū)既有上鄰空閑區(qū)又有下鄰空閑區(qū)如果s+l正好等于空閑區(qū)表中某個登記欄目(假定為第j欄)的起始地址,同時還有某個登記欄目(假定為第k欄)的“起始地址+長度”正好等于s,這表明歸還區(qū)既有一個上鄰空閑區(qū)又有一個下鄰空閑區(qū)。此時對空閑區(qū)表的修改如下:第k欄長度=第k欄長度+第j欄長度+l;(第k欄起始地址不變)第j欄狀態(tài)=“空”;(將第j欄登記項刪除)這樣,第k欄指示的空閑區(qū)是歸還區(qū)和上、下鄰空閑區(qū)合并后的大空閑區(qū);原來的下鄰空閑區(qū)登記項(第j欄)被刪除,置為“空”。 2.4 動態(tài)分區(qū)最優(yōu)分配算法流程圖6圖2.5 動態(tài)分區(qū)回收流程圖 歸還區(qū)既無上鄰空閑區(qū)又無下鄰空閑區(qū)如果在檢查空閑區(qū)表時,無上述三種情況出現(xiàn),則表明歸還區(qū)既無上鄰空閑區(qū)又無下鄰空閑區(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論