首页 > 代码库 > 常见的CPU访问引起的内存保护问题为什么只用event_122上报 - 1

常见的CPU访问引起的内存保护问题为什么只用event_122上报 - 1

当CPU访问某个地址,会首先将访问请求发给L1D内存控制器,如果在L1D cache或L1D SRAM(CPU直接访问L1D内存)中命中,则L1D内存控制器就向CPU直接返回访问内存,如果没有命中则需要L2内存控制器请求…

这样当CPU访问的地址是空地址(NULL)或者是DSP中reserved(DSP没有开放使用的内存地址)的地址,在L1D内存控制器中就会检测到CPU非法地址访问,就会通过L1D的内存保护event 122(0x7A)上报非法访问。

L1D内存控制器是最接近CPU的,所以一旦CPU请求的地址是0或者reserved地址,就在第一时间被L1D内存控制器发现,所以就不再需要进入L2内存控制器检查了,也没必要了。

CPU内存访问路径:CPU<---->L1D内存控制器<--->L2内存控制器<--->EMC/XMC(corePac模块)<--->MSMC

而event 122(L1D_CMPA)就是L1D内存控制器检测到CPU非法访问时,上报exception的event(event 123,即 L1D_DMPA是L1D内存控制器检测到外设的非法访问)

那么L1D内存控制器是怎么检测到CPU访问空指针或reserved地址的呢? 见"常见的CPU访问引起的内存保护问题为什么只用event_122上报 - 2"