我试图了解缓存未命中的确切方式。到目前为止,这是我理解它的方式:
对地址x的CPU请求,搜索自己的(L1 / L2)缓存。如果它不存在那么它就是缓存未命中
现在缺少的是它究竟是如何发现信息在缓存中不可用的?缓存行保留哪些信息?到目前为止,我知道缓存行应包含此信息:
Address of the information, Data within that address.
拥有此信息CPU可以查明其缓存中是否有可用的地址。当它具有无效的数据副本时出现问题。所以我的问题是:
处理器如何确定某些数据是有效还是无效?
每个缓存行中是否存有标志?是否要求协议提供此信息?如果是这样,协议的信息保存在哪里(Cache / Memory / Elsewhere)?
我还在寻找,但我很欣赏这方面的任何资源。
- 修改
类似的问题问here,但没有回答。似乎没有MESI协议的任何详细信息。任何帮助表示赞赏。
- EDIT2
我在MESI CMP Directory找到了更多信息。它声明“L2缓存控制器片上目录与L2缓存中的相应缓存块位于同一位置”,但没有关于L1缓存控制器信息所在的位置。
答案 0 :(得分:1)
缓存行(L1或L2)包含以下信息:
dirty_bit | many_memory_word
当脏位包含1时,表示行缓存与RAM中的对应项不相似。当它包含0时,表示行缓存包含RAM中实际存储行的精确副本。
当CPU请求RAM中的地址时。使用MTL进行转换以具有相应的行缓存地址,该地址假定包含该信息。
如果找不到地址,则表示信息在缓存线上没有湿,然后缓存未命中。如果找到高速缓存上的地址,那么如果高速缓存中请求的行的脏位设置为1,则高速缓存未命中,并且行高速缓存中的实际信息将被写入回到记忆中。缓存中行的地址使cpu知道哪个地址在实际内存RAM中对应。
所以当CPU从内存中请求信息时。此信息(以及更多)将放在行缓存中。并且 dirty_bit 设置为 0 ,这意味着缓存行代表RAM中内存行的精确副本。
然后当行中的writing operations
诅咒缓存时。 CPU将脏位设置为1,这意味着该行不再代表RAM中实际存在的副本。因此,如果缓存中脏位设置为1的地址上的reading operation
诅咒将会上升
版本:参考 看看here了解更多