2.Cache行和TLB的构成
2.1.Cache行的构成
1.Cache数据区总大小 = Cache总行数 * Cache块大小
2.Cache总大小 = Cache数据区总大小 + Cache标志位总大小
3.Cache行构成 = Tag + 有效位 + 替换信息位 + 脏位 + 块内数据
①Tag:Cache标签;由物理地址位数 + Cache总行数 + Cache块大小 + Cache映射方式共同决定位数
(1)直接映射:Tag = 物理地址位数 - 行号位数 - 块内地址位数(行号 = Cache总行数)
(2)组相联映射:Tag = 物理地址位数 - 组号位数 - 块内地址位数(组号 = Cache总行数 / 几路组相联)
(3)全相联映射:Tag = 物理地址位数 - 块内地址位数
②有效位:该Cache行的数据是否有效,固定存在且固定为 1 bit
③替换信息位:反映当Cache行满需要进行替换时,该Cache的被替换优先级;由映射方式 + 替换算法 + Cache总行数决定位数
④脏位(修改位):在该行Cache被替换时,根据脏位判断该Cache是否被修改过,即是否需要写回内存
写回法(write - back):只有淘汰某个Cache块时才将被修改过的Cache写回主存,故需要脏位来表示Cache是否被修改过;脏位为 1 bit
直接法(write - through):Cache被修改时直接写回主存,即Cache内数据和主存中数据保持一致,故不需要脏位;脏位为 0 bit
⑤块内数据:Cache块大小决定位数
⑥行号(直接映射):Cache总行数决定位数
组号(组相联映射):Cache总行数 + 几路组相联映射决定位数(总行数 / 路数)
行号和组号是被隐含的,不会额外占用标志位
2.2.TLB的构成
1.Tag:①全相联映射:位数 = 虚拟页号位数
②组相联映射:位数 = 虚拟页号位数 - 组号位数
2.有效位:一定存在,且固定为1bit
3.页框号:由页大小决定(注意区别于主存块大小)
4.替换信息位:与Cache同理
3.真题
(1)①总块数 = 数据区容量 / 主存块大小 = 32KB / 64B = 512块
②组数 = 总块数 / 8路 = 512 / 8 = 64 → 6bit
③块内地址: 主存块大小 = 64B → 6bit
④Tag = 32bit(物理地址位数) - 6 bit(组号)- 6 bit(块内地址)= 20 bit
⑤直写法:Cache数据和对应的主存块数据保持一致,不需要修改位
⑥LRU:8路组相联映射,每组8个,故3 bit(0 - 7)
(1)物理地址为28bit(右侧20 + 3 + 5,即是物理地址分成三个部分)
(2)TLB采用全相联映射,SRAM
(3)①组相联映射(每次都判断左右tag是否匹配,故是组相联映射,且为二路组相联)
②LRU → 替换信息位;二路组相联映射 → 每组2个Cache行 →1bit
③写回法 → 脏位:1 bit
④Cache总行数:组号3bit → 分为8组;二路组相联映射 → 每组2行Cache;8 * 2 = 16行
⑤Tag = 20bit
⑥总容量 = (20 + 1 + 1 + 1 + 32 * 8)* 16b,即(Tag + 脏位 + 有效位 + LRU + 数据)* 行数
⑦有效位说明该Cache的数据是否有效
(4)①0008 C040H的虚拟页号位0008 C得到实页号为0040
②实页号0040与页内地址040进行拼接得到物理地址→0040 040H
③0040 040H的末尾8bit为40H,即0100 0000,得到组号为010,即2
④对比组号为2的Cache,有0040 0的Cache标签,但是有效位为0,故Cache未命中
⑤0007 C260H的页内地址为260H,取末尾8bit,即0110 0000,组号为011,即3
1.45题中的第一列为行号,第二列为指令的虚拟地址,第三列为机器指令,第四列为汇编指令
2.主存地址32位,即物理地址为32位
3.页大小为4KB,按字节编址,即页内偏移量为12位
4.push指令的虚拟地址为0040 1000H,即虚拟页号为0040 1;ret指令的虚拟地址为0040 104AH,即虚拟页号为0040 1;两者的虚拟页号相等,故两个指令在同一页中
5.主存块大小为64B,即块内地址为6位
6.指令Cache有64行;采用四路组相联映射,即每组4行Cache;组数 = 64 / 4 = 16,即组号4bit
7.Tag标记位 = 32位(物理地址)- 6位(块内地址)- 4位(组号)= 22位
8.Call指令的虚拟地址为0040 1025H,转换成二进制后,相应的组号位为0000,即0号组
虚拟地址分为虚拟页号和页内偏移量,虚拟地址转换为物理地址时,将会使用对应的页框号拼接上页内偏移量形成物理地址,故页内偏移量就是物理地址的一部分,且为物理地址的低地址部分
4.Cache硬件原理拓展
1.通过中间3位找到对应的组,通过比较器同时比较组内两个Cache行的Tag是否与物理地址的Tag标记位匹配:通过电路分别将物理地址的Tag标记位和Cache的Tag输入到比较器中(物理地址来自MAR),如果两者相等,比较器输出1;如果两者不相等,比较器输出0
2.通过比较器上面的与门控制多路选择器是否接通:当且仅当比较器输出1(即Cache的Tag和物理地址的Tag相等)且有效位的电路输出1(即Cache数据有效)时,与门输出1给多路选择器,即多路选择器连通(但是仅连通左半边或者右半边,即将左边的Cache行的Data输入到多路选择器中或者将右边的Cache行的Data输入到多路选择器中,二者只会发生一个),然后多路选择器将输入的Data输出到数据中
3.将物理地址末尾的5位输入到数据中与2中输入的Tag位拼接,形成访问数据的具体字节的地址
①虚拟地址→物理地址:虚拟地址48位由36位VPN(虚拟页号)和12位VPO(页内偏移量)组成
1.左上角:VA即虚拟地址:由36位虚拟页号(VPN)和12位页内偏移量(VPO)组成
2.36位虚拟页号(VPN):由32位TLB标签(TLBT,Tag)和4位组号(TLBI,INDEX)组成;即说明采用的是组相联映射方式
3.组号4位:分为16个分组(16sets)
4.每组4个:四路组相联映射(4entries / set),每个的标志位由PPN(physical page number,物理页号)、Valid(有效位)和Tag(TLB标签)组成
5.通过进行前32位(虚拟页号36位 - 组号4位)和组内各行TLB标签(同32位)进行匹配后,若命中(TLB - hit),则将PPN和PPO(physical page offset,页内偏移量)进行拼接得到物理地址PA
6.左下角:如果TLB miss(TLB未命中),则前36位虚拟页号将会被拆分为4个9位的虚拟页号(VPN),说明采用的是4级页表;CR3是CPU中的寄存器,指向第一级页表的起始地址,然后逐级寻找下一级页表的页表项位置,最终得到PPN,再进行拼接得到物理地址
②物理地址→Cache:物理地址42位由40位CT(Tag)+ 6位CI(Index,组号)+ 6位CO(offset,块内偏移量)组成
1.Cache共64个分组(64 sets),每组8行Cache → 8路组相联映射
2.用物理地址的前40位Tag和组内各行Cache的Tag进行匹配,Cache Hit则得到具体块号,通过块内偏移量在相应位置读出32/64bit
1.TLBT(Tag): TLB标签位,6bit
2.TLBI(Index):TLB组号位,Set为组号,0 - 3,即4组,2bit
3.TLBT + TLBI = VPN(虚拟页号),8bit
4.VPO(页内偏移量),6bit
5.每个Set中有4行Cache → 四路组相联映射
四路组相联映射