历史上的今天
返回首页

历史上的今天

今天是:2024年10月26日(星期六)

2021年10月26日 | ARMv7-A 处理器窥探(3) —— Memory Model

2021-10-26 来源:eefocus

本文参考:


《ARMv7-A_and_R_Architecture_Reference_Manual》 中的 {A3.5 Memory types and attributes and the memory order model}


1、Memory Type

ARMv7-A 处理器中,将 Memory定义为几种类型(Memory Type):


1、Strongly-ordered;


2、Normal;


3、Device;


它的定义如下所示:

注意:这里的 Memory 指的不是内存,可以翻译成储存器,是地址空间的概念;


普通的内存(RAM),只读的内存(ROM),这些都属于 Normal Type 的范畴;


外设和I/O,这些属于 Device 和 Strongly-ordered 范畴;


2、Memory Attributes

对于地址空间来说,每种地址空间,ARMv7-A 使用 attribute 来描述这个存储器地址的属性,总的属性分为两种:


1、shareability;共享属性


2、cacheability;缓存属性


它们描述了存储器是否可以共享,或者是否可以过cache;

2.1、Shareability Attributes

Shareability 共享属性用于描述存储器地址空间是否可以共享;只对 Normal Type 类型和 Device 类型有效;


2.1.1、Normal memory with Shareability

Normal Type 是比较常见的存储器模型,它可以支持读/写或只读,它可以被配置成为 Shareable 或者 Non-Shareable;


在访问 Normal 存储器的时候(比如 DDR),一定要小心内存一致性的问题,因为系统中,常常会开启 cache,并在多核系统中,存在多 CPU 核心访问内存,内存屏障能够起到访问的保序作用,原子操作指令,可以起到访问互斥(LDREX/STREX);


对于 Normal Type 的内存属性描述如下:

当被配置成为 Non-Shareable 的时候,意味着在多核系统中,它只能被一个核心访问;


当配置为 Inner-Shareable 的时候,意味着只能够被单个 CPU cluster 集群访问;


当配置为 Outer-Shareable 的时候,意味着只能够被多个 CPU clusters 集群访问;


2.1.2、Device memory with Shareability

Device 类型存储器地址空间,可以配置为 Shareable(比如多核 CPU 中,UART 外设地址空间是对所有 CPU 共享的);当然,也可以配置为 Non-Shareable;


但是具体实际的设计实现中,不管是配置为 Non-Shareable,还是 Inner-Shareable,还是 Outer-Shareable,都一概视为 Outer-Shareable(毕竟是外设);

2.2、Cacheability Attributes

2.2.1、Normal memory with cacheable

Normal 类型的存储器(比如 DDR)除了有 Shareable 的属性以外,还可以携带 cacheable 的属性:


Write-Through Cacheable:写透型 Cache 属性;


Write-Back Cacheable:回写型 Cache 属性;


Non-cacheable:不带 Cache 属性;


Non-Cacheable 很好理解,就是不带 Cache,直接与存储器交互,这样不会带来内存一致性问题,但是效率不高;


其余两种都是带 Cache 的访问,不过 Cache 的策略略有区别;写透也可以在一定程度上保证内存一致性问题,但要发起内存访问时序,降低性能;回写只是将数据写到了 Cache 中,并通过 Dirty 标记等方式来记录数据的有效性,从而避免直接的内存访问,可以提高性能;


2.2.2、Device memory with cacheable

Device 和 Strongly-ordered 类型的存储器(可以理解为外设)区域,都是 Non-cacheable 的,即,不缓存的;这个很好理解,写过驱动的朋友应该都能够知道,对外设的访问和对普通内存的访问是完全不一样的两个概念;


所以,最后总结起来就是:

3、Device VS Strongly-ordered

ARMv7-A 中,Device 类型的存储器和 Strongly-ordered 类型存储器,都是不可 Cacheable 的,并且他们的访问是不可被优化的,他们的唯一区别是在 Shareability 属性:


