Linux高端内存
Linux高端内存是针对物理内存来说的,虚拟内存没有高端这个概念。Linux系统将虚拟内存分为两个部分,即用户地
址空间和内核地址空间,对于32位系统来说,虚拟地址空间为4GB,其中用户空间范围为0-3GB,内核空间范围为
3-4GB。Linux将3GB开始的内核虚拟地址空间的896M地址直接映射到物理地址空间的0-896M,这部分是永久性映
射,剩下的128M则可根据需要进行动态映射,也称临时性映射。如果没有动态映射,那么1GB的内核虚拟地址空间最
多只能访问1GB的物理内存,那么如果物理内存大于1GB,就会有一部分物理内存无法被内核访问到,显然不是我们
想要的。因此,对于32位系统来说,高端物理内存是内核虚拟地址空间后128M可动态映射使内核得以访问的物理内
存,用户空间虚拟地址也是映射到这部分物理内存。下面这个图解释了这一情况:
________________ _____
|Other KernelData|___ | | |
|----------------| | |__| |
| Kernel |\ |____| Real Other |
3 GB --->|----------------| \ | Kernel Data |
| |\ \ | |
| __|_\_\____|__ Real |
| Tasks | \ \ | Tasks |
| __|___\_\__|__ Space |
| | \ \ | |
| | \ \|----------------|
| | \ |Real KernelSpace|
|________________| \|________________|
Logical Addresses Physical Addresses
从上面的图我们可以领悟到,只有在物理内存大小超过了内核虚拟地址空间的时候,才会存在高端内存,否则内核虚
拟地址空间的大小已经使其足够访问所有的物理内存了。
Linux内存管理涉及大量的内容,要深入理解可以搞一些大部头的书籍来阅读。
推荐一些写得比较清晰的文章:
A Clarification on Linux Addressing
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?