內存管理學習之內存分配和地址重定位


內存的划分分為靜態划分和動態划分。都是連續內存存儲技術,而非連續內存存儲技術有分頁、頁段式分段。

靜態划分預先將物理內存划分為固定分區,當新進程裝進內存,選擇合適的空閑分區分配給進程。又稱為固定分區法,分區的長度可以不同。

管理分區使用分區使用表,表項的內容是分區編號(線性的)、分區大小、分區使用情況。按照分區大小從小到大方式排列。

一種特殊的固定分區法:分頁式划分。將內存划分為很小的頁框,其中頁框遠小於上述的分區。兩者的區別是:固定分區要求進程存進連續的內存空間,而分頁式划分允許進程可以不連續存儲在不同的頁框。頁框的管理使用空閑頁框表,將連續空閑的頁框集中管理。

靜態划分的缺點是會產生大量的內零頭,這些內零頭不能再被使用,因為已經分配給既定的進程了,這樣就大大浪費了內存空間。

為了解決內零頭,可以采用動態划分技術,將真個用戶內存看做整體,動態的將內存划分給需要的進程。

動態分區划分需要一定的划分算法保證外零頭最少,主要的划分算法有:FFA首次適應算法、BFA最佳適應算法、WFA最差適應算法和伙伴分配算法,這就解決了為進程分配內存空間的問題。並不解決是否一次性裝入進程的問題。

FFA算法:查詢空閑分區表,將第一個適合的空閑分區分給進程,若剩余分區大於閾值則作為新的空閑分區更新分區表,否則全部分給進程。該算法的缺點是造成過多的小外零頭,使得進程不能再多裝。

提出一種解決方案:緊湊技術將進程移動全部放在內存的一段,這樣就將外零頭合並,該技術需要采用地址動態重定位技術,又稱為碎片整理技術。

BFA算法:將空閑分區從小到大排列,選擇第一個適合的分區分配給進程,這樣保證外零頭最小。優點是保證不分割大分區,但是形成過多的無法分割的小的外零頭。

WFA算法:將空閑分區從大到小排列,選擇第一個適合的分區分配給進程,這樣保證了外零頭不至於過小能夠再次分割,但是總是分割大分區,使得不能裝下稍微大的進程。

伙伴算法:將靜態分區和動態分區法結合在一起,降低了內零頭和外零頭的浪費。該算法將內存分為2的冪次方,當第一次划分的時候根據分半的方法划分內存,將兩個相鄰的同大小的分區成為兄弟分區,當內存回收的時候可以講兄弟分區合並,這樣分區的大小就可以動態變化。

---------------------------------------------------------------------------------------------------------------------------------------------

地址重定位:靜態重定位和動態重定位

靜態重定位是指在進程裝入內存階段就將進程的邏輯地址轉化為了物理地址,這種方法要求程序必須完整的一次性裝入內存,且進程的位置不能發生改變,及時使用交換技術在換回是仍然要在原始的位置,所以一般交換技術采用動態重定位。

動態重定位是指在進程運行時,每次讀取指令的時候進行動態地址轉換,需要硬件的支持,稱為地址轉換器在cpu中。該過程實在執行期間完成的。

---------------------------------------------------------------------------------------------------------------------------------------------

覆蓋技術是指大的程序無法一次性裝入內存,可以在知道程序的架構的時候按模塊進行覆蓋,原則是不互相調用的同等級的模塊可以相互覆蓋內存區域。運用該方法的前提是明確知道程序的邏輯架構。覆蓋區的長度由覆蓋段的最大長度決定。

---------------------------------------------------------------------------------------------------------------------------------------------

交換技術是將進程的全部或者一部分暫時不用的換出內存緩解內存壓力,一般交換技術用於不連續存儲中,使用動態重定位,因為若使用靜態重定位換出的部分在換入時必須換到原始的位置。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM