您的位置:首页 > 其它

主存与Cache的地址映射

2013-05-20 22:25 274 查看
主存与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)。


http://hi.baidu.com/ghoul0813/item/08d1cf7390863d2a5d178941
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: