上面是一个我只有512 MB物理内存的情况。到目前为止我读到的是,ZONE_NORMAL映射到内核虚拟地址空间,如图所示。基本上我有一个512 MB的物理内存,其中496 MB的ZONE_NORMAL映射到内核虚拟空间。基于这种理解,以下是我的问题:
我完全混淆了物理内存小于4GB的情况,如我所提出的这种情况所示。我在ZONE_HIGHMEM上“错过”了吗?如何确定,物理内存有多少用于ZONE_NORMAL以及有多少用于ZONE_HIGHMEM?
如果有人能够对此有所了解,我将非常感激。
答案 0 :(得分:3)
是否,ZONE_NORMAL只包含内核空间页面?
=== NO。
ZONE_NORMAL表示它被线性映射到物理内存中。虚拟地址和相应的物理地址之间的偏移量是一个常数值(通常为0xc000,0000)。例如,如果虚拟地址为0xc123,0000,则其物理地址为0x0123,0000。
ZONE_NORMAL中的页面可以由内核或用户级进程使用,只要它们不相互冲突即可。
ZONE_HIGHMEM仅在物理内存大于896MB时存在。