(1)單一連續(xù)分配
內(nèi)存分為系統(tǒng)區(qū)和用戶區(qū)兩部分:
n系統(tǒng)區(qū):僅提供給OS使用,通常放在內(nèi)存低址部分
n用戶區(qū):除系統(tǒng)區(qū)以外的全部內(nèi)存空間份帐,提供給用戶使用。
u最簡單的一種存儲管理方式,只能用于單用戶碳胳、單任務(wù)的操作系統(tǒng)中。
n優(yōu)點:易于管理沫勿。
n缺點:對要求內(nèi)存空間少的程序挨约,造成內(nèi)存浪費;程序全部裝入产雹,很少使用的程序部分也占用內(nèi)存诫惭。
(2)固定分區(qū)分配
? 把內(nèi)存分為一些大小相等或不等的分區(qū)(partition),每個應(yīng)用進程占用一個分區(qū)蔓挖。操作系統(tǒng)占用其中一個分區(qū)夕土。
u提高:支持多個程序并發(fā)執(zhí)行,適用于多道程序系統(tǒng)和分時系統(tǒng)瘟判。最早的多道程序存儲管理方式怨绣。
劃分為幾個分區(qū),便只允許幾道作業(yè)并發(fā)
u具體實現(xiàn):
1)如何劃分分區(qū)大小
2)需要的數(shù)據(jù)結(jié)構(gòu)
3)分配回收操作
? 1)如何劃分分區(qū)大锌交瘛:
n分區(qū)大小相等:只適合于多個相同程序的并發(fā)執(zhí)行(處理多個類型相同的對象)梨熙。缺乏靈活性。
n分區(qū)大小不等:多個小分區(qū)刀诬、適量的中等分區(qū)咽扇、少量的大分區(qū)邪财。根據(jù)程序的大小,分配當前空閑的质欲、適當大小的分區(qū)树埠。
? 2)需要的數(shù)據(jù)結(jié)構(gòu)
n建立一記錄相關(guān)信息的分區(qū)表(或分區(qū)鏈表),表項有:
|起始位置 | 大小 | 狀態(tài) |
n分區(qū)表中嘶伟,表項值隨著內(nèi)存的分配和釋放而動態(tài)改變
? 3)程序分配內(nèi)存的過程:
p也可將分區(qū)表分為兩個表格:空閑分區(qū)表/占用分區(qū)表怎憋。從而減小每個表格長度。
p檢索算法:空閑分區(qū)表可能按不同分配算法采用不同方式對表項排序(將分區(qū)按大小排隊或按分區(qū)地址高低排序)九昧。
p過程:檢索空閑分區(qū)表绊袋;找出一個滿足要求且尚未分配的分區(qū),分配給請求程序铸鹰;若未找到大小足夠的分區(qū)癌别,則拒絕為該用戶程序分配內(nèi)存。
(3)動態(tài)分區(qū)分配
u?分區(qū)的大小不固定:在裝入程序時根據(jù)進程實際需要蹋笼,動態(tài)分配內(nèi)存空間展姐,即——需要多少劃分多少。
u空閑分區(qū)表項:從1項到n項:
? 內(nèi)存會從初始的一個大分區(qū)不斷被劃分剖毯、回收從而形成內(nèi)存中的多個分區(qū)圾笨。
動態(tài)分區(qū)分配
優(yōu)點:并發(fā)進程數(shù)沒有固定數(shù)的限制逊谋,不產(chǎn)生內(nèi)碎片擂达。
缺點:有外碎片(分區(qū)間無法利用的空間)
具體實現(xiàn):
1)分區(qū)分配中的數(shù)據(jù)結(jié)構(gòu)
2)分區(qū)分配算法
3)分區(qū)分配操作
1)數(shù)據(jù)結(jié)構(gòu)
①空閑分區(qū)表:
?記錄每個空閑分區(qū)的情況。
?每個空閑分區(qū)對應(yīng)一個表目胶滋,包括分區(qū)序號谍婉、分區(qū)始址及分區(qū)的大小等數(shù)據(jù)項。
②空閑分區(qū)鏈:
?每個分區(qū)的起始部分镀钓,設(shè)置用于控制分區(qū)分配的信息,及用于鏈接各分區(qū)的前向指針镀迂;
?分區(qū)尾部則設(shè)置一后向指針丁溅,在分區(qū)末尾重復設(shè)置狀態(tài)位和分區(qū)大小表目方便檢索。
2)分區(qū)分配算法
? 動態(tài)分區(qū)方式探遵,分區(qū)多窟赏、大小差異各不相同,此時把一個新作業(yè)裝入內(nèi)存箱季,更需選擇一個合適的分配算法涯穷,從空閑分區(qū)表/鏈中選出一合適分區(qū)
①首次適應(yīng)算法FF
②循環(huán)首次適應(yīng)算法
③最佳適應(yīng)算法
④最差適應(yīng)算法
⑤快速適應(yīng)算法
3)分區(qū)分配操作
v分配內(nèi)存
v找到滿足需要的合適分區(qū),劃出進程需要的空間
if s<=size藏雏,將整個分區(qū)分配給請求者
if s> size拷况,按請求的大小劃出一塊內(nèi)存空間分配出去,余下部分留在空閑鏈中,將分配區(qū)首址返回給調(diào)用者赚瘦。
v回收內(nèi)存
v進程運行完畢釋放內(nèi)存時粟誓,系統(tǒng)根據(jù)回收區(qū)首址a,在空閑分區(qū)鏈(表)中找到相應(yīng)插入點起意,根據(jù)情況修改空閑分區(qū)信息鹰服,可能會進行空閑分區(qū)的合并:
(4)動態(tài)重定位分區(qū)分配——有緊湊功能的動態(tài)分區(qū)分配
用戶程序在內(nèi)存中移動,將空閑空間緊湊起來提高空間利用率揽咕。但必然需要地址變化悲酷,增加“重定位”工作。
(5)內(nèi)存空間管理之對換
當內(nèi)存空間還是滿足不了需求時亲善,引入“對換”思想:
? 把內(nèi)存中暫時不能運行设易、或暫時不用的程序和數(shù)據(jù)調(diào)到外存上,以騰出足夠的內(nèi)存逗爹;把已具備運行條件的進程和進程所需要的程序和數(shù)據(jù)亡嫌,調(diào)入內(nèi)存。
u按對換單位分類:
?整體對換(或進程對換):以整個進程為單位(連續(xù)分配)
?頁面對換或分段對換:以頁或段為單位(離散分配)