ARMV8架构之memory管理与模型(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xuhuihw/article/details/82912404

一个典型系统的memory map会被分隔成不同的逻辑区域,每个区域都要求有不同的memory属性,比如说:

Access Permission属性定义的在User/Privileged模式下的读写权限. Caching属性定义了该memory空间是否会有副本存在于cache中. Buffering属性定义了访问该memory空间的操作是否能支持提前返回写response.等等. 如图1所示,操作系统OS与应用程序APP的代码一般会被存放在不同的memory空间,而且有不同的访问权限.访问OS需要更高的权限.而外设的memory地址空间一般是uncached的(为什么呢?).各种向量比如中断一般是只读的,不可随意修改.

图1  典型系统的Momory map

系统的物理地址map由Hardware决定,而OS在虚拟地址空间工作,这个虚拟地址空间由软件决定.虚实地址的转换规则由translation table定义.虚拟地址的存在,使得OS对内存的管理更灵活,比如说,一块非连续的物理地址空间,通过页表转换,可以被OS当作是连续的虚拟地址空间进行访问.如图2所示,OS代码与APP的代码可以是非连续的存放在RAM(例如DDR)中,但是在虚拟地址空间却是连续的.

图2 虚拟地址到物理地址的映射

虚拟地址转换为物理地址的过程叫做"table walking",由硬件MMU(memory management unit)实现.MMU处理整个虚实地址转换过程并且缓存页表(translation table),当MMU使能时,所有由Core发出的访问都回经过它,如图3所示.

图3 MMU在系统中的位置

那么如何得到一个物理地址? 

一般来说,core发出的虚拟地址(VA)有64-bit,VA的高位决定了哪一块memory block会被访问,即作为页表的index值.而低位则给出了在该block中的偏移值.MMU将偏移值与translation table中的block物理基地址拼接成为最终的物理地址(PA),如图4所示.

图4 虚实地址转换原理

对于多级translation table,以2级table为例,如图5,第1级表的基地址,由translation table base register(TTBR)配置决定.VA的第一部分bit位(L1 index)寻址.1级表的一个entry可以包含512M memory block的物理基地址,或是指向第2级页表的指针.第2级页表,在1级页表的基础上,将memory空间划分为更小的部分.2级页表由VA的二部分bit位(L2 index)寻址,它包含了指向64K memory block的物理基地址.

图5 2级虚实地址转换

展开阅读全文

没有更多推荐了,返回首页