![主存空間的分配與回收實(shí)驗(yàn)報(bào)告_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/53e88cdc-81ba-4038-94fa-e2aedbfe8ee9/53e88cdc-81ba-4038-94fa-e2aedbfe8ee91.gif)
![主存空間的分配與回收實(shí)驗(yàn)報(bào)告_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/53e88cdc-81ba-4038-94fa-e2aedbfe8ee9/53e88cdc-81ba-4038-94fa-e2aedbfe8ee92.gif)
![主存空間的分配與回收實(shí)驗(yàn)報(bào)告_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/53e88cdc-81ba-4038-94fa-e2aedbfe8ee9/53e88cdc-81ba-4038-94fa-e2aedbfe8ee93.gif)
![主存空間的分配與回收實(shí)驗(yàn)報(bào)告_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/53e88cdc-81ba-4038-94fa-e2aedbfe8ee9/53e88cdc-81ba-4038-94fa-e2aedbfe8ee94.gif)
![主存空間的分配與回收實(shí)驗(yàn)報(bào)告_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/53e88cdc-81ba-4038-94fa-e2aedbfe8ee9/53e88cdc-81ba-4038-94fa-e2aedbfe8ee95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí) 驗(yàn) 報(bào) 告課程名稱: 操作系統(tǒng) 實(shí)驗(yàn)名稱: 主存空間的分配與回收 學(xué) 號(hào): 110310014 學(xué)生姓名: 于釗 班 級: 信管1101班 指導(dǎo)教師: 吳聯(lián)世 實(shí)驗(yàn)日期: 2013 年12 月 5日1、實(shí)驗(yàn)?zāi)康模?熟悉主存的分配與回收。理解在不同的存儲(chǔ)管理方式下,如何實(shí)現(xiàn)主存空間的分配與回收。掌握動(dòng)態(tài)分區(qū)分配方式中的數(shù)據(jù)結(jié)構(gòu)和分配算法及動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式及其實(shí)現(xiàn)過程。2、實(shí)驗(yàn)要求實(shí)驗(yàn)要求使用可變分區(qū)存儲(chǔ)管理方式,分區(qū)分配中所用的數(shù)據(jù)結(jié)構(gòu)采用空閑分區(qū)表和空閑分區(qū)鏈來進(jìn)行,分區(qū)分配中所用的算法采用首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法三種算法來實(shí)現(xiàn)主存的分配與回收。同時(shí),要求設(shè)計(jì)一個(gè)實(shí)
2、用友好的用戶界面,并顯示分配與回收的過程。3、實(shí)驗(yàn)環(huán)境硬件: CPU :AMD QL64 內(nèi)存:2GB 顯卡:ATI 4570 硬盤:日立250G軟件:Windows 2000/XP。 開發(fā)工具:VC+6.0。4、實(shí)驗(yàn)內(nèi)容1)實(shí)現(xiàn)原理主存的分配和回收的實(shí)現(xiàn)是與主存儲(chǔ)器的管理方式有關(guān)的。所謂分配,就是解決多道作業(yè)或多進(jìn)程如何共享主存空間的問題。所謂回收,就是當(dāng)作業(yè)運(yùn)行完成時(shí)將作業(yè)或進(jìn)程所占的主存空間歸還給系統(tǒng)。可變分區(qū)管理是指在處理作業(yè)過程中建立分區(qū),使分區(qū)大小正好適合作業(yè)的需求,并且分區(qū)個(gè)數(shù)是可以調(diào)整的。當(dāng)要裝入一個(gè)作業(yè)時(shí),根據(jù)作業(yè)需要的主存量查看是否有足夠的空閑空間,若有,則按需要量分割一個(gè)
3、分區(qū)分配給該作業(yè);若無,則作業(yè)不能裝入,作業(yè)等待。隨著作業(yè)的裝入、完成,主存空間被分成許多大大小小的分區(qū),有的分區(qū)被作業(yè)占用,而有的分區(qū)是空閑的。為了說明那些分區(qū)是空閑的,可以用來裝入新作業(yè),必須有一張空閑說明表例如:010k20k45k65k110k256k操作系統(tǒng)(10KB)作業(yè)1(10KB)作業(yè)4(25KB)空閑區(qū)1(20KB)作業(yè)2(45KB) 空閑區(qū)2(146KB) 空閑區(qū)說明表格式如下: 起始地址長度狀態(tài)第一欄45 K20KB未 分 配第二欄110 K146 KB未 分 配MM 空 表 目
4、60; 空 表 目 MM其中,起址指出一個(gè)空閑區(qū)的主存起始地址,長度指出空閑區(qū)的大小。 長度指出從起始地址開始的一個(gè)連續(xù)空閑的長度。 狀態(tài)有兩種狀態(tài),一種是“未分配”狀態(tài),指出對應(yīng)的由起址指出的某個(gè)長度的區(qū)域是空閑區(qū);另一種是“空表目”狀態(tài),表示表中對應(yīng)的登記項(xiàng)目是空白(無效),可用來登記新的空閑區(qū)(例如,作業(yè)完成后,它所占的區(qū)域就成了空閑區(qū),應(yīng)找一個(gè)“空表目”欄登記歸還區(qū)的起址和長度且修改狀態(tài))。由于分區(qū)的個(gè)數(shù)不定,所以空閑區(qū)說明表中應(yīng)有適量的狀態(tài)為“空表目”的登記欄目,否則造成表格“溢出”無法登記。2、當(dāng)有一個(gè)新作業(yè)要求裝入主存時(shí),必須查空閑區(qū)說明表,從中找
5、出一個(gè)足夠大的空閑區(qū)。有時(shí)找到的空閑區(qū)可能大于作業(yè)需要量,這時(shí)應(yīng)把原來的空閑區(qū)變成兩部分:一部分分給作業(yè)占用;另一部分又成為一個(gè)較小的空閑區(qū),留在空閑區(qū)表中。為了盡量減少由于分割造成的空閑區(qū),盡可能分配低地址部分的空閑區(qū),而盡量保存高地址部分有較大的連續(xù)空閑區(qū)域,以利于大型作業(yè)的裝入。為此,在空閑區(qū)說明表中,把每個(gè)空閑區(qū)按其地址順序從低到高登記,即每個(gè)后繼的空閑區(qū)其起始地址總是比前者大。為了方便查找還可使表格“緊縮”,總是讓“空表目”項(xiàng)留在表格的后部。3、采用最先適應(yīng)算法(順序分配算法)分配主存空間。按照作業(yè)的需要量,查空閑區(qū)說明表,順序查看登記欄,找到第一個(gè)能滿足要求的空閑區(qū)。當(dāng)空閑區(qū)大于需
6、要量時(shí),一部分用來裝入作業(yè),另一部分仍為空閑區(qū)登記在空閑區(qū)說明表中。由于本實(shí)驗(yàn)是模擬主存的分配,所以把主存區(qū)分配給作業(yè)后并不實(shí)際啟動(dòng)裝入程序裝入作業(yè),而用輸出“分配情況”來代替。4、當(dāng)一個(gè)作業(yè)執(zhí)行完成撤離時(shí),作業(yè)所占的分區(qū)應(yīng)該歸還給系統(tǒng),歸還的分區(qū)如果與其它空閑區(qū)相鄰,則應(yīng)合成一個(gè)較大的空閑區(qū),登記在空閑區(qū)說明表中。例如,在上述中列舉的情況下,如果作業(yè)2撤離,歸還所占主存區(qū)域時(shí),應(yīng)與上、下相鄰的空閑區(qū)一起合成一個(gè)大的空閑區(qū)登記在空閑區(qū)說明表中。2)程序結(jié)構(gòu)(流程圖)首次適應(yīng)分配模擬算法主存回收算法3)實(shí)現(xiàn)步驟實(shí)現(xiàn)動(dòng)態(tài)分區(qū)的分配與回收,主要考慮三個(gè)問題:第一,設(shè)計(jì)記錄主存使用情況的數(shù)據(jù)表格,用來
7、記錄空閑區(qū)和作業(yè)占用的區(qū)域;第二,在設(shè)計(jì)的數(shù)據(jù)表格基礎(chǔ)上設(shè)計(jì)主存分配算法;第三,在設(shè)計(jì)的數(shù)據(jù)表格基礎(chǔ)上設(shè)計(jì)主存回收算法。1 設(shè)計(jì)記錄主存使用情況的數(shù)據(jù)表格由 于動(dòng)態(tài)分區(qū)的大小是由作業(yè)需求量決定的,故分區(qū)的長度是預(yù)先不固定的,且分區(qū)的個(gè)數(shù)也隨主存分配和回收變動(dòng)。總之,所有分區(qū)情況隨時(shí)可能發(fā)生變化,數(shù)據(jù)表 格的設(shè)計(jì)必須和這個(gè)特點(diǎn)相適應(yīng)。由于分區(qū)長度不同,因此設(shè)計(jì)的表格應(yīng)該包括分區(qū)在主存中的起始地址和長度。由于分配時(shí),空閑區(qū)有時(shí)會(huì)變成兩個(gè)分區(qū):空閑區(qū) 和已分分區(qū),回收主存分區(qū)時(shí),可能會(huì)合并空閑區(qū),這樣如果整個(gè)主存采用一張表格記錄已分分區(qū)和空閑區(qū),就會(huì)使表格操作繁瑣。主存分配時(shí)查找空閑區(qū)進(jìn)行分 配,然
8、后填寫已分配區(qū)表,主要操作在空閑區(qū);某個(gè)作業(yè)執(zhí)行完后,將該分區(qū)貶詞空閑區(qū),并將其與相鄰的空閑區(qū)合并,主要操作也在空閑區(qū)。由此可見,主存的分 配與回收主要時(shí)對空閑區(qū)的操作。這樣為了便于對主存空間的分配與回收,就建立兩張分區(qū)表記錄主存的使用情況:“已分配區(qū)表”記錄作業(yè)占用分區(qū),“空閑區(qū) 表”記錄空閑區(qū)。這兩張表的實(shí)現(xiàn)方法一般由兩種:鏈表形式、順序表形式。在本實(shí)驗(yàn)中,采用順序表形式,用數(shù)組模擬。由于順序表的長度必須提前固 定,所以無論是“已分配區(qū)表”還是“空閑區(qū)表”都必須事先確定長度。它們的長度必須是系統(tǒng)可能的最大項(xiàng)數(shù),系統(tǒng)運(yùn)行過程中才不會(huì)出錯(cuò),因此在多數(shù)情況下, 無論是“已分配表區(qū)”還是“空閑區(qū)表
9、”都是空閑欄目。已分配區(qū)表中除了分區(qū)起始地址、長度外,也至少還有一項(xiàng)“標(biāo)志”,如果是空閑欄目,內(nèi)容為“空”,如 果為某個(gè)作業(yè)占用分區(qū)的登記項(xiàng),內(nèi)容為該作業(yè)的作業(yè)名;空閑區(qū)表除了分區(qū)起始地址、長度外,也要有一項(xiàng)“標(biāo)志”,如果是空閑欄目,內(nèi)容為“空”,如果為某 個(gè)空閑區(qū)的登記項(xiàng),內(nèi)容為“未分配”。在實(shí)際系統(tǒng)中,這兩個(gè)表格的內(nèi)容可能還要多,實(shí)驗(yàn)中僅僅使用上述必須的數(shù)據(jù)。為此,“已分配區(qū)表”和“空閑區(qū)表”在 實(shí)驗(yàn)中有如下的結(jié)構(gòu)定義。已分配區(qū)表的定義:#define n 10 /假定系統(tǒng)允許的最大作業(yè)數(shù)量為nstruct float address; /已分分區(qū)起始地址 float length; /已
10、分分區(qū)長度,單位為字節(jié) int flag; /已分配表區(qū)登記欄標(biāo)志,用0表示空欄目,used_tablen; /已分配區(qū)表空閑區(qū)表的定義:#define m 10 /假定系統(tǒng)允許的空閑區(qū)表最大為mstruct float address; /空閑區(qū)起始地址 float length; /空閑區(qū)長度,單位為字節(jié) int flag; /空閑區(qū)表登記欄目用0表示空欄目,1表示未分配?free_tablem; /空閑區(qū)表其中分區(qū)起始地址和長度數(shù)值太大,超出了整形表達(dá)范圍,所有采用float類型。2 在設(shè)計(jì)的表格上進(jìn)行主存分配當(dāng) 要裝入一個(gè)作業(yè)時(shí),從空閑區(qū)表中查找標(biāo)志為“未分配”的空閑區(qū),從中找一個(gè)能容
11、納該作業(yè)的空閑區(qū)。如果找到的空閑區(qū)正好等于該作業(yè)的長度,則把該分區(qū)全部 分配給該作業(yè)。這時(shí)應(yīng)該把該空閑區(qū)登記欄中的標(biāo)志改為“空”,同時(shí)在已分配區(qū)表中找到一個(gè)標(biāo)志為“空”的欄目登記新裝入作業(yè)所占用分區(qū)的起始地址、長度和 作業(yè)名。如果找到的空閑區(qū)大于作業(yè)長度,則把空閑區(qū)分成兩部分,一部分用來裝入作業(yè),另一部分你仍然為空閑區(qū),這時(shí)只要修改空閑區(qū)的長度,且把新裝入的作 業(yè)登記到已分配區(qū)表中。主存分配算法目前一般采用三種算法:首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法。本實(shí)驗(yàn)中采用最佳適應(yīng)算法為作業(yè)分配主存。最佳適應(yīng)算法會(huì)出現(xiàn)空閑分區(qū)分割后剩下的空閑分區(qū)很小以至于無法使用的情況,為了在一定程度上解決這
12、個(gè)問題,如果空閑分區(qū)的大小比作業(yè)要求的長度略大一點(diǎn),不再將空閑區(qū)分區(qū)分割成已分分區(qū)和空閑分區(qū)兩部分,而是將整個(gè)空閑區(qū)分配給作業(yè)。 在實(shí)現(xiàn)最佳適應(yīng)算法時(shí),可把空閑分區(qū)按長度遞增方式登記在空閑區(qū)表中。分配時(shí)順序查找空閑表,查找到的第一個(gè)空閑區(qū)就是滿足作業(yè)要求的最小分區(qū)。這樣查找 速度快,但是為使空閑區(qū)按照長度遞增登記在空閑表中,就必須在分配回收時(shí)進(jìn)行空閑區(qū)的調(diào)整??臻e區(qū)表調(diào)整時(shí)移動(dòng)標(biāo)模的代價(jià)要高于查詢整張表的代價(jià),所以實(shí) 驗(yàn)中不采用空閑區(qū)有序登記在空閑表中的方法。3 動(dòng)態(tài)分區(qū)方式下的主存回收 動(dòng)態(tài)分區(qū)方式下回收主存空間時(shí)應(yīng)該檢查是否有與歸還區(qū)相鄰的空閑區(qū)域。若有,則應(yīng)該合并成一個(gè)空閑區(qū)。一個(gè)歸還區(qū)
13、可能有上鄰空閑區(qū),也可能有下鄰空閑區(qū),或者既有上鄰空閑區(qū)又有下鄰空閑區(qū),或者既無上鄰空閑區(qū)也無下鄰空閑區(qū)。 在實(shí)現(xiàn)回收時(shí),首先將作業(yè)歸還的區(qū)域在已分配表中找到,將該欄目的狀態(tài)變?yōu)椤翱铡保缓髾z查空閑區(qū)表中標(biāo)志為“未分配”欄目,查找是否又相鄰空閑區(qū);最后合并空閑區(qū),修改空閑區(qū)表。假定歸還作業(yè)的分區(qū)起始地址為S,長度為L,則:1) 歸還區(qū)又下鄰空閑區(qū)如果SL正好等于空閑區(qū)表中某個(gè)登記欄目(假定為第j欄)的起始地址則表明歸還區(qū)有一個(gè)下鄰空閑區(qū)。這時(shí)候只需要修改第j欄登記項(xiàng)的內(nèi)容: 起始地址S;第j欄長度第j欄長度L則第j欄指示的空閑區(qū)時(shí)歸還區(qū)和下鄰空閑區(qū)合并后的大空閑區(qū)。2) 歸還區(qū)又上鄰空閑區(qū)如果
14、空閑區(qū)表中某個(gè)登記欄目(假定為第k欄)的“起始地址長度”正好等于S,則表明歸還區(qū)有一個(gè)上鄰空閑區(qū)。這時(shí)要修改第k欄登記項(xiàng)的內(nèi)容(起始地址不變): 第k欄長度第k欄長度L;于是第k欄指示的空閑區(qū)是歸還區(qū)和上鄰空閑區(qū)合并后的大空閑區(qū)。3) 歸還區(qū)既有上鄰空閑區(qū)又有下鄰空閑區(qū)如果SL正好等于空閑區(qū)表中某個(gè)登記欄目(假定為第j欄)的起始地址,同時(shí)還有某個(gè)登記欄目(假定為第k欄)的“起始地址長度”正好等于S,這表明歸還區(qū)既有一個(gè)上鄰空閑區(qū)又又一個(gè)下鄰空閑區(qū)。此時(shí)對空閑區(qū)的修改如下: 第k欄的長度第k欄的長度第j欄的長度L;(第k 欄的起始地址不變) 第j欄的狀態(tài)“空”(將第j欄的登記項(xiàng)刪除) 這樣,第k
15、欄指示的空閑區(qū)是歸還區(qū)和上、下鄰空閑區(qū)合并后的大空閑區(qū);原來的下鄰空閑區(qū)登記項(xiàng)(第j欄)被刪除,置為“空”。4) 歸還區(qū)既無上鄰空閑區(qū)又無下鄰空閑區(qū)如果在檢查空閑區(qū)表時(shí),無上述三種情況出現(xiàn),則表明歸還區(qū)既無上鄰空閑區(qū)又無下鄰空閑區(qū)。這時(shí),應(yīng)該在空閑區(qū)表中查找一個(gè)狀態(tài)為“空”的欄目(假定查到的是第t欄),則第t欄的內(nèi)容修改如下: 第t欄起始地址S; 第t欄的長度L; 第t欄的狀態(tài)“未分配”;這樣,第t欄指示的空閑區(qū)是歸還區(qū)。 由于是實(shí)驗(yàn),沒有真正的主存要分配,所有在實(shí)驗(yàn)中,首先應(yīng)建立一張空閑區(qū)表,初始狀態(tài)只有一個(gè)空閑登記項(xiàng)(假定的主存空閑區(qū))和一張所有狀態(tài)都為“空”的 已分配區(qū)表,假定主存空間1
16、00KB,全部為空閑區(qū)(實(shí)際上操作系統(tǒng)需要占用一部分);然后,可以選擇進(jìn)行主存分配或回收,如果是分配,要求輸入作業(yè)名和 所需主存空間大??;如果是回收,輸入回收作業(yè)名;循環(huán)進(jìn)行主存分配和回收后,如果需要,則顯示兩張表的內(nèi)容,以檢查主存的分配和回收是否正確。4)實(shí)驗(yàn)測試及分析:6、實(shí)驗(yàn)心得體會(huì)這次實(shí)驗(yàn)比較復(fù)雜,用了很多時(shí)間,但同時(shí)收獲了很多,對主存空間分配認(rèn)識(shí)加深了很多附錄:源代碼#include<stdio.h>#include<stdlib.h>#define OK 1 /完成#define ERROR 0 /出錯(cuò)typedef int Status;typedef s
17、truct free_table/定義一個(gè)空閑區(qū)說明表結(jié)構(gòu) int num; /分區(qū)序號(hào) long address; /起始地址 long length; /分區(qū)大小 int state; /分區(qū)狀態(tài)ElemType;typedef struct Node/ 線性表的雙向鏈表存儲(chǔ)結(jié)構(gòu) ElemType data; struct Node *prior; /前趨指針 struct Node *next; /后繼指針Node,*LinkList; LinkList first; /頭結(jié)點(diǎn)LinkList end; /尾結(jié)點(diǎn)int flag;/記錄要?jiǎng)h除的分區(qū)序號(hào)Status Initblock()
18、/開創(chuàng)帶頭結(jié)點(diǎn)的內(nèi)存空間鏈表 first=(LinkList)malloc(sizeof(Node); end=(LinkList)malloc(sizeof(Node); first->prior=NULL; first->next=end; end->prior=first; end->next=NULL; end->data.num=1; end->data.address=40; end->data.length=600; end->data.state=0; return OK;void sort()/分區(qū)序號(hào)重新排序 Node *p=
19、first->next,*q; q=p->next; for(;p!=NULL;p=p->next) for(q=p->next;q;q=q->next) if(p->data.num>=q->data.num) q->data.num+=1; /顯示主存分配情況void show() int flag=0;/用來記錄分區(qū)序號(hào) Node *p=first; p->data.num=0; p->data.address=0; p->data.length=40; p->data.state=1; sort(); pri
20、ntf("ntt主存空間分配情況n"); printf("*nn"); printf("分區(qū)序號(hào)t起始地址t分區(qū)大小t分區(qū)狀態(tài)nn"); while(p) printf("%dtt%dtt%d",p->data.num,p->data.address,p->data.length); if(p->data.state=0) printf("tt空閑nn"); else printf("tt已分配nn"); p=p->next; printf(&q
21、uot;*nn");/首次適應(yīng)算法Status First_fit(int request) /為申請作業(yè)開辟新空間且初始化 Node *p=first->next; LinkList temp=(LinkList)malloc(sizeof(Node); temp->data.length=request; temp->data.state=1; p->data.num=1; while(p) if(p->data.state=0)&&(p->data.length=request) /有大小恰好合適的空閑塊 p->data
22、.state=1; return OK; break; else if(p->data.state=0) && (p->data.length>request) /有空閑塊能滿足需求且有剩余 temp->prior=p->prior; temp->next=p; temp->data.address=p->data.address; temp->data.num=p->data.num; p->prior->next=temp; p->prior=temp; p->data.address=te
23、mp->data.address+temp->data.length; p->data.length-=request; p->data.num+=1; return OK; break; p=p->next; return ERROR;/最佳適應(yīng)算法Status Best_fit(int request) int ch; /記錄最小剩余空間 Node *p=first; Node *q=NULL; /記錄最佳插入位置 LinkList temp=(LinkList)malloc(sizeof(Node); temp->data.length=request
24、; temp->data.state=1; p->data.num=1; while(p) /初始化最小空間和最佳位置 if(p->data.state=0) && (p->data.length>=request) ) if(q=NULL) q=p; ch=p->data.length-request; else if(q->data.length > p->data.length) q=p; ch=p->data.length-request; p=p->next; if(q=NULL) return ERR
25、OR;/沒有找到空閑塊 else if(q->data.length=request) q->data.state=1; return OK; else temp->prior=q->prior; temp->next=q; temp->data.address=q->data.address; temp->data.num=q->data.num; q->prior->next=temp; q->prior=temp; q->data.address+=request; q->data.length=ch;
26、q->data.num+=1; return OK; return OK;/最差適應(yīng)算法Status Worst_fit(int request) int ch; /記錄最大剩余空間 Node *p=first->next; Node *q=NULL; /記錄最佳插入位置 LinkList temp=(LinkList)malloc(sizeof(Node); temp->data.length=request; temp->data.state=1; p->data.num=1; while(p) /初始化最大空間和最佳位置 if(p->data.stat
27、e=0 && (p->data.length>=request) ) if(q=NULL) q=p; ch=p->data.length-request; else if(q->data.length < p->data.length) q=p; ch=p->data.length-request; p=p->next; if(q=NULL) return ERROR;/沒有找到空閑塊 else if(q->data.length=request) q->data.length=1; return OK; else t
28、emp->prior=q->prior; temp->next=q; temp->data.address=q->data.address; temp->data.num=q->data.num; q->prior->next=temp; q->prior=temp; q->data.address+=request; q->data.length=ch; q->data.num+=1; return OK; return OK;/分配主存Status allocation(int a) int request;/申
29、請內(nèi)存大小 printf("請輸入申請分配的主存大小(單位:KB):"); scanf("%d",&request); if(request<0 |request=0) printf("分配大小不合適,請重試!"); return ERROR; switch(a) case 1: /默認(rèn)首次適應(yīng)算法 if(First_fit(request)=OK) printf("t*分配成功!*"); else printf("t*內(nèi)存不足,分配失?。?"); return OK;break;
30、 case 2: /選擇最佳適應(yīng)算法 if(Best_fit(request)=OK) printf("t*分配成功!*"); else printf("t*內(nèi)存不足,分配失?。?"); return OK; break;case 3: /選擇最差適應(yīng)算法 if(Worst_fit(request)=OK) printf("t*分配成功!*"); else printf("t*內(nèi)存不足,分配失?。?"); return OK;break; Status deal1(Node *p)/處理回收空間 Node *q=f
31、irst; for(;q!=NULL;q=q->next) if(q=p) if(q->prior->data.state=0&&q->next->data.state!=0) q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=q->prior; q->data.state=0; q->data.num=flag-1; if(q->prior-
32、>data.state!=0&&q->next->data.state=0) q->data.length+=q->next->data.length; q->next=q->next->next; q->next->next->prior=q; q->data.state=0; q->data.num=flag; if(q->prior->data.state=0&&q->next->data.state=0) q->prior->data.
33、length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=q->prior; q->data.state=0; q->data.num=flag-1; if(q->prior->data.state!=0&&q->next->data.state!=0) q->data.state=0; return OK;Status deal2(Node *p)/處理回收空間 Node *q=first; fo
34、r(;q!=NULL;q=q->next) if(q=p) if(q->prior->data.state=0&&q->next->data.state!=0) q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=p->prior; q->data.state=0; q->data.num=flag-1; if(q->prior->data
35、.state!=0&&q->next->data.state=0) q->data.state=0; if(q->prior->data.state=0&&q->next->data.state=0) q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=q->prior; q->data.state=0; q->data.n
36、um=flag-1; if(q->prior->data.state!=0&&q->next->data.state!=0) q->data.state=0; return OK;/主存回收Status recovery(int flag) Node *p=first; for(;p!=NULL;p=p->next) if(p->data.num=flag) if(p->prior=first) if(p->next!=end)/當(dāng)前P指向的下一個(gè)不是最后一個(gè)時(shí) if(p->next->data.state=0) /與后面的空閑塊相連 p->data.length+=p->next->data.length; p->next->next->prior=p; p->next=p->next->next; p->data.state=0; p-&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國數(shù)控自定中心架行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2030年全鋼脈沖電子打火單灶項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年中國紙殼打包機(jī)數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國棉粘色紗數(shù)據(jù)監(jiān)測研究報(bào)告
- 2025至2030年中國光盤承載器數(shù)據(jù)監(jiān)測研究報(bào)告
- 農(nóng)業(yè)機(jī)械租賃設(shè)備保險(xiǎn)規(guī)劃考核試卷
- 2025-2030年手拋彩球網(wǎng)企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 2025-2030年咖啡香濃風(fēng)味堅(jiān)果行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 2025-2030年戶外探險(xiǎn)休閑服裝系列行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 2025-2030年圖書館書籍分類機(jī)器人行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 六安市葉集化工園區(qū)污水處理廠及配套管網(wǎng)一期工程環(huán)境影響報(bào)告書
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第一章運(yùn)動(dòng)技能學(xué)習(xí)與控制概述
- 固體廢棄物檢查記錄
- 工程設(shè)計(jì)費(fèi)取費(fèi)標(biāo)準(zhǔn)
- GB/T 5465.1-2009電氣設(shè)備用圖形符號(hào)第1部分:概述與分類
- 2023年遼寧鐵道職業(yè)技術(shù)學(xué)院高職單招(數(shù)學(xué))試題庫含答案解析
- CAPP教學(xué)講解課件
- 自然環(huán)境的服務(wù)功能課件 高中地理人教版(2019)選擇性必修3
- 小耳畸形課件
- 新人教版初中初三中考數(shù)學(xué)總復(fù)習(xí)課件
- 機(jī)械制造有限公司組織架構(gòu)圖模板
評論
0/150
提交評論