查看现代 CPU 中的 Cache 结构的源代码
←
现代 CPU 中的 Cache 结构
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== 结构 == === Cache 行 === Cache 以行大小(Line size)为单位分成若干个行。行 (Line) 是 Cache 的数据存储和管理单元。一个典型的 Cache 行结构为: [[文件:Cache.line .png]] 其由 Tag 域、Status 域和数据域组成, Tag 域存放该行数据对应地址的高位。CPU 在索引后,用相应地址与组内所有行的 Tag 相比较,以之区分具体的行。 数据域能容纳的字节数是为行大小 (Line Size),其为 Cache 与内存之间数据交换的单位。 Status 域则为一些控制位信息(如Valid, Lock 以及Parity check 位等等),不同的Cache 类型,不同的 Cache 实现 Status 域稍有不同,具体的可以参考相应 CPU 手册。 <br><br> === 相联方式 === ==== 组相联 ==== 通俗地讲就是 Cache 行的分组,比如 4 路组相联,就是 4 行一组,4 行一组。。。。。。 比如 32KB 的 4 路组相联 Cache,行大小为 16Bytes 的话,他就有 32*1024/(16 * 4)= 512 组 CPU 访问组相联 Cache 时,就先用地址索引到组,然后组内同时匹配 Tag,进行路选。一个典型的组相联 Cache 如下: [[文件:Cache.way .set .png]] 内存逻辑上也按 Cache 行大小分块,按地址由低向高,依次编号。因此 Cache 与内存就会有个映射问题,如:第四个内存行中的数据被CPU访问时,该行将缓存于 Cache 中的哪一行? 组相联的 Cache 是先索引组,其规则为: Cache 组号 = 内存行号 % Cache 总组数 [[文件:C2.png]] 对于上图这个只有 2 个组的 Cache,假设其行大小为 16Bytes,这个组索引的过程,实际上就是用地址的第 5 位(ADDR[4]) 索引的过程,0 就在第一组,1 就在第二组。地址的低 4 位用于行内索引数据 (ADDR[3:0]) 尔后,内存行可以映射到该组内的任意行上。缓存数据时,有空占空,如组内所有行被占用,则使用替换算法(LRU, Random, FIFO, LFU)替换掉一行。 <br><br> ==== 直接相联 ==== 略. 或可参阅 The MIPS Cache Architecture 的相关部分 <br><br> ==== 全相联 ==== 略. 或可参阅 The MIPS Cache Architecture 的相关部分 <br><br>
返回到
现代 CPU 中的 Cache 结构
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面