簡單的分頁:記憶體被劃分為許多大小相等的頁框;每個程序被劃分成許多大小與頁框相等的頁;要裝入乙個程序,需要把程序包含的所有頁都裝入記憶體中不一定連續的某些頁框中。優勢:沒有外部碎片。缺點:有少量的內部碎片。
簡單的分段:每個程序被劃分為許多段;要裝入乙個程序,需要把程序中包含的所有段裝入記憶體內不一定連續的某寫動態分割槽中。優勢:沒有內部碎片;相對於動態分割槽提高了記憶體利用率,減少了開銷。缺點:存在外部碎片。
記憶體被劃分為大小固定,相等的塊,且相對比較小,每個程序也被分為分為同樣大小的小塊(頁),那麼程序中稱為頁的塊可以分配到記憶體中稱為頁框的可用塊。
上圖說明了頁和頁框的用法。在某個給定時刻,記憶體中的某些頁框正被使用,某些頁框是空閒的,作業系統維護空閒頁框的列表。儲存在磁碟上的程序a由4頁組成。裝入這個程序時,作業系統查詢4個空閒頁框,並將程序a的4頁裝入這4個頁框中。程序b包含3個頁,程序c包含4個頁,他們一次被裝入。然後程序b被掛起並被換出記憶體。此後,記憶體中的所有程序被阻塞,作業系統需要換入乙個新程序,即d程序,它由5個頁組成。
現在沒有足夠的頁框來儲存程序d,這會足之作業系統載入該程序嗎?答案是否定的,因為可以使用邏輯位址來解決這個問題。這時候僅有乙個簡單的基址暫存器是不夠的,作業系統需要為每個程序維護乙個頁表。頁表給出了該程序的每頁所對應頁框的位置。在程式中,每個開始處的位置,處理器把它轉換為乙個實體地址。在分頁中,邏輯位址到實體地址的轉換任然由處理器硬體完成,且處理器必須知道如何訪問當前程序的頁表。
繼續前面的例子,程序d的5也被裝入頁框4,5,6,11,12。
雖然應用程式操作的物件是對映到物理記憶體上的虛擬記憶體。但是處理器直接操作的卻是物理記憶體。所以當應用程式訪問乙個虛擬位址時,首先必須將虛擬位址轉化成實體地址,然後處理器才能解析位址訪問請求。位址的轉換工作需要通過查詢頁表才能完成,概括的講,位址轉換需要講虛擬位址分段,使每段虛擬位址都作為乙個索引指向頁表,而頁表項則指向下一級別的頁表或者指向最終的物理頁面。
linux中使用**頁表完成位址轉換。利用多級頁表能夠節約位址轉換需占用的存放空間。
記憶體管理 頁表
include asm x86 64 page.h typedef struct pte t typedef struct pmd t typedef struct pud t typedef struct pgd t 虛擬位址分為幾個部分,用作各個頁表的索引。核心使用32或64位型別來表示表項,這...
分頁和頁表
除了分段,空間管理的第二種常見方式是分頁。linux將虛擬記憶體劃分成固定大小的頁 linux中的頁大小是4kb 並且以頁作為操作記憶體的最小單元。例如一次性讀取一頁,虛擬記憶體中的頁稱為虛擬頁。對應的,物理記憶體也會劃分成固定大小的頁來管理,稱為物理頁,也常稱為頁框或頁幀 page frame 物...
作業系統之分頁式記憶體管理1
1.分頁記憶體管理的核心就是 頁面的翻譯。對於任何乙個虛擬頁面,系統要知道該頁面是否在物理記憶體中?如果在的話,對應的物理頁面是哪乙個?如果不在,就會產生乙個缺頁中斷,並將該虛頁從磁碟轉到記憶體,然後將分配給它的物理頁面號返回。虛擬頁面到物理頁面的對映,這個翻譯過程由記憶體管理單元mmu完成。mmu...