v 站有比较了解计算机组成和体系结构的么?问个主存和高速缓存间的映射策略的问题

2019-01-16 21:49:26 +08:00
 Newyorkcity
首先说下我的理解哈:
CPU 给出需要的数据所对应的主存的地址 A,然后经过映射策略,得到 A 应该在 cache 中的地址 B,CPU 先在 cache 中找到地址 B,如果地址 B 中装载着有效数据,那就 hit 了..是这样嘛?
然而就我在书上看到的知识,不管是直接映射的高速缓存,全关联的高速缓存,组关联高速缓存,A 和 B 的位数都是一样的.这就很诡异了啊
B 是 cache 的地址,如果 B 的位数和 A 一样,那不就意味着主存有多大的容量,cache 就有多大的容量?既然如此,我还弄 cache 和主存干什么,我直接把整个主存的数据放到 cache 里不就好了??
1415 次点击
所在节点    问与答
8 条回复
shengyu
2019-01-16 22:01:53 +08:00
不是有快表么
yinanc
2019-01-16 22:15:44 +08:00
地址位数是一样的。Cache 地址由标记、块号、块内三部分组成,其中块号和块内地址位数就是 cache 容量。标记位长度就是剩下的位数,标记位内容在 cache 块中也保存(不作为数据),判断是否 hit 就是通过比对标记位实现。
Newyorkcity
2019-01-16 22:20:09 +08:00
@yinanc 地址位数是一样的,那不就意味着主存和高速缓存的容量是一样大的?比如说大家的地址都有 14 位,那大家不久都可以容纳 2^14 个字么?
yinanc
2019-01-16 22:34:43 +08:00
@Newyorkcity 标记位严格来说确实不算“地址”了,
OscarUsingChen
2019-01-16 22:34:46 +08:00
其实不然,因为现在都是用虚拟内存了,CPU 想要的地址一般是 64 位的,而 cache 的地址长度是和物理内存地大小挂钩的。
见 virtually indexed physically tagged cache
x86vk
2019-01-16 22:43:29 +08:00
没太懂你的意思,但它 cache 的地址实际上是标记,是给你确定这个 cache 里面的东西是不是你想要的内存里的东西用的,而不是给你寻址用的。比如一组内的 cache line 可能对应好多个可能的地址,而如何确定每个 cacheline 到底是哪个地址内的数据,就是所谓 cache 地址的作用了。
feather12315
2019-01-16 22:48:35 +08:00
feather12315
2019-01-16 22:50:40 +08:00
#7 这个
https://www.google.com/url?sa=t&source=web&rct=j&url=http://ir.sdu.edu.cn/~gantian/course/ca/1%2520-%25204.3.pdf&ved=2ahUKEwi40eaPxfLfAhUTNn0KHeD7ClQ4ChAWMAZ6BAgAEAE&usg=AOvVaw0aNlT6T6og77qATROYw1S_

手机复制地址不方便,关键词:cache,组相连、全相连、直接映射,看看课件中的图就明白了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/527732

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX