Amu*_*umu 3 linux kernel memory
每个进程有2个内存区域:用户空间(高内存)和内核空间(低内存)。在内核空间中,前 896 MB 是否用于映射内核代码(不完全是 1 GB)?这意味着,当用户空间应用程序执行系统调用或与内核相关的任何事情时,内核会引用内核空间来执行系统调用,是吗?
内核空间预留的128MB(用于高端内存(用户空间)访问),是不是都是用户空间内存区域的引用?那么,内核进程可以通过引用这个区域来访问任何用户空间,这是真的吗?
这就是为什么这个区域在内核空间中被称为 highmem 的原因,不是吗?
“高内存”和“低内存”不适用于进程的虚拟地址空间,而是关于物理内存。
在进程的虚拟地址空间中,用户空间占据这个线性地址空间的前3GB,内核空间占据第四GB。
内核空间的前 896MB(不仅是内核代码,还有它的数据)被“直接”映射到物理内存的前 896MB。它是“直接的”,因为在虚拟内核空间的这 896MB 部分的任何线性地址与其在物理内存中的相应地址之间总是存在 0xc0000000 的偏移量(但请注意,MMU 已启用并且页表条目实际上是用于此)。
虚拟内核空间的最后 128MB 部分被映射到物理“高内存”(> 896MB)的一些部分:因此它一次只能映射不超过 128MB 的“高内存”。
参考:“了解 Linux 内核”,第三版 - 部分“8.1.3. 内存区域”和“8.1.6. 高内存页帧的内核映射”。