Blog

缓存块的组织形式

缓存块的组织形式 #

我们先从如何管理缓存块的角度,来看下缓存块的组织形式:

上图中的小方框就代表一个缓存块。从图中,你也可以看到,整个缓存由组(set)构成,每个组由路(way)构成。所以整个缓存容量等于组数、路数和缓存块大小的乘积:

整个缓存容量=组数×路数×缓存块大小

为了简化寻址方式,内存地址确定的数据块总是会被放在一个固定的组,但可以放在组内的任意路上,也就是说,对于一个特定地址数据的访问,它如果要载入缓存,那么它放在上图中的行数是固定的,但是具体放到哪一列是不固定的。

Viewpoint #

From #

14 | CPU Cache:访存速度是如何大幅提升的?

缓存块(cache line)

Content #

cache line 是缓存进行管理的一个最小存储单元,也叫缓存块。从内存向缓存加载数据也是按缓存块进行加载的,一个缓存块和一个内存中相同容量的数据块(下称内存块)对应。

我们先来看看缓存块的内部结构: 其中,V(valid)表示这个缓存块是否有效,或者说是否正在被使用; M(modified)表示这个缓存块是否被写,也就是“脏”位;B 表示缓存块的 bit 个数。

假设要寻址一个 32 位的地址,缓存块的大小是 64 字节,缓存组织方式是 4 路组相连,缓存大小是 8K。经过计算我们得到缓存一共有 32 个组(8×1024÷64÷4=32)。那么对于任意一个 32 位的地址 Addr ,它映射到缓存的组号(set index)为 Addr 对组数 32 取模,组号同时也等于 Addr 的第 6~10 位( (Addr >> 6) & 0x1F ),Addr 的低 6 位很好理解,它是缓存块的内部偏移(26 为 64 字节),那么高 21 位是用来干嘛的呢?我们接着往下看。

确定需要被映射到哪个组之后,我们需要在该组的路中进行查询。查询方式也很简单,直接将每个缓存块 tag 的 bit 位和地址 Addr 的高 21 位逐一进行匹配。如果相等,就说明该内存块已经载入到缓存中;如果没有匹配的 tag,就说明缓存缺失,需要将内存块放到该组的一个空闲缓存块上;如果所有路的缓存块都正在被使用,那么需要选择一个缓存块,将其移出缓存,把新的内存块载入。

上面这个过程涉及到缓存块状态转换,而状态转换又涉及到有效位 V、脏位 M、标签 tag。总体来讲,缓存的状态转换有以下几种情况:

Viewpoint #

From #

缓存块的组织形式

...

泡利不相容原理

Content #

对于拥有众多电子的重元素来说,为什么它的一些电子能够长期地占据外层的电子轨道,而不会失去能量落到靠近原子核的低层轨道上去?

这个疑问由年轻的泡利在1925年做出了解答:他发现,没有两个电子能够享有同样的状态,而一层轨道所能够包容的不同状态,其数目是有限的,也就是说,一个轨道有着一定的容量。当电子填满了一个轨道后,其他电子便无法再加入到这个轨道中。一个原子就像一幢宿舍,每间房都有一个四位数的门牌号码。底楼只有两间房,分别是1001和1002。而二楼则有8间房,门牌分别是2001、 2002、 2101、2102、2111、2112、2121和2122。越是高层的楼,它的房间数量就越多,租金也越贵。脾气暴躁的管理员泡利在大门口张贴了一张布告,宣布不能有两个电子房客入住同一间房屋。于是电子们争先恐后地涌入这幢大厦,先到的两位占据了底楼那两个价廉物美的房间,后来者因为底楼已经住满,便不得不退而求其次,开始填充二楼较贵的房间。二楼住满后,又轮到三楼、四楼……一直到租金高得离谱的六楼、七楼、八楼。不幸住在高处的电子虽然入不敷出,却没有办法,因为楼下的便宜房间都住满了,没法搬进去。叫苦不迭的电子们把泡利那蛮横的规定称作“不相容原理”( The Exclusion Principle)。

Viewpoint #

