該博文參考國嵌視頻和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):即pud3、頁中間目錄( page middle directory):即pmd 頁表的中間層
4、頁表(page table entry):pte
5、頁:即具體物理地址