C语言可以模拟TLB,关于这个问题的思想和思路

完成:
在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最小的值。
提示:

  1. TLB可以定义为全局变量。
  2. 注意返回结果应当为调用Cache函数返回的结果(即需要调用实验一中写的代码和数据)。
  3. 注意页表为一个结构体数组,结构体定义为:char Valid;char TlbTag[10];char PPN[4];int count
  4. 如果不命中就要去访问页表,本题目不需要写页表,因此可以写一个函数char * PageTable(char binary[]),随机是否缺页:产生一个100以内的随机数,小于50则表示缺页,返回2000000000000000;大于等于50则表示页表命中,返回1001100111110000,此处假设线性地址转换公式为:PPN = TLBTag%16+1
    代码检测扣分标准:
  5. 没有实现FIFO算法扣20.
  6. TLB数据结构不对扣20.
  7. 不按照接口编程扣15.
  8. 在TLB函数内输入输出扣15.
  9. 代码严重冗余扣10.