缓存是否是一种中断/故障

时间:2013-05-21 05:36:47

标签: exception operating-system segmentation-fault interrupt

我们知道内存中的页面未命中会导致页面错误,页面处理程序必须将页面加载到物理内存中。在这里我想知道缓存中的错误是否也是系统故障?如果不是,内存故障和缓存故障之间的区别是什么?非常感谢。

4 个答案:

答案 0 :(得分:4)

“缓存故障”是指处理器的L1 / L2 / L3缓存中的缓存未命中?如果是这样,那么不,它不会产生错误,至少在我听说过的每个处理器架构上都是如此。

原因是页面错误需要软件干预来决定访问是否无效,访问是否是换成磁盘的页面等。相反,根据定义,可以处理缓存未命中由处理器本身 - 因为它不会导致页面错误,数据必须已经存储在主存储器或较低级别的缓存中,处理器可以直接访问它们。处理器将机械地将正在访问的存储器的地址从虚拟转换为物理,然后向较低级别的高速缓存或主存储器请求数据。

同样的想法适用于同时多处理器,其中高速缓存行可能被写入其中的一个核心无效,即使另一个核心将其存储在高速缓存中。处理器定义自己的一致性协议,以确保不会读取过时副本,通常是通过强制使用无效高速缓存行的核心从较低级别的高速缓存刷新它,或者要求它观察共享写入总线所有处理器都可以看到正在写入的值。

答案 1 :(得分:1)

不,它只会导致处理器停滞。也许适当的心理图像是一个或多个NOP指令插入管道。也称为“bubble"。不太确定这是现代处理器的适当模型,但效果肯定是相同的,处理器会停止执行指令,直到数据可用。

答案 2 :(得分:1)

缓存故障是指核心被阻止读/写,因为另一个核心打算同时读取/写入相同的数据。这是多核并行性的问题。例如,考虑两个内核(0和1)需要来自RAM的变量 x ,x的副本放在最高级别的高速缓存(L2或L3)上,由所有内核共享然后将 x 的第二个副本放在核心0的最内部缓存(L1)中,而核心1请求使用相同的变量。核心1必须被阻止,同时执行从core_0更新变量值的冲突。 阻塞操作是一个缓存故障。

答案 3 :(得分:0)

到目前为止,还没有人提到TLB。一些CPU(例如MIPS)具有软件填充的TLB,并且TLB未命中实际上触发专用异常处理程序的执行,然后需要向CPU提供所寻求的虚拟到物理映射。 IOW,硬件可能无法自动处理某些缓存未命中/故障。