Cache地址映射与变换方法

主存地址位数:log2主存容量

地址映射机制

  • 相联存储器:地址本身包含着位置啊可比较的信息啊等内容信息,可根据区分地址内容进行寻址

  • 主存地址 = 块地址 + 块内偏移地址 = (Tag + Index) + 块内偏移地址

  • cache结构

    • 好多行
    • 每行与主存块大小相等
    • 每行 = tag + data + valid + dirty
  • 三种映射方式

    • 全相联:cache行号 = random(内存块号)
    • 直接相联:cache行号 = 内存块号 % cache行数
    • 组相联:两者结合。8行1路组相联就是全相联,8行8路组相联就是直接相联



1. 全相联映射

  • 主存分块,Cache行 (Line),两者大小相同
  • 映射算法:主存的数据块可映射到Cache任意行, 同时将该数据块地址对应行的标记存储体中保存
  • 例如:
    • 设每块4(22)个字,主存大小为1024(210)个字
    • 则第61 个字的主存地址为: 00001111 01 (块号 块内地址)(前面8位,后面2位)
    • 主存分块后地址就从一维变成二维
  • 特点

    • Cache利用率高
    • 块冲突率低
    • 淘汰算法复杂
  • 应用场合

    • 小容量Cache



2. 直接映射

  • 主存分块,Cache行 (Line),两者大小相同

  • 主存分块后还将以Cache行数为标准进行分区

  • 映射算法:

    • Cache共n行,主存第 j 块号映射到Cache 的行号为:

       i = j mod n ((块地址)mod(cache中的块数))
      
      即主存的数据块映射到Cache特定行
      
  • 例如:

    • 设每块4个字,主存大小为1024个字
    • Cache分为4行,主存1个区就有4块
    • 第61个字的主存地址为: 000011 11 01 (区号,区内块号,块内地址)
    • 主存地址从一维变成三维
  • 特点
    • Cache利用率低
    • 块冲突率高
    • 淘汰算法简单
  • 应用场合
    • 大容量Cache



3. 组相联映射

  • 主存分块,Cache行 (Line),两者大小相同
  • Cache分组(每组中包k行)
  • 主存分块后还将以Cache组数为标准进行分组
  • 映射算法

    • Cache共n组,主存第j块号映射到Cache 的组号为:

      i = j mod n

      即主存的数据块映射到Cache特定组的任意行

  • 例子:

    • 本例假定K=4(4路组相联映射方式)

    • 设每块4个字,主存大小为1024个字

    • Cache分为4行,第61个字的主存地址为:

      0000111 1 01 (组号,组内块号,块内地址)

    • 主存地址从一维变成三维

K=1的组相联就是直接相联
K=存储器行数 的组相联就是 全相联映射




计算题

计算机组成原理----Cache主存地址映射(计算题)


  1. 某计算机的Cache共有16块,采用2路组相联映射方式(即每组2块)。每个主存块大小为32字节,按字节编址。主存129号单元所在主存块应装入到的Cache组号是( )(组号从0开始编号)
    解:主存块大小:32字节,则字块内地址的位数:log2 32 = 5
    Cache分组数量:16/2 = 8,则组地址位数:log2 8 = 3
    129(10) = 1000 0001(2),它的组号应为100(2) = 4(10)

  2. 某计算机的Cache共有8块,采用直接映射,每个主存块大小为32字节(按字节编址)。主存129号单元所在主存块应装入到的Cache块号是( )(块号从0开始编号)
    解:主存块大小:32字节,则字块内地址的位数:log2 32 = 5
    Cache分组数量:8,则组地址位数:log2 8 = 3
    129(10) = 1000 0001(2),它的组号应为100(2) = 4(10)

好文:Cache地址映射与计算方式

你可能感兴趣的:(Cache地址映射与变换方法)