From #

进犯行为的五种策略

Content #

《自私的基因》一书中,作者提出的进犯行为的五种策略,请问是哪五种?在进化的意义上来说,能够稳定的是哪种策略?(这里的策略指的是基因事先编制好的程序。)

除了鹰策略和鸽策略外,作者又给出了另外三种策略:还击策略(Retaliator),恃强凌弱策略(Bully),以及试探性还击策略(Prober-retaliator)。最终能够在进化上稳定的只有还击策略

Viewpoint #

From #

趋势跟踪策略的底层逻辑

Content #

支撑趋势跟踪策略的底层逻辑有哪三个?

  1. 所有信息都有一个传播过程;
  2. 经济和各行业都有固有周期;
  3. 投资者情绪助推交易趋。

Viewpoint #

From #

主动回想与被动重复

Content #

威廉·詹姆斯在1890年谈到:我们的记忆有一个奇怪的特点,即主动的回想比被动的重复效果要更好。以背诵为例,学到差不多的时候最好先放一放,然后尽量用心去回想刚才的内容,这样的学习效果比直接再看书要更好。如果我们“用心回想”出了一部分词句,那几乎可以肯定下次还能再想出来;而如果我们“直接再看书”,那么下一次很可能还是离不开书。

Viewpoint #

From #

Integer的缓存范围

Content #

Integer 的缓存范围虽然默认是 -128 到 127,但是在特别的应用场景,比如我们明确知道应用会频繁使用更大的数值,这时候应该怎么办呢?

缓存上限值实际是可以根据需要调整的,JVM 提供了参数设置: -XX:AutoBoxCacheMax=N

Viewpoint #

From #

专心的含义

Content #

很多人认为,专心就是思路持续不间断。在他们的想象里,科学家、作家、发明家和哲学家在思考问题时,都是顺畅地从A想到B,从不分神。这种想法是错误的。正确的专心的含义是什么?

专心主要不是防止分神和思路中断,而是在发生分神和思路中断时克服它们。因此,专心意味着一走神就把注意力拉回到正题上。

专心就像开车。老司机开车时不会死死握住方向盘一动不动,相反他们会轻微地左右转动方向盘,保持车辆的行进方向。即便在平整的路面上,车辆也很少能严格按照预定方向行驶,所以司机必须时常调整方向盘,很多调整几乎察觉不到。老司机并不是比新手更聪明,他们只是学会了及时地做出细微的修正。

同样,高效思考者的秘诀不是他们走神的时候少,而是与低效思考者相比,他们已经学会了更迅速、更有效地应对走神。他们的做法中没有魔法,通过练习你也能学会。

Viewpoint #

From #

待摊费用在时间上的规定

现行的会计准则对待摊费用有何时间上的规定? #

如果待摊费用的有效期比一年时间短,那么无论是把相关的支出先列入待摊费用,再每个月逐步变成费用,还是直接把相关支出列入费用,在年末来看最终结果是完全一样的。因此,现行的会计准则只将有效期长于一年的待摊费用列入待摊费用,并且要在前面加上“长期”两个字,即将其称为“长期待摊费用”;而将有效期少于一年的待摊费用直接记入相关的费用项目。

Viewpoint #

From #

巴纳姆效应

什么是巴纳姆效应? #

巴纳姆效应指的是,当人们被赋予可以适用于几乎所有人的模糊、万能的自我描述时,他们通常会说“难以置信!那就是我!”。这一效应有助于解释为什么会有那么多人错误地相信占星术、算命、乃至一些流行心理学的人格测试的准确性。假设我考察了你的星相图并告诉你:“在不熟悉的社会环境中你会非常谨慎。你会以乐观和悲观交织在一起的方式看待生活。你的思想是开放的,但当形势需要的时候,你也可以采取坚定的立场。”你会认为我是一个能够读懂星相和你个性的特别有天赋的人吗?哪怕片刻的反思也会提醒你,这个描述几乎适合每个人。但是由于我们倾向于自我中心思考,我们大多数人会觉得这是对我们的完美描述。

Viewpoint #

From #