找回密码
 注册
关于网站域名变更的通知
查看: 740|回复: 1
打印 上一主题 下一主题

容易混淆的arm内存空间、arm地址空间和arm物理内存

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-16 18:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

看过了一些资料,感觉这三个名词容易混淆,以下是我自己的理解。

" i6 _2 {. `0 H- ]$ `* n' ]

ARM与powerpc两种处理器跟x86不同,arm与powerpc一样,它们的外设I/O端口是统一编址的,即与物理内存等外设统一编址在4GB的地址空间中(32为处理器)。而x86是将内存单独编址在一个地址空间,外设I/O端口在另外的地址空间,要访问IO地址空间需要用专门的指令操作。

6 y& l/ I9 k8 P  `: C

因此,“arm内存空间”这种说法是有很大歧义的。到底是实际的物理内存的空间还是arm内核的所有寻址空间。很多csdn blog上的“arm内存空间”的实际意思都是指arm的物理寻址空间,即4GB。

( y% Q, g, ]& ]: k

回到linux的虚拟地址与物理地址的问题。linux的每个进程都有4GB的虚拟地址空间,其中1~3GB是每个进程独占的用户空间,3GB~4GB是所有进程共享的内核空间(0xC0000000~0xFFFFFFFF)。因此虚拟地址空间包括内核空间与用户空间。内核空间作为虚拟地址,是如何跟实际的物理地址产生关系的呢?这就是有MMU来完成这件事情了。linux的实虚地址的转换就是有MMU通过页表的形式完成转换的。linux系统将arm的“物理内存”线性映射到内核空间中。当物理内存的地址空间小于内核空间时,内核空间的低地址空间将物理内存一一线性映射(0xC0000000~high memory),内核空间多出来的虚拟地址空间用来做I/O端口内存映射。当然实际应用中内核空间不可能将物理地址空间“全部霸占”,否则用户空间没有物理地址可用了。这就限制了驱动程序与应用程序的量级,也因此内存大小是制约系统性能的重要因素。当物理内存的地址空间大于内核空间时,系统通过设置的宏来使得high memory成为一个固定小于0xFFFFFFFF的数值,从而内核空间可以留出一部分虚拟地址空间用来进行IO内存映射使用,而实际的物理内存也由于high memory较小而多出空余的内存来,这些内存就可以为系统用来做高端内存使用。

. h" d  Q; o9 g+ [- q+ |4 L

该用户从未签到

2#
发表于 2019-9-17 21:08 | 只看该作者
容易混淆的arm内存空间、arm地址空间和arm物理内存。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-23 22:16 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表