Cache 实验报告 姓名: 学号: 安全
Cache 实验报告
一、实验要求:
1.阅读分析附件模拟器代码
要求:1)读懂 2)关键注释 3)总结关键参数和算法的实现方法
2.通过读懂代码加深了解 cache 的实现技术
3.结合书后习题 1 进行测试
4.通过测试和进行实验设计了解参数和算法选择的特点和相互关系(比较,组合等),需要
定性和量化结合说明,可以用数字或图表等多种描述手段配合说明。
二、实验代码:
1. LRU 页面置换算法
程序一共有 3 中模式:
Direct_mapped 2 Set_associate 3 Fully_associate
对于第一种,直接映射,显然用不到 LRU 算法,因为每一个地址在 cache 中只有一个
地方可以去。
对于后两种,组相联映射和全相联映射,就需要用到 LRU 算法了。
其中,全相联映射等于是只有一个 set 的 Set_associate,而 LRU 正是用在一个 set 中,
所以,后面两种模式的 LRU 问题可以归结为一种:一个 set 中,来了一个没有的页面,需
要置换出一个,应该置换出哪一个的问题。
那么,具体过程如下:
1 这个 set 中的每一个 block 都有一个 lru 值,初始为 0。
2 每次访问这个 set 的时候,不管是否命中,这个 set 中的所有 block 的 lru 值都+1。
3 当需要置换出去一个页面的时候,选择一个 lru 值最大的那个置换出入,用来放入刚
刚进来的。
4 不管是否命中,刚刚访问过的,或者加入的那个 block 的 lru 值置为 0。
if(x<lru[index][z])//选择 lru 值最大的一个
{
x=lru[index][z];
y=z;
}
if(z==((assoc*2)-2))//没有命中时
{
newarray[index][y+1]=tag; //把 lru 值最大的替换掉
misscount++;
c=misstype(blockaddress[j],NOofblock,j);
cc=1;
for(m=0;m<(assoc*2);m=m+2)//所有的 lru 值+1