cache lab

老师上课没有好好听讲,现在写lab很烦恼,于是回头把书看了一遍,大概明白该怎么做了,特此记录一下。

读数据

比较好理解,如果要把一个数据加载到内存里,要一级一级的问下去,就和网络的dns服务器差不多,内存先问l1cache,你有没有这个数据啊,l1cache说,我没啊,我问我老大去。

l2cache你有没有啊,l2说我有,于是把要的这个数据连同它后面的几个数据一块给了l1cache,l1再把内存要的数据给内存,并且自己这还存着这次访问邻近的数据,下一次内存来问要上一次访问的下一个数据,这下l1就有了。

几个概念

× hit 问l1要,l1有

×miss问l1要,l1没有,l1问他的老大哥要,如果没有就一级一级要上去

×eviction l1没有,问老大哥要来了,结果自己这没地放了,只能忍痛把老数据扔一个,把新数据存进来。至于扔哪个老数据,有lru策略,就是好久都没用你了。lfu策略,就是统共用你用的最少。

写数据

几个概念

× write-through 翻译为写穿透比较好理解,就是内存要更改一个数据的值,它直接一步到位,把l2中的内容改了,不经过l1;

× write-back 写回,内存改数据,先把要改的数据存在l1中,等l1中被改的数据被eviction再写到l2里面

以上两个是写命中的情况

× write-allocate 写分配,l1里面没有我要写的目标地址的数据,那我先把这个数据从l2里面拿过来存到l1里面,再修改l1里面的值,可以发现这个是和写回搭配使用的。

× not-write-allocate 不写分配,没有就没有无所谓,反正我直接写l2,这个是和写穿透搭配使用的。

这个很好理解,那总不能傻乎乎的,写不命中,我先加载l2里面的内容再写穿透,诶我就是玩,加载过来开心开心,就没啥用。

 

posted @ 2022-05-06 21:16  kenor  阅读(94)  评论(0)    收藏  举报