Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1176201
  • 博文数量: 573
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 66
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-28 16:21
文章分类

全部博文(573)

文章存档

2018年(3)

2016年(48)

2015年(522)

分类: 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)。

      

阅读(2783) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~