一文講解存儲(chǔ)器的分區(qū)內(nèi)存管理與分區(qū)存儲(chǔ)管理
分區(qū)內(nèi)存管理
單一區(qū)存儲(chǔ)管理
定義:用戶區(qū)不分區(qū),完全被一個(gè)程序占用。
優(yōu)點(diǎn):簡單,不需要復(fù)雜的硬件支持
缺點(diǎn):內(nèi)存浪費(fèi),利用率低
分區(qū)存儲(chǔ)管理
定義:把用戶區(qū)劃分為若干大小不等的分區(qū),共不同程序使用。適用單用戶單任務(wù)系統(tǒng)。
①固定分區(qū)
把內(nèi)存固定地劃分為若干個(gè)大小不等的分區(qū)供各個(gè)程序使用,每個(gè)分區(qū)的大小和位置都固定,系統(tǒng)運(yùn)行期間不再重新劃分。
分區(qū)表:為了方便內(nèi)存分配,通常將分區(qū)按大小排好序,并建議一張對(duì)應(yīng)的分區(qū)表,該表包括每個(gè)分區(qū)的起始地址,大小及狀態(tài)。當(dāng)用戶程序裝入內(nèi)存的時(shí)候,依據(jù)用戶程序大小檢索分區(qū)表,從中找出一個(gè)滿足要求的、尚未分配的分區(qū),將之分配給該程序,并將表中該分區(qū)的狀態(tài)改為已分配,若未找到大小滿足的分區(qū),則拒絕分配。

使用特點(diǎn):在程序裝入前,內(nèi)存已被分區(qū),不再改變。每個(gè)分區(qū)大小不同,適應(yīng)大小不同的程序,系統(tǒng)要維護(hù)分區(qū)表,適應(yīng)具有固定任務(wù)數(shù)的多道程序系統(tǒng)。
缺點(diǎn):浪費(fèi)內(nèi)存,程序比所在分區(qū)??;另外大程序可能無法運(yùn)行。
建議:根據(jù)分區(qū)表安排程序裝入順序,使每個(gè)程序都能找到合適的分區(qū)運(yùn)行。
在通用操作系統(tǒng)中,程序的數(shù)量大小都是不確定的,顯然固定分區(qū)不太適合
②動(dòng)態(tài)分區(qū)
定義:在程序裝入的時(shí)候創(chuàng)建分區(qū),使分區(qū)大小與程序的大小相等。
特點(diǎn):分區(qū)動(dòng)態(tài)建立。會(huì)產(chǎn)生內(nèi)存碎片。
需要解決的問題:分區(qū)的分配?分區(qū)的選擇?分區(qū)的回收?解決內(nèi)存碎片問題?
分區(qū)的分配
空閑區(qū)表:描述內(nèi)存空閑區(qū)的位置和大小的數(shù)據(jù)結(jié)構(gòu)

【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!?。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)? ?


分配過程(假定用戶要求的空間是s)
(1)從空閑區(qū)表的第一個(gè)區(qū)開始,尋找大于等于s的空閑區(qū)
(2)找到后從分區(qū)分割出大小為s的部分給用戶使用
(2)分割后的剩余部分作為空閑區(qū)仍登記在空閑區(qū)表中
注意:分割空閑區(qū)時(shí)一般從底部分割,這樣基址不變,容易更新
空閑區(qū)表如何排序——放置策略(空閑區(qū)表排序原則)
(1)按空閑區(qū)位置(首址)遞增排序:首次適應(yīng)算法
(2)按空閑區(qū)位置(首址)遞減排序:沒有用
(3)按分區(qū)大小遞增排序:最佳適應(yīng)算法
(4)按分區(qū)大小遞減排序:最壞適應(yīng)算法
分區(qū)的回收
功能:回收程序釋放分區(qū)(釋放區(qū)),登記到空閑區(qū)表中,以便再分配。
回收算法:要考慮釋放區(qū)與現(xiàn)有空閑區(qū)是否相鄰?若相鄰,則合并后更新表,若不相鄰,直接插入表中。
內(nèi)存覆蓋技術(shù) (覆蓋overlay)(物理內(nèi)存管理范疇)
目的:在較小的內(nèi)存空間中運(yùn)行較大的程序。
內(nèi)存分區(qū):
①常駐區(qū):被某段單獨(dú)且固定地占用,可劃分多個(gè)
②覆蓋區(qū):能被多段共用(覆蓋),可劃分多個(gè)

缺點(diǎn):編程復(fù)雜,程序員劃分程序模塊并確定覆蓋關(guān)系;程序執(zhí)行時(shí)間長,從外存裝入到內(nèi)存很耗時(shí)。
內(nèi)存交換技術(shù)(Swapping)(物理內(nèi)存管理范疇)
原理:內(nèi)存不夠時(shí)把進(jìn)程寫道磁盤(換出/Swap out),當(dāng)進(jìn)程要運(yùn)行時(shí)重新寫回內(nèi)存(換入/Swap 嘔吐)
優(yōu)點(diǎn):增加進(jìn)程并發(fā)數(shù),不考慮程序結(jié)構(gòu)
缺點(diǎn):換入和換出增加CPU開銷,交換單元太大(整個(gè)進(jìn)程)
需要考慮的問題:減少交換傳送的信息量(模塊/段);
①外存交換空間的管理方法;
②程序換入時(shí)的地址重定位。
③換出換入的地址重定位:
放到什么位置?
①原來位置(容易引起地址沖突)
②任一空的位置(地址要重定位)
內(nèi)存碎片

動(dòng)態(tài)分區(qū)的缺點(diǎn):容易產(chǎn)生內(nèi)碎片。
碎片問題的解決方法:
①規(guī)定門限值
分割空閑區(qū)時(shí),若剩余部分小于門限值,則此空閑區(qū)不進(jìn)行分割,而是全部分配給用戶。
②內(nèi)存拼接技術(shù)
將所有空閑區(qū)集中構(gòu)成一個(gè)大的空閑區(qū)。
拼接的時(shí)機(jī):
釋放區(qū)回收的時(shí)候(拼接頻率過大,系統(tǒng)開銷大);
系統(tǒng)找不到足夠大的空閑區(qū)的時(shí)候(空閑區(qū)管理復(fù)雜);
定期(空閑區(qū)管理復(fù)雜)
缺點(diǎn):消耗系統(tǒng)資源;離線拼接(系統(tǒng)需要暫停下來進(jìn)行整理);重新定義作業(yè)。
③解除程序占用連續(xù)內(nèi)存才能運(yùn)行的限制(分頁和分段就是借鑒了這種思想)
把程序分拆為多個(gè)部分裝入到不同分區(qū),充分利用碎片
