体系结构知识。
MSHR可以被认为是一种“缺失缓冲buffer”,存储之前要访问的但是Cache Miss 的请求。
具体操作如下:
当发生Cache Miss时:
首先搜索MSHR看是否有相同的Block也是处于缺失状态:
·如果找到了,分配一个Load/Store直接装入,一起解决历史和此次缺失(请求合并,向下一级缓存请求数据);
·如果未找到,且MSHR尚有余位,分配一个位置;
·如果未找到,且没有余位,发生资源冲突。
对于MSHR本身:
类似一个Miss缓冲数组,依次向下一级请求数据,得到返回数据后,首先查看哪些L/S在等待,数据前推,然后删除相应的MSHR记录。
同时将子块写入Cache或MSHR,如果是最后一块,在写入Cache后释放其在MSHR中的分配位。