arm32 linux 内存分布,linux内存管理笔记(十六)----ARM32内存空间分配

Linux内核一般将处理器的虚拟地址空间分成两部分,在32系统上,地址空间在用户进程和内核之间划分的典型比例为3:1,在给出的4GB的虚拟地址空间中,0 ~ 3GB将用于用户空间而3GB ~ 4GB将用于内核空间,内核提供了相关的配置项来修改该比例,也就是说Kernel最多寻址1GB的虚拟地址空间。当CPU启动MMU后,CPU访问的时虚拟地址空间,然后由MMU根据页表转换成物理地址,页表是由Ker...
摘要由CSDN通过智能技术生成

Linux内核一般将处理器的虚拟地址空间分成两部分,在32系统上,地址空间在用户进程和内核之间划分的典型比例为3:1,在给出的4GB的虚拟地址空间中,0 ~ 3GB将用于用户空间而3GB ~ 4GB将用于内核空间,内核提供了相关的配置项来修改该比例,也就是说Kernel最多寻址1GB的虚拟地址空间。

当CPU启动MMU后,CPU访问的时虚拟地址空间,然后由MMU根据页表转换成物理地址,页表是由Kernel维护的,所以Kernel可以决定1GB的虚拟地址空间具体映射到什么物理地址。但是不管Kernel怎么映射,最多也只能映射1G的物理内存,所以如果一个系统有超过1G的物理内存,在某一时刻,必然有一部分空间是内核无法访问到的,对于该问题内核借助于高端内存(highmem)方法来管理多余的内存,本章的主要讲解以下内容

什么是高端内存及其作用

ARM32 Linux的内存布局

1. 什么是高端内存

对于32系统,内核使用3G ~ 4G的虚拟地址空间,那么只有1G的地址空间可以用来映射物理空间。但是,如果我们使用的内存大于1G的情况,是不是超过1G的内存就无法使用了呢?为此内核引入了一个高端内存的概念,把1G的虚拟地址空间分成两部分

低端内存空间:小于high_memory的物理地址空间,这部分的内存物理地址和3G开始的线性地址是一一映射的,也就是说内核使用的线性地址空间3G ~ (3G + high_memory)和物

理地址空间0 ~ high_memory一一映射

高端内存空间:剩下的128M的线性空间用来映射剩下的大于high_memory的物理地址空间

对于以上,我们可以知道以下问题

对于高端内存high_memory,现在一般是896M,当我们只有512M的内存的时候,就没有高端内存一说了,因为512MB的物理内存已经被kernel直接映射

64位系统下不会有high memory,因为64位虚拟地址空间非常大(分给kernel的也很大),完全能够直接映射全部物理内存。

在32位系统上,没有任何进程能够有效地使用超过3GB的内存。这意味着购买超过4GB的从理论上是发挥不出其优势

对于我们使用的IMX6U,由于使用了CMA,所以其高端内存high_memory的地址空间范围为0xe000 0000 ~ 0xFFFF FFFF(512 MB ~ 1024MB)。那么内核如何借助512M高端内存地址空间实现访问访问所有4GB的物理内存。比如当内核项访问高于Hig

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值