【发布时间】:2012-07-18 00:08:01
【问题描述】:
在我读过的关于 Linux 内核中 HIGHMEM 的几乎所有书籍和文章中,他们都说在使用 3:1 拆分时,并非所有 1GB 都可用于内核进行映射。通常它是 896MB 左右,其余的用于内核数据结构、内存映射、页表等。
我的问题是,这些数据结构到底是什么?页表通常是通过页表地址寄存器访问的,对吧?页表的基地址通常存储为物理地址。现在为什么需要为整个表保留一个虚拟地址空间?
同样,我读到内核代码本身占用空间。这与虚拟地址空间有什么关系?不是存储代码会消耗物理内存吗?
最后,这些数据结构为什么要保留 128MB 空间?为什么不能像内核中的任何其他普通数据结构一样,根据需要在整个 1GB 地址空间中使用它们?
我已经阅读了 LDD3、专业 Linux 内核架构和 stack-overflow 上的几篇文章(例如:Why Linux Kernel ZONE_NORMAL is limited to 896 MB?)和一个较旧的 LWN article,但没有找到关于相同的具体信息。
【问题讨论】:
标签: memory-management linux-kernel virtual-memory