2011年11月17日 星期四

Memory Map

上圖擷取自Intel Spec.
以下以Intel Platfrom為例。

左圖是實體記憶體大於4 GB以上,有Remap機制。
右圖是記憶體小於4 GB,無Remap機制發生。

每張圖都有提供兩種觀點,System View與Memory Controller View。
System View為整個系統可以存取的記憶體範圍。
Memory Controller View為實際上Physical Memory的整體分布。

通常TOLUD Base ~ 4 GB這段範圍都被PCI Resource Mapping,所以這塊記憶體位置就被占據了。
因此後來發展了Remap機制,把Reclaim Base ~ Reclaim Limit這段範圍的記憶體將它Mapping至實體記憶體4 GB以下OS invisible Reclaim的位置,以便回收利用那些被PCI Resource所佔據的記憶體。
※TOLUD: Top of Lower Usable DRAM
※TOUUD: Top of Upper Usable DRAM

以下為Reclaim的Pseudo-code:
IF (ADDRESS_IN[38:20] ≥ REMAP_BASE[35:20]) AND
(ADDRESS_IN[38:20] ≤ REMAP_LIMIT[35:20]) THEN

ADDRESS_OUT[38:20] = (ADDRESS_IN[38:20] – REMAP_BASE[35:20]) +
0000000b & TOLUD[31:20]

ADDRESS_OUT[19:0] = ADDRESS_IN[19:0]

ME Base = TOM(Top of Memory,實體記憶體總量)- ME UMA Size。
Reclaim Base = MAX (4GB, ME Base) 看何者為大。
Reclaim Limit = Remap Base + (PCI Resource Total Size - 1);
TOUUD Base = Reclaim Limit + 1。
而TOLUD Base在哪裡則是要看PCI Resource整體分配了多少的空間而定,還有Physical Memory Size而定。

由於Intel Graphics本身沒有獨立的記憶體,所以它使用了Physical Memory當成自己的記憶體,所以這部分並沒有辦法Reclaim回來,可見GFX Stolen與GFX GTT Stolen這兩塊,而T SEG也佔據下面那一塊。

OS存取Reclaim Base ~ Reclaim Limit這段範圍時,它其實是將資料儲存在Physical Memory中OS invisible Reclaim這個地方。
所以支援4 GB以上Memory的OS就可以使用被PCI Resource占據的Memory。
這也是預設的情況下,Windows 32-bit的OS常常只能用到3 GB甚至以下的記憶體。

沒有留言:

張貼留言