完成:
在main中定义char binary[16];定义16位虚拟地址的全相联TLB数据结构,TLB共16项,一页为64B;编写函数char * TLB(char binary[])
参数为16位虚拟地址,根据参数访问TLB,并返回读取结果,读取结果为4字节的二进制数。
TLB算法:1.划分虚拟地址;2.用VPN比对TlbTag;3.如果不命中就要去访问页表,并更新TLB;4.如果命中就要进行地址转换;5.根据物理地址访问Cache(此处即调用实验1的函数,因此需要将实验1的源文件导入);6在不命中时,使用FIFO替换算法,具体做法为加入一个计数器count,每次进TLB的新项都在之前项count的基础上做+1操作,每次替换出去的都是所有项中count最小的值。
提示:
- TLB可以定义为全局变量。
- 注意返回结果应当为调用Cache函数返回的结果(即需要调用实验一中写的代码和数据)。
- 注意页表为一个结构体数组,结构体定义为:char Valid;char TlbTag[10];char PPN[4];int count
- 如果不命中就要去访问页表,本题目不需要写页表,因此可以写一个函数char * PageTable(char binary[]),随机是否缺页:产生一个100以内的随机数,小于50则表示缺页,返回2000000000000000;大于等于50则表示页表命中,返回1001100111110000,此处假设线性地址转换公式为:PPN = TLBTag%16+1
代码检测扣分标准: - 没有实现FIFO算法扣20.
- TLB数据结构不对扣20.
- 不按照接口编程扣15.
- 在TLB函数内输入输出扣15.
- 代码严重冗余扣10.