Windows核心編程 - Windows內存體系結構(2)

1. 地址空間中的區域

        當系統創建一個進程時,該進程的地址空間大部分是閒置的或是尚未分配的。如果想使用這部分地址空間,必須調用VirtualAlloc來分配其中的區域(region),分配區域的操作稱爲預訂(reserving)。

         當應用程序預訂地址空間區域時,系統會確認區域的起始地址正好是分配粒度的整數倍,分配粒度因不現的CPU平臺而不同,目前所有CPU平臺都使用相同的分配粒度,64KB。

        當應用程序預訂地址空間中的一塊區域時,系統會確認區域的大小正好是系統頁面大小的整數倍。頁面是一個內存單元,大小根據不同的CPU而不同,像X86或X64系統的頁面大小爲4KB,而IA-64系統的頁面大小爲8KB。

         當應用程序不再需要訪問所預訂的地址空間區域,應調用VirtualFree來釋放。

2.給區域調拔物理存儲器

        爲了使用所預訂的地址空間區域,還必須分配物理存儲器,並將存儲器映射到所預訂的區域, 這個過程稱爲調拔物理存儲器。物理存儲器始終以頁面爲單位來調拔的,可通過調用VirtualAlloc來將物理存儲器調拔給所預訂的區域。

       當調用物理存儲器給區域時,並不需要給整個區域都調拔物理存儲器,例如可以預訂一塊大小爲64KB的區域,然後把物理存儲器調拔給該區域中的第2個頁面和第4個頁面。

        當不再需要訪問所預訂區域中已調拔的物理存儲器時,應該調用VirtualFree來釋放物理存儲器。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章