Cache基本原理之:寻址

先看一张Alan Jay Smith《Cache Memory》里的一张插图:A typical cache andTLB design

来源:cache-mem.pdf Figure 2

寻址及数据获取

CPU对cache和内存(这里指主存mainmemory,通常是DDR内存)的寻址类似,都需要被访问对象的地址,但寻址过程有点差别:

CPU访问内存时,通常有两个动作:

1.在EPN(Effective Page Number,上图中的PageNumber部件)完成虚实地址转换,EPN经过Hash Function后在TLB中查找并得到RPN(RealPage Number),如果TLB Miss,RPN将通过慢速的页表查找来获得,最终完成虚拟地址到物理地址:页框(PageNumber)的转换;

2.CLN(Cache Line Number,上图中的Line Number部件)查找合适的CacheBlock。

Cache Block的查找和Page Number的转换可以同步进行。

在多处理器系统中,CLN索引得到的CacheBlock中的数据可能不是有效的数据,因此还需要做进一步的比较:PA与CacheBlock中的Address进行比较,如果结果相同且状态位匹配,表明CacheHit,此时CPU通过ByteSelect and Align部件获得所需的数据。如果Cachemiss,则需要通过PA进一步索引在内存中获取数据

Cache Block组成

一个CacheBlock由地址、状态位和数据单元组成:

·Data:Cache Block中的数据,其长度为32或64,视CPU而定

·Status:Cache Block的状态,在大部分处理器中,该字段包含的是MESI、MOESI或者MESIF这些信息状态。某些处理器还包含一个L位,表示当前CacheBlock是否可用锁定,许多将Cache模拟成SRAM的处理器就是利用了这个L位。

·Real Address Tag:简称RAT,记录当前Cache中存放的数据和哪个地址相关,RAT中存放一部分物理地址信息,虽然CPU的物理地址可能有48位,但Cache中的地址位不需要这么多:

CPU访问Cache使用的地址

从Cache的角度来看,CPU的地址可用划分为:

·Real Address Tag:该字段以单个Cache中的RAT的字段长度相同,CPU使用地址中的RAT字段与Cache中对应的字段以及状态位进行联合比较,判断其访问数据是否命中

·Cache Line Index:和CLN的作用类似,CPU使用该字段在Cache中选择某一个Entry,如果是组相联(Set-Associative)方式组织的Cache,则选择某一组Entry.

·Bank:在Multi-Bank的系统中,CPU访问Cache时,不同Bank可用并发访问。

·Byte:Cache的端口位宽,目前大部分系统的Cache总线位宽为128位或64位

Bank和Byte字段之和确定了单个Cache的Data字段长度,也就是通常说的CacheLine的长度,上图所示的CacheLine长度为26= 64 Bytes,目前大部分的CacheLine大小都为64Bytes,部分原因是因为DDR3SDRAM的一次BurstLine为8,一次Burst操作访问的数据大小为64Bytes

------------

补充一些基本概念,from https://cseweb.ucsd.edu/classes/su07/cse141/cache-handout.pdf

cache block - The basic unit for cache storage. May contain multiple bytes/words of data.

cache line - Same as cache block. Note that this is not the same thing asa “row” of cache.

cache set - A “row” in the cache. The number of blocks per set is deter-mined by the layout of the cache (e.g. direct mapped, set-associative,

or fully associative).

tag - A unique identifier for a group of data. Because different regions ofmemory may be mapped into a block, the tag is used to differentiate

between them.

valid bit - A bit of information that indicates whether the data in a block is valid (1) or not


来源:Cache Memory, Wangqi

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Cache entries 数据在主存和缓存之间以固定大小的”块(block)”为单位传递,也就是每次从main ...
    yuwh_507阅读 38,143评论 3 23
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,957评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,766评论 18 399
  • 日复一日,年复一年,你是否和我一样,都成了温水里的那只青蛙,曾经奋力跳跃的激情已不再有,慢慢的在现有的环境里沉迷,...
    悄然一念阅读 246评论 0 1
  • 蔓草丛生,微雨毰毸,鹧鸪幽啼。 我将迁徙,卜居森林小丘之陬,弹着箜篌等待着那一个温柔谦卑的灵魂的到来...
    DianaZY阅读 382评论 6 7