0%

一、结构

因为一直分不清 Cache 的结构名字,所以特地画了一个比较满意的图来标注各种结构。

这个示意图的参数在右上角。Cache 中的基本单位是 Cache Line,它又被叫作 Block,它是由多个 Word 组成的。多个 Cache Line 会组成一个 Cache Set,一个 Cache Set 内包含的 Cache Line 数量被成为 Way。比如图中就是 2-Way 的 Cache,那么每个 Cache Set 就有 2 个 Cache Line。相同 Cache Set 中的 Cache Line 的关系被称为 associative(相联),它们不能依靠 set index 进行区分,只能通过 tag 区分。

根据 Set 个数和 Way 的不同(其本质是 Cache Line 的位置确定),可以对 Cache 进行分类:

Read more »

一、总论

旁路攻击(Side Channel Attack)指的是利用计算机通信过程中产生的“副作用”发起的攻击。也就是说,攻击者没有选择像监听信道或者破解密码等“正面手段”,而是利用通信时的时延、电压变化、能耗变化、JTag、异常等“边缘特征”等来发起攻击,是一种“侧面突破”。

我个人感觉旁路攻击利用的边缘特征,往往都是在根本上无法避免的特征,我们并不能为了避免时延旁路攻击,就放弃使用 Cache,或者为了 JTag 旁路攻击,就放弃使用硬件调试,甚至为了避免能耗攻击,就不用电了?这也就意味着,不像加密一样,只要提出了一个破密复杂度极高的加密算法,就可以一劳永逸。旁路攻击的防范是不能停歇的,任何一个计算机系统运行产生的效果,都会导致一次可能的攻击。

为了解释一下定义,旁路实际上是因为边缘特征产生的信息通道,就叫旁路。


Read more »

一、比喻

Trampoline 指的是“蹦床”,也就是底下这个东西:

BERG Champion - Rectangular, round and oval trampolines

他是一种很有趣的比喻,人们不能直接跳到高空中,而是需要先往下跳,然后借助蹦床的弹力跳到高空中。

这个比喻出现在用户态和内核态的相互转变中,转变不能直接发生,而是必须要借助一个“蹦床”机制。

Read more »

一、总论

这篇文章的目的是为了比较各个硬件架构之间的异同点,这是因为我的朋友提到了“硬件是围绕软件来设计的”的观点,所以我觉得许多硬件的差异如果进行对比,可以更好得了解软件需求,看清各式各样的硬件的设计意图。

但是这篇文章似乎因为选题过于宏大了,导致非常难以下笔,所以这篇文章应该是一个长期维护的文章。

维护考虑:

  • 或许可以根据 Linux 的命名方式来区分一些概念?
Read more »

一、一致性

一致性(consistency)这个概念应该是来自于分布式理论的 CAP 理论

CAP 理论

我觉得用人话来说就是对于多个观察者观察同一个事物,每个观察者观察到的现象是“相同的”,那么我们就认为这个设计具有“一致性”。“盲人摸象”就是一个非一致性的例子,对于同一个事物,盲人们分别给出了“柱子、山、石头”等描述,就是不具有一致性的案例。

一致性和并行编程联系紧密,因为一致性保证了多个并行的实体,他们看到的共享资源是相同的。只有这样才能保证并行实体间的协作,如果实体看到的资源都是不一样的,比如说线程 A 给资源加了个锁,但是 B 没有看到这个锁,那么就会导致数据竞争的发生。盲人摸象的结局不正是因为盲人们对于大象的看法各执己见,最终大打出手吗?

Read more »

一、可打印字符

转义字符的意思是,原本这个字符表达一个意思,而经过转义后,就会表达另一个意思。原本的意思没有什么特别之处(比如说必须是一个普通字符,一个通配符,一个格式控制符),表达出来的另一个意思也同样没有什么特别之处。

那么为什么要存在转义字符?我们可以用另一个字符来表达更多的意思,而不是让一个已经有一个意思的字符,经过转义后来表达另一个意思。但是可悲的是,这并不是现实的,现实是,我们仅有数量不多的可打印字符,而我们却希望表达更多的意思(这点在正则中尤其明显)。事实就是,每一个可打印字符都有了自己的含义,我们所能做到的,就只是复用他们。

上面的说法有些绝对,却是有方法可以缓解这种方式,比如用 Java 中数字编码转义字符,如 \uF890 这种,可以避免复用的尴尬,不过这样又有些不直观,毕竟谁都喜欢写 \n 而不是 \10

二、分类

Read more »