Cache基本原理之:寻址

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

来源:cache-mem.pdf Figure 2

《Cache基本原理之:寻址》

寻址及数据获取

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组成

《Cache基本原理之:寻址》

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

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

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

《Cache基本原理之:寻址》

·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

    原文作者:yuwh_507
    原文地址: https://www.jianshu.com/p/3f93abcee77b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