11、Windows API 記憶體管理(1)

來源:互聯網
上載者:User

一、相關概念

1、記憶體主要儲存程式運行時所需的機器代碼、資料等內容。

    記憶體的最小儲存單元是位元組,記憶體中的每一個位元組都有一個地址。在32位系統上,使用32位的數來表示記憶體位址,因此一共可以表示232 (4294967296-4G)個位元組。

2、地址

(1)地址空間。

    系統中所有可用的記憶體位址的集合稱為地址空間。比如,如果可以使用4GB的記憶體,那麼其地址空間就是0x00000000~0xFFFFFFFF。

(2)實體記憶體。

    硬體系統中真實存在的儲存空間稱為實體記憶體,實體記憶體的訪問通過硬體系統匯流排進行的。

    但不是每台32位的機器都具有4GB的物理地址空間,因此物理地址空間不一定是0x00000000~0xFFFFFFFF,比如在實體記憶體為1GB的系統上,就可能只有0x00000000~0x3FFFFFFF的地址可以使用。

(3)虛擬位址空間。

    為了訪問記憶體的統一和方便,作業系統允許其上啟動並執行程式訪問所有的4GB記憶體空間中的地址。因此作業系統必須進行一些必要的地址轉換工作,將程式訪問的地址轉換為實體記憶體中的真實物理地址,然後進行資料的存取。作業系統進行轉換後,供程式使用的地址空間稱為虛擬位址空間。在32位系統上,可以使用的虛擬位址空間大小是4GB。

    當然,由於虛擬位址空間可能比真實物理地址空間大,系統會將部分虛擬位址空間中的地址轉換為硬碟中的資料,在必要時將實體記憶體中的資料與硬碟中的資料進行交換。

    這種地址轉換和資料交換是通過分頁和分段機制實現的。

(4)進程的記憶體空間:使用者記憶體空間與核心記憶體空間。

    Windows作業系統中的每個進程都有屬於自己的虛擬位址空間。32位的Window作業系統將4GB(在64位系統上,這個值達到了8TB)的虛擬記憶體劃分為兩個部分,進程使用2GB,稱為使用者進程空間;核心使用2GB,稱為系統地址空間或核心地址空間(也可設定為使用者進程空間使用3GB,核心使用1GB,這裡只討論各為2GB的情況),使用者空間的位址範圍為0x00000000~0x7FFFFFFF,核心空間的位址範圍為0x80000000~0xFFFFFFFF。虛擬位址空間在進程上是封閉的,進程只能訪問屬於自己的地址空間,如果要訪問其他進程的地址空間需特殊的機制。

3、分頁與分段記憶體管理、記憶體映射與地址轉換

32位地址的高10位稱為頁目錄索引(Directory)、次10位稱為頁表索引(Table),餘下的12位為位移(Offset)。如果只取前兩個部分的20位,末位補0,那麼其可能指向的地址都是4KB( 212)對齊的,也就是頁的基地址。所以32位中的前20位定位了頁的基地址(PFN),而最後12位是地址在頁內的位移。

相當於先選定那本書,再選定那本書的頁數,再選中頁中的那行。

    在地址轉換的過程中,還涉及一個關鍵的系統寄存器CR3。CR3寄存器中的高12~32位儲存了頁目錄索引在實體記憶體中的地址。

地址轉換經過了如下過程。

(1)從CR3寄存器的12~32位中取出地址,末位補0,構成一個32位的地址,此地址是頁目錄所在實體記憶體的基地址(因此頁目錄在記憶體中肯定是4KB對齊的)。

(2)以線性地址中的高10位的頁目錄索引(Directory)中資料為位移,加上上一步得到的頁目錄所在實體記憶體的基地址,在頁目錄中找到相應的頁目錄項(PDE)。

(3)頁目錄項中包括了頁表的基地址,線性地址中的頁表索引(Table)是頁表中的位移,找到頁表項(PTE)。

(4)頁表項(PTE)中儲存的是物理地址空間中的頁面的地址(PFN),如果PFN指向的頁面是無效的(不在實體記憶體中),那麼會在系統核心中引起頁錯誤,系統核心會進行頁面調度,將實體記憶體中暫不使用的頁面交換到硬碟中,將硬碟中需要訪問的頁面交換到實體記憶體中,使用PFN指向的頁是有效。

(5)現在已經找到了線性地址所對應的物理地址所在的頁的基址。

(6)在物理頁地址的基礎上,加上線性地址末12位的位移,可得到線性地址與物理地址的對應。

    從中可以看出地址轉換是以頁為單位的,也就是線性地址與所對應的物理地址的頁基地址(PFN)是會變化的,在頁內的位移地址是不會發生變化的。

    每一個頁目錄項對應了一個頁表,一共有210個頁目錄。每一個頁表項對應了一個記憶體分頁,每個頁表是最多可以表示210個頁表。最多一共是多有220個頁。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.