408存储系统大题笔记

img
咸鱼25计组强化课P2的笔记,有点简陋。
课后需要把第三章的课后大题(真题做一下)

Cache类题目

做题要注意的点!!

  1. PA的位数=Cache地址总位数
  2. Cache总行数
  3. Cache块大小
  4. 第2和第3相乘得Cache数据区总大小(!=Cache总大小)
  5. 映射方式
  6. 一致性问题:写策略(直写/回写)
  7. 替换算法
  8. CPU先把VA翻译成PA,再用PA去访问Cache

求地址结构

先根据映射方式确定行号/组号和块内地址的位数,剩下的是Tag

映射方式

  1. 直接映射
    Cache地址拆分为 Tag+行号+块内地址
    直接映射相当于1行1组
    行号位数与总行数关系:$n = log_2{lines}$

  2. 组相联映射
    Cache地址拆分为 Tag+组号+块内地址
    n路组相联,1组有n行
    组数为总行数除以路数:$z=\frac{lines}{n}$

  3. 全相联映射
    Cache地址拆分为 Tag+块内地址
    只有1组

一致性问题

  • 直写法:Cache中数据块只要修改过,就同步修改主存中的数据,因此不需要脏位。
  • 回写法:Cache修改过的数据块先在1 bit 脏位标记,直到这个块即将被淘汰时写回主存。

替换算法

要替换时选择淘汰哪一个?

  • 随机替换:不需要替换信息位,因为随机,不需要关心优先级和顺序。
    • 直接映射也不需要替换位,因为1行1组,根据地址只能找到对应的1行/组
  • 其他:n选1替换,需要$log_2 n$ 位
    • FIFO:先进先出,替换位需要记录进入顺序
    • LRU:最近最少使用
    • 组相联需要替换位 $log_2 n$ bits,n为路数
    • 全相联需要替换位 $log_2 lines$ bits

例题

2020真题

(10分)假定主存地址为32位,按字节编址,指令Cache和数据Cache与主存之间均采用8路组相联映射方式,直写(Write Through)写策略和LRU替换算法,主存块大小为64B,数据区容量各为32KB。开始时Cache均为空。请回答下列问题。
(1)Cache每一行中标记(Tag)、LRU位各占几位?是否有修改位?
(2)有如下C语言程序段:

for(k = 0; k <1024; ++k)
    s[k] = * s[k];

若数组s及其变量k均为int型,int型数据占4B,变量k分配在寄存器中,数组s在主存中的起始地址为008000C0H,则该程序段执行过程中,访问数组s的数据Cache缺失次数为多少?
(3)若CPU最先开始的坊问操作是读取主存单元0001003H中的指令,简要说明从Cache中访问该指令的过程,包括Cache缺失处理过程。

分析(非答案):
(1).
抓重点

  • 主存地址32位->PA 32位
  • 8路组相联
  • 直写
  • LRU
  • 主存块大小64B->块内地址占 6 bits
  • 数据区32KB->行数=32KB/64B->组号=行数/路数

Tag(20 bits) + 组号(6 bits) + 块内地址(6 bits) = 32 bits

(2).
s[0] - 008000C0H
s[1] - 008000C4H
s[2] - 008000C8H
.......
同一Cache块内的不同元素,只有最后6 bits不一样
访问这些元素只有第一次会Cache缺失
这些元素总共填64块Cache块,会发生64此确实
(3).
根据地址找Cache
判断有效位->缺失
把64B的块读到Cache中
更新有效位、LRU替换位、Tag标记位

TLB类题目

img
用于VA->PA过程中,加快查询速度。原理与Cache类似
VA结构:页号+页内地址

做题要注意的点!!

  1. VA多少位,虚页号多少位,页内地址多少位(根据页大小确定)
  2. 映射方式:
    • 一般没有直接映射,因为会发生TLB的抖动,导致频繁的换入换出,效率低下
    • 组相联->K路:虚页号由Tag+组号构成,组号位数=$log_2 K$
    • 全相联:虚页号=Tag,题目没说一般默认全相联
  3. 替换算法(同Cache)
posted @ 2024-09-12 13:18  CauchyPt  阅读(402)  评论(0)    收藏  举报