Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2287141
  • 博文数量: 668
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 8588
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-29 19:22
文章分类

全部博文(668)

文章存档

2011年(1)

2010年(2)

2009年(273)

2008年(392)

分类:

2008-10-16 14:35:48

例题:

     容量为64块的Cache采用组相联方式映像,字块大小为128字节,每4块为一组,若主容量为4096块,且以字编址,那么主存地址为(19)位,主存区号为(6)位。

 

     这是一道Cache与主存地址映像的问题,即主存以什么规则装入Cache。它是计算机系统结构中存储体系的一部分内容。好了,觉得还是先把相关的知识点写一下先的好,不然只看答案可能有点难懂。

 

知识点:Cache与主存地址映像

 

Cache和主存都被分成若干个大小相等的块,每块由若干个字节组成,主存和Cache的数据交换是以块为单位,需要考虑二者地址的逻辑关系。

 

地址映像:把主存地址空间映像到Cache地址空间,即按某种规则把主存的块复制到Cache中。

 

一、全相连映像

 

主存中任何一个块均可以映像装入到Cache中的任何一个块的位置上。主存地址分为块号和块内地址两部分,Cache地址也分为块号和块内地址。Cache的块内地址部分直接取自主存地址的块内地址段。主存块号和Cache块号不相同,Cache块号根据主存块号从块表中查找。Cache保存的各数据块互不相关,Cache必须对每个块和块自身的地址加以存储。当请求数据时,Cache控制器要把请求地址同所有的地址加以比较,进行确认。

 

特点:灵活,块冲突率低,只有在Cache中的块全部装满后才会出现冲突,Cache利用率高。但地址变换机构复杂,地址变换速度慢,成本高。

 

公式:

      主存地址位数=块号+块内地址;

      Cache地址位数=块号+块内地址。

 

二、直接映像

 

把主存分成若干区,每区与Cache大小相同。区内分块,主存每个区中块的大小和Cache中块的大小相等,主存中每个区包含的块的个数与Cache中块的个数相等。任意一个主存块只能映像到Cache中唯一指定的块中,即相同块号的位置。主存地址分为三部分:区号、块号和块内地址,Cache地址分为:块号和块内地址。直接映像方式下,数据块只能映像到Cache中唯一指定的位置,故不存在替换算法的问题。它不同于全相连Cache,地址仅需比较一次。

 

特点:地址变换简单、速度快,可直接由主存地址提取出Cache地址。但不灵活,块冲突率较高,Cache空间得不到充分利用。

 

公式:

     主存地址位数=区号+区内分块号+块内地址;

     Cache地址位数=块号+块内地址。

 

三、组相连映像

 

组相连映像是前两种方式的折衷。主存按Cache容量分区,每个区分为若干组,每组包含若干块。Cache也进行同样的分组和分块。主存中一个组内的块数与Cache中一个组内的块数相等。组间采用直接方式,组内采用全相连方式。组的容量=1时,即直接映像,组的容量=整个Cache的容量时,即全相连映像。Cache的存在对于程序员透明,Cache的地址变换和数据块的替换算法都采用硬件实现。

 

公式:

 

主存地址位数=区号+组号+主存块号+块内地址;

Cache地址位数=组号+组内块号+块内地址。

 

 

四、主存地址和Cache地址的相关计算

 

&主存地址的位数A由主存容量N决定

   Alog2N=区号位数+块号位数+块内地址位数

 

Cache地址的位数BCache容量H决定

  BLOG2H=块号位数+块内地址位数

 

&区号根据Cache容量划分,区号长度=主存地址位数-Cache地址位数

 

&主存的块号和Cache块号的长度相同,位数K取决于Cache中能容纳的个数

JKLOG2J

 

    &主存的块内地址和Cache的块内地址长度相同,位数M取决于块的容量 Q        MLOG2Q         

 

 

 

 

 

 

 

例题解析:

 

方法一

 

      分区数=主存容量/Cache容量=40966464

      区内分组数=64/4=16;

      组内分块数=4块/组;

      块内地址=128字节;

 

      所以根据公式:

 

主存地址位数=6+4+2+719

            主存区号=6位。

方法二:

     

  &主存地址的位数A由主存容量N决定

        Alog2N=区号位数+块号位数+块内地址位数

      

      所以:

          ALOG2NLOG24096*128)=LOG22^12*2^7)=LOG22^19

           19

  Cache地址的位数BCache容量H决定

    BLOG2H=块号位数+块内地址位数

 

  所以:

      BLOG264*128)=13.

  

  区号的计算方法同上!

 

方法三:

  

      主存地址=主存块地址+块内地址=12+719

  主存区号地址=主存块地址-Cache块地址=12-66.

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

wjcapple2020-02-27 10:21:50

主存地址不是有块内偏移,索引,标记组成么?哪来的块号?假如存在块号,给定一个地址,其索引号,标记位确定,如果再由块号,那么只索引确定的组的指定块(cache line)。这实际上是组相关映射的思想想违背。主存的块映射到哪一组,是固定的,但映射到组内的哪一块是随机的。块号是个什么鬼?

wjcapple2020-02-27 10:21:45

主存地址不是有块内偏移,索引,标记组成么?哪来的块号?假如存在块号,给定一个地址,其索引号,标记位确定,如果再由块号,那么只索引确定的组的指定块(cache line)。这实际上是组相关映射的思想想违背。主存的块映射到哪一组,是固定的,但映射到组内的哪一块是随机的。块号是个什么鬼?