首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >缓存映射技术

缓存映射技术
EN

Stack Overflow用户
提问于 2018-12-05 12:33:20
回答 2查看 249关注 0票数 3

我正在尝试理解硬件缓存。我有一个小小的概念,但我想在这里问一问我的理解是否正确。

所以我知道有3种类型的缓存映射,直接的,完全关联的和集合关联的。

我想知道在硬件中用逻辑门实现的映射类型,具体到一些计算机系统,为了改变映射,需要改变电气连接?

我目前的理解是,在RAM中,存在一个指向每个内存块的内存地址。一个块内包含字,每个字包含若干个字节。我们可以用位数来表示选项的数量。例如,4096个存储单元,每个存储单元包含16个字节。如果我们引用每个字节,那么2^12*2^4 = 2^16 16位内存地址将需要引用每个字节。

高速缓冲存储器还具有存储器地址、有效位、标签和一些能够存储N个字的主存储器块并因此存储M个字节的数据。其中m= n*i (每个字的字节数)

例如,直接映射1块主存储器只能在高速缓存中的一个特定存储器位置。当CPU使用RAM的16位内存位置请求某些数据时,它首先检查缓存。它怎么知道这个特定的16位内存地址只能在几个地方?

我的想法是,在每个RAM地址和一个缓存地址之间可能存在某种电气连接。然后,可以将16位地址分成多个部分,例如,仅将剩余的8位与每个高速缓冲存储器地址进行比较,然后,如果匹配,则比较字节位,然后比较标记位,然后比较有效位

我的理解正确吗?谢谢!如果有人能读到这篇长文,我真的很感激

EN

回答 2

Stack Overflow用户

发布于 2018-12-05 17:55:15

您可能想阅读Ulrich Drepper的中的3.3.1 Associativity,这是每个程序员都应该知道的关于内存的知识。https://people.freebsd.org/~lstewart/articles/cpumemory.pdf#subsubsection.3.3.1

标题有点朗朗上口,但它详细地解释了你问的每一件事。

简而言之:caches的问题在于比较的次数。如果您的cache包含100个块,则需要在一个周期内执行100次比较。您可以通过引入sets来减少这个数字。如果特定的内存区只能放在插槽1-10中,则比较次数减少到10。索引由内存地址内的一个称为sets的额外位字段寻址。因此,例如,您的16位(来自您的示例)可以拆分为:

代码语言:javascript
运行
复制
[15:6] block-address; stored in the `cache` as the `tag` to identify the block
[5:4] index-bits; 2Bit-->4 sets
[3:0] block-offset; byte position inside the block

因此,方法的选择取决于硬件资源的可用性和要存档的访问时间。这几乎是硬连接的,因为你想减少比较逻辑。

票数 1
EN

Stack Overflow用户

发布于 2019-11-06 12:33:00

用于映射具有主存储器的缓存线的映射函数很少

  • 直接Mapping
  • Associative Mapping
  • Set-Associative映射

您必须对这三个映射函数略知一二

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53625231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档