(1)單一連續(xù)分配
內(nèi)存分為系統(tǒng)區(qū)和用戶區(qū)兩部分:
系統(tǒng)區(qū):僅提供給OS使用,通常放在內(nèi)存低址部分
用戶區(qū):除系統(tǒng)區(qū)以外的全部內(nèi)存空間,提供給用戶使用。
最簡單的一種存儲管理方式,只能用于單用戶、單任務(wù)的操作系統(tǒng)中。
優(yōu)點(diǎn):易于管理。
缺點(diǎn):對要求內(nèi)存空間少的程序,造成內(nèi)存浪費(fèi);程序全部裝入,很少使用的程序部分也占用內(nèi)存。
(2)固定分區(qū)分配
? 把內(nèi)存分為一些大小相等或不等的分區(qū)(partition),每個(gè)應(yīng)用進(jìn)程占用一個(gè)分區(qū)。操作系統(tǒng)占用其中一個(gè)分區(qū)。
提高:支持多個(gè)程序并發(fā)執(zhí)行,適用于多道程序系統(tǒng)和分時(shí)系統(tǒng)。最早的多道程序存儲管理方式。
劃分為幾個(gè)分區(qū),便只允許幾道作業(yè)并發(fā)
具體實(shí)現(xiàn):
1)如何劃分分區(qū)大小
2)需要的數(shù)據(jù)結(jié)構(gòu)
3)分配回收操作
? 1)如何劃分分區(qū)大小:
分區(qū)大小相等:只適合于多個(gè)相同程序的并發(fā)執(zhí)行(處理多個(gè)類型相同的對象)。缺乏靈活性。
分區(qū)大小不等:多個(gè)小分區(qū)、適量的中等分區(qū)、少量的大分區(qū)。根據(jù)程序的大小,分配當(dāng)前空閑的、適當(dāng)大小的分區(qū)。
2)需要的數(shù)據(jù)結(jié)構(gòu)
建立一記錄相關(guān)信息的分區(qū)表(或分區(qū)鏈表),表項(xiàng)有:
| 起始位置 | 大小 | 狀態(tài) |
分區(qū)表中,表項(xiàng)值隨著內(nèi)存的分配和釋放而動(dòng)態(tài)改變
? 3)程序分配內(nèi)存的過程:
也可將分區(qū)表分為兩個(gè)表格:空閑分區(qū)表/占用分區(qū)表。從而減小每個(gè)表格長度。
檢索算法:空閑分區(qū)表可能按不同分配算法采用不同方式對表項(xiàng)排序(將分區(qū)按大小排隊(duì)或按分區(qū)地址高低排序)。
過程:檢索空閑分區(qū)表;找出一個(gè)滿足要求且尚未分配的分區(qū),分配給請求程序;若未找到大小足夠的分區(qū),則拒絕為該用戶程序分配內(nèi)存。
固定分配的不足:
內(nèi)碎片(一個(gè)分區(qū)內(nèi)的剩余空間)造成浪費(fèi)
分區(qū)總數(shù)固定,限制并發(fā)執(zhí)行的程序數(shù)目。
(3)動(dòng)態(tài)分區(qū)分配
分區(qū)的大小不固定:在裝入程序時(shí)根據(jù)進(jìn)程實(shí)際需要,動(dòng)態(tài)分配內(nèi)存空間,即——需要多少劃分多少。
空閑分區(qū)表項(xiàng):從1項(xiàng)到n項(xiàng):
? 內(nèi)存會從初始的一個(gè)大分區(qū)不斷被劃分、回收從而形成內(nèi)存中的多個(gè)分區(qū)。
動(dòng)態(tài)分區(qū)分配
優(yōu)點(diǎn):并發(fā)進(jìn)程數(shù)沒有固定數(shù)的限制,不產(chǎn)生內(nèi)碎片。
缺點(diǎn):有外碎片(分區(qū)間無法利用的空間)
具體實(shí)現(xiàn):
1)分區(qū)分配中的數(shù)據(jù)結(jié)構(gòu)
2)分區(qū)分配算法
3)分區(qū)分配操作
1)數(shù)據(jù)結(jié)構(gòu)
①空閑分區(qū)表:
?記錄每個(gè)空閑分區(qū)的情況。
?每個(gè)空閑分區(qū)對應(yīng)一個(gè)表目,包括分區(qū)序號、分區(qū)始址及分區(qū)的大小等數(shù)據(jù)項(xiàng)。
②空閑分區(qū)鏈:
?每個(gè)分區(qū)的起始部分,設(shè)置用于控制分區(qū)分配的信息,及用于鏈接各分區(qū)的前向指針;
?分區(qū)尾部則設(shè)置一后向指針,在分區(qū)末尾重復(fù)設(shè)置狀態(tài)位和分區(qū)大小表目方便檢索。
2)分區(qū)分配算法
? 動(dòng)態(tài)分區(qū)方式,分區(qū)多、大小差異各不相同,此時(shí)把一個(gè)新作業(yè)裝入內(nèi)存,更需選擇一個(gè)合適的分配算法,從空閑分區(qū)表/鏈中選出一合適分區(qū)
①首次適應(yīng)算法FF
②循環(huán)首次適應(yīng)算法
③最佳適應(yīng)算法
④最差適應(yīng)算法
⑤快速適應(yīng)算法
3)分區(qū)分配操作
分配內(nèi)存
找到滿足需要的合適分區(qū),劃出進(jìn)程需要的空間
s<=size,將整個(gè)分區(qū)分配給請求者
s> size,按請求的大小劃出一塊內(nèi)存空間分配出去,余下部分留在空閑鏈中,將分配區(qū)首址返回給調(diào)用者。
回收內(nèi)存
進(jìn)程運(yùn)行完畢釋放內(nèi)存時(shí),系統(tǒng)根據(jù)回收區(qū)首址a,在空閑分區(qū)鏈(表)中找到相應(yīng)插入點(diǎn),根據(jù)情況修改空閑分區(qū)信息,可能會進(jìn)行空閑分區(qū)的合并: