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里面的内容再写穿透,诶我就是玩,加载过来开心开心,就没啥用。

浙公网安备 33010602011771号