全部博文(573)
分类: LINUX
2015-12-09 10:12:26
主存与Cache的地址映射
由于Cache比主存小的多,因此必须使用一种机制将主存地址定位到Cache中,即地址映射。这个映射过程全部由硬件实现,对程序员透明。
1. 地址映射方法:
采用查表法(用专用快速硬件实现表格)
表中内容:映射的Cache地址、标记(命中判断)、有效位
2. 的三种方式: (1)全相联映射方式:
灵活,但映射函数复杂,不易实现。
(2)直接映射方式:
映照简单,不需计算,快速,但效率不高,易颠簸;。
(3)组相联映射方式:
组内全相联映射,组间直接映射
(1) · 任一主存块能映射到Cache中任意行(主存块的容量等于Cache行的容量),见图1:
· 映射过程:(见图2)
① 存入Cache:块表标记中存放主存的块号
② 检索:访问主存地址的块号与所有Cache行标记比较(图2阴影区)
· 符合, 即数据在Cache中,形成访问Cache的地址(地址映射),访问Cache;
· 不符合:访问主存,并将该块调入Cache。
· 优点:灵活,不易产生冲突;
缺点:比较电路难于实现,且效率低,速度慢。
例:设访问存储器地址的块号序列为22、26、22、26、16、4、16、18,采用全相联映射方式时,Cache行分配情况(见图3)。
全相联映射方式实例演示
(2)
直接映射方式实例演示 · 某一主存块只能能映射到Cache的特定行,见图4:
i = j mod m 其中: i:Cache的行号;
j:主存的块号;
m:Cache的总行数。
· 映射过程:(见图5)
① 存入Cache:快表标记中存放主存地址的区号
(将块地址分为二部分:· 块(行)地址 · 标记(区号))
② 检索: 根据访问主存地址的中间字段(行号),找到Cache快表中的这一行,读取该行中的标记字段与主存地址高位字段(区号)比较(图5阴影区)
· 符合:即数据在Cache中,形成访问Cache的地址(地址映射),访问Cache;
· 不符合:访问主存,并将该块调入Cache。
· 优点:硬件简单,成本低;
缺点:容易产生冲突,易"颠簸",不能有效利用Cache空间。
颠簸:例:频繁访问主存地址块序列0、m、0、m,则Cache中 第0行信息只能频繁调进调出,即出现颠簸现象。
例:访问存储器地址序列为22、26、22、26、16、4、16、18,采用直接映射方式时,Cache行分配情况(见图6)。
(3)
组相联映射方式实例演示 组相联映射方式 是全相联映射方式和直接相联映射方式的结合,结合两者的优点
· 方法:把Cache分为若干组,每组含有若干行。
组间直接映射,组内全相联映射。 (图7)
· 映射过程:(见图8)
① 存入Cache:快表标记中存放主存地址的区号及块号(将块地址分为三部分: · 块(行)地址· 组号· 标记(区号))
② 检索: 根据访问主存地址的第二字段(组号),找到Cache中的相应组,读取该组中的每一行标记字段与主存地址高位字段(区号)及块号比较(图8阴影区)
· 符合:即数据在Cache中,形成访问Cache的地址(地址映射),访问Cache;
· 不符合:访问主存,并将该块调入Cache。
· 优点:结合上面两种的优点。
① 因为组内行数较少,比较器容易实现;
② 组内又有灵活性,冲突大大减少。
例1:设Cache有8个行,分成2个组,设访问存储器地址的块号序列为22、26、22、26、16、4、16、18,采用组相联映射方式时,Cache行分配情况(见图9)。