記憶體管理方式

2021-07-09 12:03:11 字數 1728 閱讀 3427

記憶體管理方式:塊、段、頁、段頁

頁式管理:頁式管理的基本原理將各程序的虛擬空間劃分成若干個長度相等的頁(page),頁式管理把記憶體空間按頁的大小劃分成片或者頁面(page frame),然後把頁式虛擬位址與記憶體位址建立一一對應頁表,並用相應的硬體位址變換機構,來解決離散位址變換問題。頁式管理採用請求調頁或預調頁技術實現了內外存儲存器的統一管理。 其優點是沒有外碎片,每個內碎片不超過頁大小(空間浪費小)。乙個程式不必連續存放。便於改變程式 用空間的大小(主要指隨著程式執行而動態生成的資料增多,要求位址空間相應增長,通常由系統呼叫完成而不是作業系統自動完成)。 缺點:程式全部裝入記憶體,要求有相應的硬體支援。例如位址變換機構,缺頁中斷的產生和選擇淘汰頁面等都要求有相應的硬體支援。這增 了機器成本。增加了系統開銷,例如缺頁中斷處理機,請求調頁的演算法如選擇不當,有可能產生抖動現象。 雖然消除了碎片,但每個作業或程序的最後一頁內總有一部分空間得不到利用,如果頁面較大,則這一部分的損失仍然較大。
段式管理:基本思想就是把程式按內容或過程(函式)關係分成段,每段有自己的名字。乙個使用者作業或程序所包含的段對應乙個二維線形虛擬空間,也就是乙個二維虛擬儲存器。段式管理程式以段為單位分配記憶體,然後通過位址影射機構把段式虛擬位址轉換為實際記憶體實體地址。 程式通過分段(segmentation)劃分為多個模組,如**段、資料段、共享段。其優點是:可以分別編寫和編譯。 可以針對不同型別的段採取不同的保護(儲存保護容易)。 可以按段為單位來進行共享(儲存共享容易),包括通過動態鏈結進行**共享(能動態連線)。
段頁式管理(最常用):為了實現段頁式管理,系統必須為每個作業或程序建立乙個段表以管理記憶體分配與釋放、缺段處理、儲存保護及位址變換等。另外,由於乙個段又被劃分成了若干頁,每個段又必須建立乙個頁表以把段中的虛頁變換成記憶體中的實際頁面。顯然,與頁式管理時相同,頁表中也要有相應的實現缺頁中斷處理和頁面保護等功能的表項。另外,由於在段頁式管理中,頁表不再是屬於程序而是屬於某個段, 此,段表中應有專項指出該段所對應頁表的頁表始址和頁表長度。  為段頁式管理是段式管理的頁式管理方案結合而成的,所以具有它們二者的優點。但反過來說,由於管理軟體的增 ,複雜性和開銷也就隨之增 了。另外,需要的硬體以及 用的記憶體也有所增 。更重要的是,如果不採用聯想暫存器的方式提高cpu的訪內速度,將會使得執行速度大大下降。
b.程序空間劃分 : 程序空間也被靜態的劃分為若干個等長的區域,每個區域稱為乙個邏輯頁面,其長度與頁框的長度相等。

c.程序空間與記憶體空間的對應關係:當程序執行時,需要將它的各個邏輯頁面儲存到儲存空間的物理頁框中,即需要確定邏輯頁面與頁框的對應關係,程序的邏輯頁面是連續的,但是物理頁面卻不一定是連續的。

d.特點:允許乙個程序占用記憶體空間中多個連續的區域,而這些區域的長度相等,因而採用靜態等長儲存分配的方法,不會產生碎片。

b.程序空間劃分 : 程序空間被靜態的劃分為若干個長度各異的區域,每個區域稱為乙個邏輯段。乙個邏輯段通常對應乙個程式段,各個程式斷的長度使不等的。

c.程序空間與記憶體空間的對應關係:程序的乙個邏輯段與記憶體的乙個物理段相對應。乙個程序的多個邏輯段可存放在記憶體的若干個不相連的物理段中。

d.特點:會產生碎片,但是便於實現共享。

a.記憶體空間劃分 : 與頁式儲存管理相同。

b.程序空間劃分 :與段式儲存管理相同。

c.程序空進與記憶體空間的對應關係:程序空間的乙個邏輯頁面對應記憶體空間的乙個頁框。同一段內的邏輯位址是連續的,而對應的頁框卻未必是連續。

d.特點:既不會產生碎片,又便於共享。

WINDOWS記憶體管理方式

windows記憶體管理方式主要分為 段式管理 頁式管理 段頁式管理。頁式管理 頁式管理的基本原理將各程序的虛擬空間劃分成若干個長度相等的頁 page 頁式管理把記憶體空間按頁的大小劃分成片或者頁面 page frame 然後把頁式虛擬位址與記憶體位址建立一一對應頁表,並用相應的硬體位址變換機構,來...

autoRelease記憶體管理方式

autorelease實際是把release的呼叫延遲了,對於每乙個autorelease,系統只是把該object放入了當 前的autorelease pool中,當該pool被釋放時,該pool中的所有object會被呼叫release。autorelease pool釋放條件 1,手動,2,引...

C 記憶體管理方式

c 中通過new和delete運算子進行動態記憶體管理 如圖 注意 new delete new和delete一定匹配使用 c庫malloc free等來動態管理記憶體,為什麼c 還要定義new delete運算子來動態管理記憶體呢?因為 c語言是面向過程的語言,錯誤返回錯誤碼,c 是物件導向的語言...