CPU访存流程深度剖析

废话不多说,先上简化图:

CPU访存流程深度剖析_第1张图片

进一步,如果TLB采取全相联映射,页表采用二级页表,Cache采用二路组相联,则是下图所示:

CPU访存流程深度剖析_第2张图片

另外,注意相关微观上的硬件:(1)页表寄存器PTR:页号P和页表长度M比较康康是否越界,若没越界才根据页表起始地址找到对应的页号&块号(虚实地址页号替换);另外说的硬件支持介绍:

(2)界地址寄存器(限长寄存器):比较逻辑地址的值和寄存器的值判断是否越界

(3)重定位寄存器(基址寄存器):逻辑地址+寄存器的值=物理地址(下面右图所示)

CPU访存流程深度剖析_第3张图片CPU访存流程深度剖析_第4张图片

1.CPU访问存储系统的整体流程

(1)提供逻辑地址

程序员交给CPU的是逻辑地址,要进行虚实地址转换才能找到该虚拟地址所对应的数据实际存放的位置。

(2)虚实地址转换

虚页号与实页号的对应关系存在页表(页表存在主存)中【页表的每个页表项纪录一个虚页号和对应的一个实页号】,比较活跃的页表项存在TLB中(TLB相当于专用于存页表项的Cache)。故转换时先查TLB,若TLB不命中,再查页表,若页表还不命中,说明该页面还未调入主存,需发出缺页中断,从辅存中调入并更新页表和TLB(切记:如果再次访问该页,通过TLB即可得到物理地址,访存一次)。——若被置换的页面已被修改(曾经修改过==)则处理缺页中断过程中还要写回外存中。

(3)访Cache-主存

得到物理地址后,需要访问Cache-主存体系以操作相应的数据。

先访问Cache,若Cache未命中,说明该块在主存中,需要先把该块调入Cache再处理,或者边调入Cache边处理(虽然CPU与Cache之间的数据交换是以为单位、Cache与主存之间的数据交换是以Cache块为单位,但是如果Cache不命中,是把该字所在的块一次性从主存中调入Cache)。

【注意】TLB或页表命中后说明该页面在主存中。快表是单独的寄存器,页表是存在于主存。

Cache总容量=标记项容量+数据区容量(如果分为指令Cache和数据Cache,下表的“数据”就可能是指令/数据)

标记项 数据
标记项 数据
标记项 数据

标记项:(每块Cache对应一个标记项,与映射关系无关)

有效位(1位) 标记位

一致性维护位

(脏位)

替换算法位

                                    必须有           地址映射   写策略则有1位   替换策略(一般无)

地址映射:拆分主存地址

主存字块标记 组地址 字块内地址

2.地址结构

(1)虚实地址

虚拟地址分为虚页号页内地址;物理地址分为实页号页内地址

(2)Cache-主存地址映射

Cache-主存体系中,地址先分为块号和块内地址。对应不同的映射方式,主存地址的块号需要拆分成不同的字段,高位均为标记字段,需要存入Cache。

【注意】页表到TLB的映射与主存到Cache的映射方式类似。

最后,总结一波【带有TLB的CPU访问过程

CPU访存流程深度剖析_第5张图片

常考点:

(1)访存次数;(2)虚实转换地址“变化”;

(3)王道模拟题:某存储系统中主存容量是Cache容量的4096倍,Cache被分为64块,当主存地址和Cache地址采用直接映射方式时,地址映射表的大小应为多少?(假设不考虑一致性维护位)      

【解析】由4096倍知道Tag为12位,即主存地址长度比Cache地址长度长12位,加上1位有效位,所以地址映射表大小为13bit × 64. (主存-Cache地址映射表(标记阵列)中的内容:映射的Cache地址(直接映射不需要因为Cache地址唯一,组相联只需要要组号)、主存标记tag(命中判断)、有效位)。

PS:Cache地址就是比主存地址少了个Tag,其他(块号&块内地址)一样。

(4)虚存大小 ≤ 内存+外存容量   同时,虚存大小 ≤ 地址位数所寻址的容量

(5) 

你可能感兴趣的:(计算机组成原理)