PAT(页面属性表Page Attribute Table)
X86的页面属性表(PAT)能够在页面级的粒度上设置内存属性。PAT是对MTRR的补充,通过MTRR可以为物理地址区域设置内存类型。但是PAT比MTRR更灵活,因为它可以在页面级别设置属性,而且硬件上也不限制属性设置的数量。PAT相当灵活,即使多个虚拟内存地址映射到同一个物理内存地址,也不会引起内存类型的冲突。
通过PAT能够设置多种类型的内存属性,其中最常用的有4种:写回(Write-back),不缓存(Uncached),写联合(Write-combined)以及Uncached Minus。
PAT APIs
内核中提供了很多能够在页面级设置内存属性的API。为了避免混淆,需要小心地使用这些接口。下表中列出了这些接口、它们的功能以及它们与内存属性的关系。这些API都使用reserve_memtype()/free_memtype()接口来操作物理地址区域,以避免冲突。
API |
RAM |
ACPI,... |
Reserved/Holes |
ioremap |
-- |
UC- |
UC- |
ioremap_cache |
-- |
WB |
WB |
ioremap_nocache |
-- |
UC- |