内核内存管理全解析
1. 内核内存概述
内核运行操作系统需要内存,用于存储内核代码、数据和数据结构。内核使用虚拟内存,并通过内存管理单元将虚拟地址转换为物理页。内核有自己的地址空间和虚拟内存布局,其大部分内存是非分页的,即“固定”的。这是因为内核在执行操作系统任务时需要确保内存的可用性,若在执行内存管理任务时发生缺页错误,可能会导致死锁。不过,Solaris 允许部分内核组件从可分页内存中分配,主要用于轻量级进程线程栈。
内核内存由物理内存到内核虚拟地址空间的多种映射组成,通过一系列分层的内核内存分配器进行分配。其中, segkmem 内核段驱动用于映射非分页内核内存, segkp 段驱动用于映射可分页内核内存。在支持大页面的平台上,内核的关键和常用部分会从 4MB 大页面进行映射,以提高硬件 TLB 的效率。
2. 内核虚拟内存布局
2.1 内核地址空间
内核虚拟内存布局因平台而异,主要取决于平台的 MMU 架构。除 sun4u 平台外,其他平台的内核使用进程和内核共享的通用虚拟地址空间的顶部 256MB 或 512MB。这种共享方式限制了可用的内核虚拟地址空间大小,在一些较旧的平台上影响较大。而 sun4u 平台的内核有自己的虚拟地址空间上下文,32 位内核的地址空间为 4GB,64 位内核则覆盖整个 64 位地址范围。
内核虚拟地址空间包含以下主要映射:
- 内核代码和数据(内核二进制文件的映射)
- 内核映射空间(数据结构、缓存等)
- 32 位内核映射(仅
超级会员免费看
订阅专栏 解锁全文
1602

被折叠的 条评论
为什么被折叠?



