上下文和目标
我想在我的 Olimex A20 Lime 平台上运行两个完全独立的应用程序,它们在一个运行 ARM Cortex-A7 的处理器核心上。目标是将每个应用程序分配给一个处理器核心。到目前为止还好。
现在我想按以下方式在处理器核心之间划分 L2 缓存:
L2 cache (256KB)
---------------------------
| CPU0 | CPU1 |
| (128KB) | (128KB) |
---------------------------
因此,每个核心只能访问他私有的128KB L2高速缓存。
问题:
如何在ARM Cortex-A7上将L2高速缓存分配给核心?
据我了解,在以前的SoC上,通常使用外部缓存控制器,例如PL310。现在,像Cortex-A15和Cortex-A7这样的新型SoC使用集成缓存控制器。该控制器与SCU组件集成在一起。
我在CP15系统中找到了一些与缓存相关的寄存器,例如CSSELR、CCSIDR、CLIDR等,甚至是系统控制寄存器(SCTLR)。但是,没有一个似乎可以让我为每个核心配置大小。这还有可能吗?
感谢您的帮助。
这里所说的“独立应用程序”,实际上是指Linux操作系统。因此,目标是将一个核心专门用于一个操作系统。因此,每个操作系统在下面运行(看到)一个单处理器系统。整个框架已经在运行,目前为止还不错。
感谢我收到的答案,我现在明白了,即使它们是独立的操作系统,也可以让核心都使用L2,即使它们不使用相同的虚拟映射。实际上,这与两个进程拥有自己的虚拟地址空间是相同的。
然而,最后困扰我的事情是安全方面:
如果两个核心共享整个L2缓存,一个核心是否可以技术上访问另一个核心的缓存数据?
参考资料
- ARM Cortex-A7 MPCore TRM
- 关于L2内存系统(7.1)
- 识别寄存器(4.2.18)