以上是我只有 512 MB 物理内存的情况。到目前为止,我读到的是 ZONE_NORMAL 映射到内核虚拟地址空间,如图所示。基本上我有一个 512 MB 的物理内存,其中 496 MB 的 ZONE_NORMAL 被映射到内核虚拟空间。基于这种理解,以下是我的问题:
- ZONE_NORMAL 是否仅内核空间页面?
- 如果 ZONE_NORMAL 仅包含内核页面并且被完全映射到内核空间虚拟地址范围,那么用户空间页面位于何处?物理内存中似乎没有用户空间页面的空间。
对于我提出的这个案例中物理内存小于4GB的情况,我完全搞混了。我在这里“错过”了 ZONE_HIGHMEM 吗?它是如何确定的,有多少物理内存进入 ZONE_NORMAL 以及有多少进入 ZONE_HIGHMEM ?
如果有人能阐明这一点,我们将不胜感激。
最佳答案
ZONE_NORMAL 是否仅包含内核空间页面?
===没有。
ZONE_NORMAL 表示线性映射到物理内存。虚拟地址与对应物理地址的偏移量是一个常量值(一般为0xc000,0000)。例如,如果虚拟地址是0xc123,0000,那么它的物理地址就是0x0123,0000。
ZONE_NORMAL 中的页面可以被内核或用户级进程使用,只要它们不相互冲突即可。
ZONE_HIGHMEM 仅在物理内存大于 896MB 时存在。
关于linux-kernel - ZONE_NORMAL 与内核/用户页面的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532228/