博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux内存管理
阅读量:3942 次
发布时间:2019-05-24

本文共 588 字,大约阅读时间需要 1 分钟。

内核空间分区与管理

参考:

DMA区:即直接内存访问分区,通常为物理内存的起始16M。主要是供一些外设使用,外设和内存直接访问数据访问,而无需系统CPU的参与。
Normal内存区:从16M到896M内存区。
HighMemory内存区:896M以后的内存区。

为什么高端内存的边界是896M?

这是因为,32位Linux虚拟内存空间为0-4G,其中0-3G用于用户态,3G-4G用于内核态。这意味着内核只有1G的虚拟地址空间,如果物理内存超过1G,内核就无法映射了。Linux采取的策略是,内核地址空间的前896M采用固定映射,映射方法是:虚拟地址-3G = 物理地址,只能映射到物理地址的前896M。也就是说内核虚拟地址空间的3G到3G+896M这部分,页表的映射是固定的,系统初始化时就建立起来。而虚拟地址空间的最后128M,也就是3G+896M到4G部分采用动态映射,也就是说页表映射的物理地址可变的。在系统运行过程中,通过更新页表,就可以映射到不同的物理地址,当然也包括高端物理内存。

这主要解决了两个问题:第一,这可以使内核地址空间映射到高端物理内存;第二,虚拟地址空间的3G+896M到4G部分,连续的虚拟地址空间可以映射到非连续的物理内存,只要通过更新页表就可以做到,这和用户态的虚拟内存映射采用了同样这种方法。这在没有大段连续的空闲物理地址时,是非常重要的。

转载地址:http://hanwi.baihongyu.com/

你可能感兴趣的文章
Python有用的命令
查看>>
Python条件语句
查看>>
Python eval()函数
查看>>
Linux rz和sz命令详解
查看>>
Python 集合set
查看>>
Codeforces Round #400 (Div. 1 + Div. 2, combined)D - The Door Problem(2-sat)
查看>>
IDEA中Struts2文件上传时404错误The origin server did not find a current representation for the target resour
查看>>
Perl/Tk 变量追踪及类线程实现
查看>>
1.嵌入式开发环境搭建--虚拟机安装(unbutu)系统
查看>>
2.嵌入式开发环境搭建--(unbutu)系统
查看>>
Linux USB驱动分析之USB2.0协议分析
查看>>
关于iwpriv :no private ioctls 的问题
查看>>
SQL Server Union等操作时解决不同数据库字符集冲突的问题
查看>>
Linq GroupJoin(二)
查看>>
递归:访问页面的控件或文件夹的下文件
查看>>
DataGridView分頁控件
查看>>
Linq 使用entity framework查询视图返回重复记录的问题(转)
查看>>
项目中得到执行文件版本或其它信息
查看>>
WinForm DatagridView绑定大量数据卡顿的问题
查看>>
DataGridView或 DataTable导出到excel
查看>>