linux內存管理-段式和頁式管理

該博文參考國嵌視頻和http://www.cnblogs.com/image-eye/archive/2011/07/13/2105765.html,在此感謝作者。

一、地址類型

物理地址:CPU通過地址總線的尋址,找到真實的物理內存對應地址。  

邏輯地址:程序代碼經過編譯後出現在 彙編程序中地址。

線性地址(虛擬地址):在32位CPU架構下,可以表示4G的地址空間,用16進製表示就是0x00000000---0Xffff ffff 

他們之間關係?


二、段式管理、頁式管理

2.1段式管理

2.2.1段式管理(16位CPU)

16位CPU內部擁有20位的地址線,它的尋址範圍2^20即1M的內存空間,但是16位CPU用於存放地址的寄存器(IP,sp)只有16位,即只能訪問64K內存空間。

如何使用16地址寄存器訪問1M內存空間??

爲了能夠訪問1M的內存空間,CPU採用內存分段的管理模式,並在CPU內部加入了段寄存器。16位CPU將1M內存空間分爲若干邏輯段,每個邏輯段的要求如下:

1、  邏輯段的起始地址(段地址)必須是16倍數,即最後4個二進制必須全部爲0

2、  邏輯段的最大容量爲64K(why?因爲16位CPU存放地址寄存器只有16位)

物理地址的形成方式:

         由於段地址必須是16倍數,所以值一般形式爲XXXX0H,即前16位二進制是變化的,後四位是固定的0,鑑於段地址的這種特性,可以只保存16位二進制位來保存整個段基地址,所以每次使用時要段寄存器乘以16得到實際段地址。

 

邏輯地址=段基地址:偏移地址

其中:段基地址保存到段寄存器中,偏移地址保存另個寄存器中

線性地址= 段基地址*16+偏移地址

2.2.2段式管理(32位CPU)

在32位CPU兩種工作方式:由實模式和保護模式組成。

1、  實模式:內存管理與 16位CPU是一致的。

2、  保護模式:(一般X86運行模式)

段基地址長達32位,每個段的最大容量可達4G,段寄存器的值時段地址的“選擇器”(selecor),用該“選擇器”從內存中得到一個32位的段地址,存儲單元的

物理地址=該段基地址(Base)+段內偏移地址(offset)


 

2.2頁式管理(分頁管理)

概念

1、  線性地址頁:從管理和效率的角度出發,線性地址被分爲固定長度的組,稱爲頁(page)。例如32位機器,線性地址最大可爲4G,如果用4KB爲頁容量,這樣將線性地址劃分爲2^20個頁。

2、  物理頁:另一類“頁”,稱爲“物理頁”,或者是“頁框、頁幀”。分頁單元把所有的物理內存也劃分爲固定長度的管理單位,它的長度一般與線性地址頁是相同。

如何將兩者之間的映射?通過頁式管理實現映射。



頁式管理具體流程:


說明:

1、  分頁單元中,頁目錄的地址放在CPU的CR3寄存器中,是進行地址轉換的起始點。

2、  每個進程,都有其獨立的虛擬地址空間,運行一個進程,首先需要將它的頁目錄地址放到CR3寄存器中,將其他進程保存下來。

3、  每一個32位的線性地址被劃分三部分:頁目錄索引(10位):頁表索引(10位):偏移(12位)

 

下面是地址轉換的步驟:

第一步:裝入進程的頁目錄地址(操作系統在調度進程時,把這個地址裝入CR3)

第二步:根據線性地址前十位,在頁目錄中,找到對應的索引項 即頁表地址

第三步:根據線性地址中間十位,在頁表中,找到對應的索引項 即頁的起始地址

第四步:將頁的起始地址與線性地址最後12相加,等到物理地址。

 

1、  這樣的二級模式是否支持尋址4G的物理地址空間?爲什麼?

支持。因爲頁目錄支持尋址2^10個頁表,每個頁表支持尋址2^10個頁,每個頁由2^12=4Kbyte組成,即2^10* 2^10*2^12=4Gbyte滿足。

2、  由上圖物理地址的頁容量多大?有什麼決定的?

在二級模式下,頁容量由線性地址[bit11:0]決定,頁容量=2^12=4Kbyte。

根據上面的分段管理和分頁管理,得出下圖


該圖源於/www.cnblogs.com/image-eye/archive/2011/07/13/2105765.html博客

 

三、linux內存管理

Linux內核的設計並沒有全部採用intel所提供的段機制,僅僅是有限度使用了分段機制。這不僅簡化了linux內核的設計,而且爲了把linux移植到其他平臺創造了條件,因爲很多RISC處理器並不支持段機制。

爲什麼是linux內核設計有限度使用分段機制?

因爲linux內核中內存管理中:所有的段的基地址均爲0,即每個段的邏輯地址與線性地址保持一致(即邏輯地址的偏移量值與線性線性的地址值相同),而完成利用了分頁機制

 

         前面介紹的i386的二級頁管理架構,有些CPU使用三級或四級架構。在linux2.6.29內核爲每種CPU提供統一界面,四級頁管理架構,來兼容二級三級 四級管理架構的CPU。四級架構詳見下面:


其中:

1、頁全局目錄(page global directory):多級頁表的抽象最高層

2、頁上級目錄(page upper directory):即pud

3、頁中間目錄( page middle directory):即pmd 頁表的中間層

4、頁表(page table entry):pte

5、頁:即具體物理地址

發佈了51 篇原創文章 · 獲贊 65 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章