1、对 Strongly-ordered 存储器的写入,只有在写访问到外设或者存储器组件的时候,才算完成;


2、对 Device 存储器的写入,允许在写访问到达外设之前就完成;


上面这个说法是官方的意思,我理解一下,应该是 Strongly-ordered 不惜牺牲性能,去做保序的要求,一定要实际访问到外设,而 Device 类型的访问指令,可能还在路上(流水线中);


而且,Strongly-ordered 和 Device 类型要求,对他们的访问必须是对齐访问;


4、Access rights

存储器模型除了有各种属性以外,还需要支持访问权限(这个是必须的,否则访问非法空间,那还得了);


ARMv7-A 定义了扩展的存储器区域访问属性,也就是这个权限访问;访问权限分为两部分:


1、基于特权等级的限制数据的访问;


2、基于特权等级的指令访问;


PL0 的时候,也就是 User 模式,相当于非特权等级下,禁止访问结构体系下的某些特性,它不能更改许多配置设置。 在PL0上执行的软件只允许非特权内存访问;


当在 PL1 上执行的软件(通常操作系统都执行在 PL1 特权模式下)可以访问体系结构的所有特性,并且可以更改这些特性的配置设置;


值得注意的是,fa权限的配置以及更改,只能够在 PL1 模式下进行;


4.1、Privilege level access controls for data accesses

针对数据的访问来说,在 PL1 模式下,可以定义某存储器区域的访问权限为:


1、不可访问;


2、只有 PL1 特权才能访问;


3、特权和非特权模式都可以访问;


如果处理器尝试访问权限不允许的数据访问,则会生成数据中止异常(Data Abort)。 例如,如果处理器位于 PL0,并且试图访问被标记为仅特权模式可访问的内存区域,则会生成数据中止异常 Data Abort;


4.2、Privilege level access controls for instruction accesses

针对指令的执行来说,PL1 模式下,以定义某存储器区域的执行权限为:


1、不允许执行;


2、在处理器实现了 Large Physical Address Extension 情况下,PL1 不允许执行;


3、只能在 PL1 执行;


4、特权和非特权模式都可以执行;


访问权限的配置,在 CP15 的 MMU 相关的寄存器,他们的层次结构为:

推荐阅读

史海拾趣

FRONTIER公司的发展小趣事

背景:假设FRONTIER公司也涉足绿色能源领域。

发展故事:面对全球气候变化和环境问题的日益严峻,FRONTIER公司积极响应可持续发展号召,开始布局绿色能源产业。公司通过引进先进的光伏技术、储能技术和智能电网技术,成功打造了一系列绿色能源解决方案。这些解决方案不仅有效降低了企业的能耗和碳排放量,还为全球能源转型和环境保护做出了积极贡献。FRONTIER的绿色转型不仅赢得了市场的认可和支持,也为公司未来的可持续发展奠定了坚实基础。

Friedrich Lütze GmbH公司的发展小趣事

进入21世纪,随着信息技术的飞速发展和工业4.0时代的到来,电子行业面临着前所未有的技术变革。Friedrich Lütze GmbH 积极应对这一挑战,致力于将物联网(IoT)、大数据、人工智能等先进技术融入产品之中,推动公司向智能化、网络化方向转型升级。公司通过建立智能制造体系,提升生产效率和产品质量,同时开发出更加智能、便捷的工业自动化解决方案,为客户提供更加全面的服务。

GE Solid State公司的发展小趣事
在某些无法直接观察光线的环境中,如暗室或夜间拍摄时,可听的曝光表电路提供了一种便捷的曝光判断方式。
ELPIDA公司的发展小趣事

2008年全球金融危机的爆发对ELPIDA造成了巨大冲击。由于DRAM需求的急剧下降和价格的暴跌,公司的业绩急剧恶化。在这种情况下,ELPIDA不得不采取一系列措施来应对困境,包括削减成本、优化生产流程等。然而,这些措施并未能完全扭转公司的颓势。

AZM [Arizona Microtek, Inc]公司的发展小趣事

