2.1 Cache的工作原理
来源:互联网 发布:jsp java 编辑:程序博客网 时间:2024/05/01 00:59
处理器微架构访问Cache的方法与访问主存储器有类似之处。主存储器使用地址编码方式,微架构可以地址寻址方式访问这些存储器。Cache也使用了类似的地址编码方式,微架构也是使用这些地址操纵着各级Cache,可以将数据写入Cache,也可以从Cache中读出内容。只是这一切微架构针对Cache的操作并不是简单的地址访问操作。为简化起见,我们忽略各类Virtual Cache,讨论最基础的Cache访问操作,并借此讨论CPU如何使用TLB完成虚实地址转换,最终完成对Cache的读写操作。
Cache的存在使得CPU Core的存储器读写操作略微显得复杂。CPU Core在进行存储器方式时,首先使用EPN(Effective PageNumber)进行虚实地址转换,并同时使用CLN(Cache LineNumber)查找合适的Cache Block。这两个步骤可以同时进行。在使用Virtual Cache时,还可以使用虚拟地址对Cache进行寻址。为简化起见,我们并不考虑Virtual Cache的实现细节。
EPN经过转换后得到VPN,之后在TLB中查找并得到最终的RPN(Real PageNumber)。如果期间发生了TLB Miss,将带来一系列的严重的系统惩罚,我们只讨论TLB Hit的情况,此时将很快获得合适的RPN,并依此得到PA(PhysicalAddress)。
在多数处理器微架构中,Cache由多行多列组成,使用CLN进行索引最终可以得到一个完整的Cache Block。但是在这个Cache Block中的数据并不一定是CPU Core所需要的。因此有必要进行一些检查,将Cache Block中存放的Address与通过虚实地址转换得到的PA进行地址比较(Compare Address)。如果结果相同而且状态位匹配,则表明Cache Hit。此时微架构再经过Byte Select andAlign部件最终获得所需要的数据。如果发生Cache Miss,CPU需要使用PA进一步索引主存储器获得最终的数据。
由上文的分析,我们可以发现,一个Cache Block由预先存放的地址信息,状态位和数据单元组成。一个Cache由多个这样的Cache Block组成,在不同的微架构中,可以使用不同的Cache Block组成结构。我们首先分析单个Cache Block的组成结构。单个Cache Block由Tag字段,状态位和数据单元组成,如图2‑2所示。
其中Data字段存放该Cache Block中的数据,在多数处理器微架构中,其大小为32或者64字节。Status字段存放当前Cache Block的状态,在多数处理器系统中,这个状态字段包含MESI,MOESI或者MESIF这些状态信息,在有些微架构的Cache Block中,还存在一个L位,表示当前Cache Block是否可以锁定。许多将Cache模拟成SRAM的微架构就是利用了这个L位。有关MOESIFL这些状态位的说明将在下文中详细描述。在多核处理器和复杂的Cache Hierarchy环境下,状态信息远不止MOESIF。
RAT(Real Address Tag)记录在该Cache Block中存放的Data字段与那个地址相关,在RAT中存放的是部分物理地址信息,虽然在一个CPU中物理地址可能有40,46或者48位,但是在Cache中并不需要存放全部地址信息。因为从Cache的角度上看,CPU使用的地址被分解成为了若干段,如图2‑3所示。
这个地址也可以理解为CPU访问Cache使用的地址,由多个数据段组成。首先需要说明的是Cache Line Index字段。这一字段与图2‑1中的Cache Line Number类似,CPU使用该字段从Cache中选择一个或者一组Entry[2]。
Bank和Byte字段之和确定了单个Cache的Data字段长度,通常也将这个长度称为Cache行长度,图2‑3所示的微架构中的Cache Block长度为64字节。目前多数支持DDR3 SDRAM的微架构使用的Cache Block长度都是64字节。部分原因是由于DDR3 SDRAM的一次Burst Line为8[24],一次基本Burst操作访问的数据大小为64字节。
在处理器微架构中,将地址为Bank和Byte两个字段出于提高Cache Block访问效率的考虑。Multi-Bank Mechanism是一种常用的提高访问效率的方法,采用这种机制后,CPU访问Cache时,只要不是对同一个Bank进行访问,即可并发执行。Byte字段决定了Cache的端口位宽,在现代微架构中,访问Cache的总线位宽为64位或者为128位。
剩余的字段即为Real AddressTag,这个字段与单个Cache中的Real Address Tag的字段长度相同。CPU使用地址中的Real Address Tag字段与Cache Block的对应字段和一些状态位进行联合比较,判断其访问数据是否在Cache中命中。
[1]该图源自[19]的Figure 2. A typical cache and TLBdesign,拷贝后过于模糊,重画这个示意图,并有所改动。
[2]如果使用Set-Associative方式组织Cache结构,此时使用Index字段可以获得一组Entry。
- 2.1 Cache的工作原理
- Cache的工作原理
- Cache的工作原理
- Cache的工作原理
- cache的工作原理
- Cache的工作原理
- 高速缓冲存储器Cache的工作原理
- 高速缓冲存储器Cache的工作原理
- Cache的功能、结构与工作原理
- pdflush的工作原理及cache介绍
- Linux Page Cache的工作原理
- Cache工作原理-1
- Cache工作原理-2
- Cache工作原理-3
- Cache工作原理-4
- Cache工作原理-5
- Cache工作原理-6
- cache工作原理
- 1.1 Cache不可不察也
- 1.2 伟大的变革
- 1.3 让指令飞
- 1.4 Crime and Punishment
- 第2章 Cache的基础知识
- 2.1 Cache的工作原理
- 2.2 Cache的组成结构
- 2.3 Why Index-Aware
- 2.4 Cache Block的替换算法1
- 2.4 Cache Block的替换算法2
- 每日170212
- 2.5 指令Cache
- 2.6 Cache Never Block
- CSS属性之margin