嵌入式linux开发 (十八) 内存管理(2) ARM内存管理

硬件对内存的管理
  • armv7v8
ARM是统一编址的,也就是外设和(内存A)进行统一的编址,共同形成了4G物理地址空间(32位为例子)。
内存控制器属于外设,内存属于(内存A).
一个soc内部及外扩的内存都属于(内存A).
存储器架构
	哈佛架构
  • cortex-M cortex-A
MPU MMU 的概念定义及实现定义
MPU:
	The memory protection unit (MPU) is used to manage the CPU accesses to memory to prevent one task to accidentally corrupt the memory or resources used by any other active task
MMU:
	Complex operating systems typically use a virtual memory system to provide separate, protected address spaces for different processes. 
	Processes are dynamically allocated memory and other memory mapped system resources under the control of a Memory Management Unit (MMU). 
	The MMU allows fine-grained control of a memory system through a set of virtual to physical address mappings and associated memory properties held within one or more structures known as Translation Lookaside Buffers (TLBs) within the MMU. 
  • 具体芯片
定义了内部内存的大小
定义了内存控制器的IP
定义了是否有MPU,是否有MMU
  • 内存控制器
ARM对(内存A)的管理统一编址,其实是通过内存控制器管理的.
内存控制器控制的内存包括所有的(内存A)
	内部内存(sram)
	通过内存控制器所属管脚接GPIO外扩的(1-n片)内存芯片(sram,sdram,ddr sdram,ddr2,ddr3,ddr4,ddr5)

内存控制器给每片芯片(内外部ram)分配了不同的地址范围.

初始化及读写内存
初始化
	对于外部内存,初始化内存控制器即可.
	对于内部内存,无需初始化.(因为在soc生产出来后,内部内存芯片是已知的,所以厂家完全可以硬编码初始化内存控制器)
读写内存
	内存控制器给每片芯片(内外部ram)分配了不同的地址范围.
	如果要读写每片内存的话,例如该内存芯片中有个地址为0x08000000,要写为0x12345678,并将其打印出来,用C语言表示为:: *(volatile unsigned int *)(0x08000000)=0x12345678;: printf("%d\n",*(volatile unsigned int *)(0x08000000));
  • 内存安全控制
MPU与MMU
MPU : 
	将内存分块,给不同的访问权限.
	对代码分块,给不同的访问权限.
	当代码对内存访问时,比较权限关系,从而判定权限是否越界.
MMU : 
	在MPU基础上,增加虚拟地址与物理地址的转换
软件对内存的管理
硬件对多个内存块编码了不同的地址范围.
软件该怎么管理这些地址范围呢?(管理不包括初始化)
根据软件的发展,有不同的管理方式,针对以下分类
MPU-MMU-no
	以cortex-M的STM32F407ZGT6(不使能MPU) 为例
MPU-with
	以cortex-M的STM32F407ZGT6 为例
MMU-With
	s3c2440 和 I.MX6ULL 在这方面一致,以 I.MX6ULL 为例 

其他

----------------------统一编址
ARM是统一编址的,也就是外设和内存进行统一的编址,共同形成了4G物理地址空间(32位为例子)。

----------------------独立编址
独立编址是说,内存和外设分别编址,同样一个32根地址线的处理器,内存可用的地址空间为4G,外设可用的地址空间也为4G.
同样的地址怎么区分是访问内存还是外设呢,独立编址里采用了不同的地址总线来区分是访问内存还是访问外设,也就是说,独立编址就是内存一根总线,外设一根总线,他们互不干涉,通过指令来加以区分,目前主流电脑上一般都采用独立编址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值