ARM架构下Linux内核高低端内存设置解析
需积分: 10 179 浏览量
更新于2024-08-31
收藏 93KB DOC 举报
"这篇文档详细介绍了在ARM架构下Linux内核如何在启动过程中设置高低端内存的分界线。文章作者以Linux 3.0版本的内核源码为分析对象,逐步解析了相关代码,主要涉及`init.c`文件中的`__initbootmem_init(void)`函数。
首先,在`__initbootmem_init(void)`函数中,定义了`min`, `max_low`, 和 `max_high`变量来初始化内存限制。接着通过调用`find_limits()`函数找到内存的最小和最大低端内存界限。然后,`arm_bootmem_init(min, max_low)`用于初始化低端内存。这一步骤确保了内核启动时对内存的初步分配。
之后,`arm_memory_present()`函数被调用,它尝试在`memory_present()`中分配启动内存,这部分必须在固定预留内存之后进行。紧接着,`sparse_init()`执行,这个函数需要 bootmem 分配器已经运行,以初始化稀疏内存映射。
在`arm_bootmem_free(min, max_low, max_high)`步骤中,释放了从`min`到`max_low`之间的内存,这是为了`memmap_init_zone()`函数能够正确初始化区域,否则所有的物理页帧号(PFNs)将被视为无效。
最后,`high_memory`被设置为`(__va(((phys_addr_t)max_low<<PAGE_SHIFT)-1)+1)`,这代表了高端内存的起点,它是虚拟地址空间中逻辑地址与虚拟地址分界线减去固定偏移后的地址。这里的`__va()`宏转换物理地址为虚拟地址,`PAGE_SHIFT`是页大小的位移,通常为12,表示4KB页面。
整个过程展示了Linux内核在ARM上如何动态地管理内存,区分出高端和低端内存,为后续的系统运行和内存分配做好准备。这个过程对于理解Linux内核内存管理机制,特别是对ARM平台开发者来说至关重要。"
2022-04-06 上传
2020-03-19 上传
601 浏览量
315 浏览量
587 浏览量
1700 浏览量
211 浏览量
1255 浏览量
longqm1984
- 粉丝: 9
- 资源: 5
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