AZM公司成立于电子行业的蓬勃发展时期,创始人凭借对微电子技术的深刻理解和敏锐的市场洞察力,决定投身于这一领域。创业初期,公司面临着资金短缺、技术瓶颈和市场认可度低等多重挑战。然而,创始人凭借坚定的信念和不懈的努力,带领团队攻克了一个又一个技术难题,成功研发出了具有竞争力的微电子产品,并逐渐在市场上获得了认可。

艾华集团(AISHI)公司的发展小趣事

在科技创新的推动下,艾华集团的产品逐渐在国内外市场上崭露头角。公司不仅在国内市场上取得了显著成绩,还积极拓展海外市场,产品远销欧美、东南亚等地区。同时,艾华集团也注重品牌建设,通过提升产品品质、加强售后服务等方式,不断提升品牌影响力和美誉度。

问答坊 | AI 解惑

显示器开关电源的维修

       如今显示器中的电源绝大部分采用的是开关型稳压电源(简称开关电源)。所谓开关电源,是指开关电源中的调整管工作在截止区和饱和区。调整管截止时,相当于机械开关的断开,调整管饱和时,相当于机械开关闭合。这种起开 ...…

查看全部问答>

如何将3G移动商务应用于直销行业

直销作为一种新型的营销方式,主要具有目标市场层面的选择性、沟通对象的个别性、沟通过程的连续性、沟通效果的可测试性等优点。随着现代社会的发展和市场竞争的加剧,直销手段已经逐步显现出巨大的市场营销潜力。 如何将3G移动商务运用于直销行业 ...…

查看全部问答>

又遇到个奇怪的读注册表问题,郁闷。

我在虚拟串口驱动中加入了如下代码,在com_init中可以读出,但是在COM_Open中 lResult = RegQueryValueEx(hKey, REG_MAP_PORT_NAME, NULL, &dwType, (LPBYTE)vtBuf,&dwsize); 死活都失败,不知道咋回事,莫非我人品有问题?汗,咋回事,大伙帮忙 ...…

查看全部问答>

请问各位大侠关于wince5.0系统的中英转换问题

我想问问,我现在的WINCE5。0系统加载了中文字体后,好像设置不到英文界面了,在PB中,默认语言是中文,在wince的控制面板-》区域设置中,区域射中选项卡的选中英文美国(其中还有一个是中文中华人民共和国),用户界面语言选项卡中,是阴影,选择 ...…

查看全部问答>

OpenStore的用法

hFlash = OpenStore(L\"MSFlash\"); hFlash = OpenStore(L\"DSK0:\"); 这两句话有什么区别,为什么我在multi-bin的情况下,只能用第一句;而在非multi-bin的情况下只能用第二句?? 请教高手~~ …

查看全部问答>

求助用MMU映射方式启动bootrom或vxworks的BSP

有谁成功用MMU映射方式启动bootrom或vxworks的BSP,小弟那一份自己刚刚完成的at91rm9200bsp换. 也可以详细说明一下思路,高分相送,谢谢了.…

查看全部问答>

版主!这个帖子里的链接都失效了

STM32相关讨论帖子汇总(集锦) 想办法补救一下吧。…

查看全部问答>

LM3S系列固化Bootloader的问题~~急~~

我用的是DK-LM3S9B96.。。里面固化了Bootloader,研究了Bootloader的启动方式,想上电强制从固化的bootloader启动,不检测flash是否为空,大概知道要修改BOOTCFG这个寄存器的值,可是不知道怎么修改。。。修改后也不知道上电复位后还是否会变化。。 ...…

查看全部问答>

上我团购的Real6410的开箱照

这次真是超级划算,超值,板子做工很精细,包装很到位,hongyang辛苦了,赞一个,接下来我们要共同学习了。现在的板子没想到都这么高级了,原来都可以用SD卡来启动UBOOT以便启动内核了,不像以前要烧UBOOT还需要用JLINK,看来我的JLINK没有用了,开 ...…

查看全部问答>