linux-kernel - ZONE_NORMAL 与内核/用户页面的关联

标签 linux-kernel kernel arm linux-device-driver embedded-linux

alt text

以上是我只有 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/

相关文章:

unix - 内核 : Dealing with deadlocks in unix

linux - 如何获得正确的 .config 文件来编译特定于我的硬件的 Linux 内核源代码?

linux - Netfilter Hook 注册到网络子系统

c - 我如何判断一个函数是否进入内核

c - ARM Cortex-M3 上的 ELF 重定位

c - 没有硬 float 的 ARM Docker 交叉编译

`fork: retry: No child processes`的原因

Android 设备驱动程序开发 - 切入点

c - 获取 : "unable to handle kernel paging request" when trying to read

c - ptrace 更改系统调用编号 arm64