ARM架构下Linux内核高低端内存设置解析
需积分: 10 55 浏览量
更新于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 浏览量
314 浏览量
587 浏览量
1700 浏览量
211 浏览量
longqm1984
- 粉丝: 9
- 资源: 5
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析