对着百度磕磕绊绊的翻译了出去,后天抽空将其翻译

前不久爆出来的 AMD CPU
的平底漏洞可谓是震慑巨大,过去20年的总计机都也许会受影响。后天 Raspberry
Pi 的合法 Instagram(@Raspberry_Pi
转推了那篇小说,通过不难的 Python
程序分析了种种硬件术语和漏洞攻击形式,内容大约易懂,看后神清气爽。今日抽空将其翻译,分享给大家。本身俄语也不算太好,对着百度磕磕绊绊的翻译了出来,如有错误请多多包涵。——二〇一八年二月六日

新近爆出来的 英特尔 CPU
的平底漏洞可谓是震慑巨大,过去20年的总括机都大概会受影响。前天 Raspberry
Pi 的官方 脸谱(@Raspberry_Pi
转推了那篇小说,通过简单的 Python
程序分析了种种硬件术语和尾巴攻击方式,内容简短易懂,看后神清气爽。前几天忙里偷闲将其翻译,分享给大家。自个儿葡萄牙语也不算太好,对着百度磕磕绊绊的翻译了出去,如有错误请多多原谅。——二零一八年八月二十四日

*原稿地址:https://www.raspberrypi.org/blog/why-raspberry-pi-isnt-vulnerable-to-spectre-or-meltdown*

*初稿地址:https://www.raspberrypi.org/blog/why-raspberry-pi-isnt-vulnerable-to-spectre-or-meltdown*

在过去的几天里,有广大关于一对叫 Spectre 和 Meltdown
的安全漏洞的钻探。那影响到全部近代的英特尔处理器,许多英特尔处理器(在
Spectre 漏洞下)和 A帕杰罗M 大旨。 Spectre
允许攻击者绕过软件检查,去读取当前地点空间中随心所欲地方的数据; Meltdown
允许攻击者去读取操作系统内核地址空间中(经常对用户程序不可访问)任意地方的数目。

在过去的几天里,有众多有关1对叫 Spectre 和 Meltdown
的安全漏洞的切磋。那影响到独具近代的英特尔处理器,许多英特尔处理器(在
Spectre 漏洞下)和 A途乐M 大旨。 Spectre
允许攻击者绕过软件检查,去读取当前地点空间中任意位置的数量; Meltdown
允许攻击者去读取操作系统内核地址空间中(常常对用户程序不可访问)任意地方的数码。

那七个漏洞使用许多现代处理器常见的性质特点(缓存和预测执行),通过所谓的侧信道攻击(side-channel
attack)来泄漏数据。幸运的是,树莓派不会遭逢那几个漏洞的震慑,因为大家采纳专门的(particular)APAJEROM
内核。

那五个漏洞使用许多现代总结机常见的性质特点(缓存和预测执行),通过所谓的侧信道攻击(side-channel
attack)来泄漏数据。幸运的是,树莓派不会蒙受这几个漏洞的影响,因为大家应用专门的(particular)A帕杰罗M
内核。

为了帮衬大家知道为啥,那里有少数有关现代电脑设计中的一些定义。大家将利用像上边那样的简要的
Python 程序去表明那一个概念:

为了帮忙大家领会为啥,那里有好几有关现代总括机设计中的①些概念。大家将接纳像上面这样的简便的
Python 程序去印证那些概念:

t = a+b
u = c+d
v = e+f
w = v+g
x = h+i
y = j+k
t = a+b
u = c+d
v = e+f
w = v+g
x = h+i
y = j+k

固然总括机中的处理器不间接实施 Python
,但此处的语句不会细小略,它们大体也正是3个机器指令。大家将详细介绍1些细节(特别是流程(pipelining)和寄存注重命名(register
renaming)),那对于电脑设计者来说非常关键,但并不是明亮 Spectre 和
Meltdown 所必须的。

尽管总计机中的处理器不间接执行 Python
,但此处的语句异常粗略,它们大体相当于二个机器指令。大家将详细介绍部分细节(特别是流程(pipelining)和寄存珍视命名(register
renaming)),那对于电脑设计者来说十一分重大,但并不是精通 Spectre 和
Meltdown 所不可不的。

为了归咎描述处理器设计和当代总计机体系布局的此外方面,你无法做得比
Hennessy and 帕特森’s classic Computer
种类布局越来越好:1种定量方法。(原文:you can’t do better than Hennessy
and Patterson’s classic Computer Architecture: A Quantitative
Approach.

为了归咎描述处理器设计和当代处理器类别布局的别的方面,你无法做得比
Hennessy and 帕特森’s classic Computer
体系布局更加好:1种定量方法。(原文:you can’t do better than Hennessy
and Patterson’s classic Computer Architecture: A Quantitative
Approach.

如何是标量处理器

最简便的当代电脑每一周期执行一条指令,大家称为标量处理器(scalar
processor)。上边的演示将在标量处理器上以四个周期执行。

标量处理器的例证包蕴 AMD 4八陆 和在 Raspberry Pi 1 与 Raspberry Pi Zero
上选用的 APAJEROM117陆 宗旨。

什么样是标量处理器

最简便易行的现世总括机每一周期执行一条指令,我们誉为标量处理器(scalar
processor)。上边包车型客车示范将在标量处理器上以四个周期执行。

标量处理器的例证包罗 速龙 4八陆 和在 Raspberry Pi 1 与 Raspberry Pi Zero
上行使的 A翼虎M1176 宗旨。

怎样是超过标准量处理器

使标量处理器(实际上是其余处理器)运转得更加快的让人惊讶方法是充实它的钟表速度(clock
speed)。然则,大家快速完毕了电脑内部逻辑门运转速度的极端。由此,处理器设计者开端搜寻两种同时履行多少个指令的艺术。

各样(in-order)超过标准量处理器(superscalar
processor)检查传入的指令流,并尝试在三个流水生产线(pipelines ->
pipes)中还要实施多少个指令流,但要遵循指令之间的依靠关系。正视关系很要紧:你大概以为双路(two-way)超过标准量处理器能够结对(dual-issue)四个指令,像上面包车型客车事例一样:

t, u = a+b, c+d
v, w = e+f, v+g
x, y = h+i, j+k

但那绝非意思:在总括 w 以前,我们必须总计 v
,所以第三和第伍命令无法同时实施。大家的双路超过标准量处理器实际上不容许找到别的与第一发令相匹配的授命,所以大家的示范将以四个周期执行:

t, u = a+b, c+d
v    = e+f                   # second pipe does nothing here
w, x = v+g, h+i
y    = j+k

超过标准量处理器的例证包涵 AMD Pentium ,在 Raspberry Pi 二 与 Raspberry Pi
三 上行使的 A科雷傲M Cortex-A七 与 Cortex-A伍叁 大旨。 Raspberry Pi 三的钟表速度只比 Raspberry Pi 二 快了 3三%
,但性能相仿翻倍:额外品质的一些原因是 Cortex-A5叁 的指令结对能力比
Cortex-A七 具有更广大的通令范围。

何以是超过标准量处理器

使标量处理器(实际上是别的处理器)运营得更加快的可想而知方法是扩大它的钟表速度(clock
speed)。然则,大家非常快完毕了微型计算机内部逻辑门运营速度的终点。由此,处理器设计者开首查找二种同时施行四个指令的点子。

逐条(in-order)超标量处理器(superscalar
processor)检查传入的指令流,并尝试在1个流水生产线(pipelines ->
pipes)中还要推行五个指令流,但要遵从指令之间的依靠关系。信赖关系很要紧:你可能以为双路(two-way)超过标准量处理器能够结对(dual-issue)两个指令,像上面包车型大巴例证一样:

t, u = a+b, c+d
v, w = e+f, v+g
x, y = h+i, j+k

但那绝非意思:在测算 w 以前,大家不可能不总结 v
,所以第三和第六命令无法同时推行。我们的双路超过标准量处理器实际上不容许找到任何与第一发令相相配的吩咐,所以大家的言传身教将以五个周期执行:

t, u = a+b, c+d
v    = e+f                   # second pipe does nothing here
w, x = v+g, h+i
y    = j+k

超过标准量处理器的例证包含 AMD Pentium ,在 Raspberry Pi 2 与 Raspberry Pi
叁 上使用的 ARubiconM Cortex-A柒 与 Cortex-A伍3 核心。 Raspberry Pi 3的钟表速度只比 Raspberry Pi 二 快了 3三%
,但品质周围翻倍:额外质量的有些原因是 Cortex-A伍3 的授命结对能力比
Cortex-A7 具有更普遍的吩咐范围。

什么样是乱序处理器

重返我们的例证,大家能够旁观,固然大家在 v 和 w
之间有三个信赖项,可是在程序的末端有其它的单身指令,大家兴许能够在其次个周期中用来填充流水线。乱序(out-of-order)超过标准量处理器具有打乱即将到来的一声令下的能力(服从依赖关系),以便提高流水生产线的功用。

在我们的示范中,乱序处理器大概卓有成效的交流 w 和 x 的概念:

t = a+b
u = c+d
v = e+f
x = h+i
w = v+g
y = j+k

将其以四个周期执行:

t, u = a+b, c+d
v, x = e+f, h+i
w, y = v+g, j+k

乱序处理器的事例包蕴 速龙 Pentium 贰 (绝大多数的 英特尔 和 AMD x八陆处理器,除了有的 速龙 Atom 和 速龙 Quark 设备),最新的 A帕杰罗M 大旨,像
Cortex-A9, -A15, -A17, and -A五7 。

哪些是乱序处理器

回来大家的事例,大家能够看来,就算大家在 v 和 w
之间有多个正视项,可是在程序的前面有此外的独自指令,我们或然能够在其次个周期中用来填充流水生产线。乱序(out-of-order)超过标准量处理器具有打乱即将到来的通令的能力(坚守信赖关系),以便升高流水线的成效。

在大家的示范中,乱序处理器大概有效的交流 w 和 x 的概念:

t = a+b
u = c+d
v = e+f
x = h+i
w = v+g
y = j+k

将其以三个周期执行:

t, u = a+b, c+d
v, x = e+f, h+i
w, y = v+g, j+k

乱序处理器的例证包罗 速龙 Pentium 二 (绝一大半的 AMD 和 AMD x86处理器,除了部分 速龙 Atom 和 英特尔 Quark 设备),最新的 A福特ExplorerM 宗旨,像
Cortex-A9, -A一伍, -A一柒, and -A5柒 。

怎么样是分支预测器

地点的事例是一段顺序代码。当然,真正的先后不是如此的:它们还包涵向前分支(forward
branches,用于得以实现标准化操作,如if语句)和向后分支(backward
branches,用于落到实处循环)。分支或许是义务的(总是执行),或条件的(是否执行取决于总结值)。

在获取指令时,处理器大概遇见重视于尚未总括值的尺码分支。为了制止停顿,处理器必须估量下三个要取的下令:在内部存款和储蓄器中的叁个发令(对应不执行分支),或分支目标中的二个(对应执行分支)。分支预测器(branch
predictor)可协理处理器对是还是不是推行分支举办智能估算。它经过采访有关过去一定分支的实施功效的总计数据来达成这点。

当代支行预测是十分复杂的,能够发生11分确切的前瞻。Raspberry Pi 3的附加质量的部分原因是由于支行预测在 Cortex-A七 和 Cortex-A5三之间的改良。但是,通过进行精心编辑的一密密麻麻分支,攻击者能够不当地陶冶分支预测器,从而做出倒霉的预测。

怎么着是分支预测器

上面包车型大巴事例是一段顺序代码。当然,真正的次第不是那般的:它们还蕴藏向前分支(forward
branches,用于落到实处规范操作,如if语句)和向后分支(backward
branches,用于落到实处循环)。分支大概是职责的(总是执行),或条件的(是还是不是执行取决于计算值)。

在获得指令时,处理器大概遇见注重于尚未总计值的准绳分支。为了幸免停顿,处理器必须测度下二个要取的通令:在内部存款和储蓄器中的三个限令(对应不实施分支),或分段指标中的3个(对应执行分支)。分支预测器(branch
predictor)可扶助处理器对是不是推行分支进行智能推测。它通过搜集有关过去一定分支的推行成效的总括数据来成功那点。

现代拨出预测是万分复杂的,能够生出十一分纯粹的预测。Raspberry Pi 三的额外质量的片段原因是出于支行预测在 Cortex-A柒 和 Cortex-A五3之间的勘误。可是,通过履行精心编辑的1多重分支,攻击者能够不本地陶冶分支预测器,从而做出不好的预计。

怎么着是预计

重排(reordering)顺序指令是使越来越多指令级并行的精锐措施,不过随着电脑变得更有力(能够将3或四个指令结对),要使全体那几个流水生产线忙起来变得困苦。由此,现代总计机预计(speculation)的力量也变得更加强。推断执行允许大家发出或然不供给的通令(因为代码或然会设有分支),这会使流水生产线保持繁忙(使用或抛弃),即使结果注明该指令未被实践,我们就足以将其扬弃。

想见执行不须求的一声令下(底层要求帮衬估摸和重排)消耗额外的小运,但在无数情况下,那被认为是赢得额外单线程品质的三个划算的迁就。分支预测器被用来摘取程序最也许的不二等秘书诀,最大限度地拉长测度的回报。

为了演示推断的好处,让我们看看另2个例证:

t = a+b
u = t+c
v = u+d
if v:
   w = e+f
   x = w+g
   y = x+h

未来大家有了从 t 到 u 到 v ,从 w 到 x 到 y
的信赖关系,所以未有推测的双路乱序处理器永远不可能填满它的第一个流水线。处理器开销四个周期总计t 、 u 和 v ,之后将明白 if 语句的基点部分是或不是推行,在实行 if
语句主体的地方下,再消费四个周期总计 w 、 x 和 y 。假若 if
语句(由1个分段指令达成)要求三个周期,我们的以身作则将开支多个周期(借使 v
为 0)或四个周期(如果 v 为非 0)。

即使分段预测器申明该 if
语句体大概实施,经测算有效地打乱后的次序是如此的:

t = a+b
u = t+c
v = u+d
w_ = e+f
x_ = w_+g
y_ = x_+h
if v:
   w, x, y = w_, x_, y_

所以大家前几日有了附加的指令并行来维系大家的流水生产线繁忙:

t, w_ = a+b, e+f
u, x_ = t+c, w_+g
v, y_ = u+d, x_+h
if v:
   w, x, y = w_, x_, y_

循环计数在预计乱序处理器中定义不太好(原文:Cycle counting becomes less
well defined in speculative out-of-order processors
),但 w 、 x 和 y
的分段和规则更新是大体不占用时间的,所以大家的言传身教大致在几个周期中实施。

何以是测算

重排(reordering)顺序指令是使愈多指令级并行的无敌措施,不过随着总计机变得越来越强硬(能够将三或多少个指令结对),要使全体这一个流水生产线忙起来变得紧Baba。由此,现代电脑猜度(speculation)的能力也变得更加强。推断执行允许大家发出可能不要求的一声令下(因为代码可能会设有分支),那会使流水生产线保持繁忙(使用或放任),假使结果评释该指令未被实施,我们就足以将其抛弃。

想来执行不须要的指令(底层供给帮忙预计和重排)消耗额外的日子,但在重重情景下,那被认为是收获额外单线程品质的三个经济的折衷。分支预测器被用来挑选程序最大概的路径,最大限度地抓实估算的报恩。

为了演示猜想的补益,让我们看看另三个事例:

t = a+b
u = t+c
v = u+d
if v:
   w = e+f
   x = w+g
   y = x+h

未来大家有了从 t 到 u 到 v ,从 w 到 x 到 y
的依赖性关系,所以未有估摸的双路乱序处理器永远无法填满它的第二个流水生产线。处理器开销多个周期总括t 、 u 和 v ,之后将理解 if 语句的重心部分是还是不是执行,在实行 if
语句主体的气象下,再消费多少个周期总计 w 、 x 和 y 。借使 if
语句(由三个拨出指令完结)要求1个周期,我们的言传身教将成本七个周期(即使 v
为 0)或四个周期(假诺 v 为非 0)。

一旦分段预测器注明该 if
语句体恐怕进行,经测算有效地打乱后的次第是那般的:

t = a+b
u = t+c
v = u+d
w_ = e+f
x_ = w_+g
y_ = x_+h
if v:
   w, x, y = w_, x_, y_

于是大家前日有了附加的一声令下并行来保持大家的流水生产线繁忙:

t, w_ = a+b, e+f
u, x_ = t+c, w_+g
v, y_ = u+d, x_+h
if v:
   w, x, y = w_, x_, y_

循环计数在预计乱序处理器中定义不太好(原文:Cycle counting becomes less
well defined in speculative out-of-order processors
),但 w 、 x 和 y
的分段和条件更新是大体不占用时间的,所以大家的以身作则差不离在四个周期中执行。

怎么样是缓存

在过去的吉日里,处理器的速度与内部存款和储蓄器访问速度匹配得很好。小编的 BBC Micro
有 二MHz ,执行一条指令大约 二μs ,存款和储蓄周期(memory cycle time)为 0.二伍μs
。在接下去的35年里,处理器已经变得快速,但内存还仅仅是那么。在 Raspberry
Pi 三 中的一个 Cortex-A53 主题,执行一条指令差不离 0.伍ns ,但也许须要多达
十0ns 去拜访主存。

乍1看,这听起来像2个悲惨:大家每一遍访问内部存款和储蓄器,要等待 100ns
后才得到结果回到。下边这些事例必要开支 200ns :

a = mem[0]
b = mem[1]

而是,在事实上中,程序倾向于以相对可预测的措施去拜谒内部存款和储蓄器,同时展现时间局地性(temporal
locality
,假若自身访问两个职位,小编很或许异常快就会重复走访它)和空中局地性(spatial
locality
,就算笔者访问3个职责,笔者很大概快速就会访问它相近的地点)。缓存利用了这一个特点,以压缩访问内部存款和储蓄器的平分资金财产。

缓存是2个容积小的芯片存款和储蓄器,靠近电脑,存款和储蓄近来接纳的地址(及其左近)的始末的副本,以便它们在此起彼伏访问中高速可用。有了缓存,上面的例子会履行二个多
拾0ns :

a = mem[0]    # 100ns delay, copies mem[0:15] into cache
b = mem[1]    # mem[1] is in the cache

从 Spectre 和 Meltdown
的角度来看,主要的某个是,假设能够总括内部存款和储蓄器访问的时间,就可以判断所走访的地方是还是不是在缓存。

怎样是缓存

在过去的好日子里,处理器的速度与内部存款和储蓄器访问速度匹配得很好。笔者的 BBC Micro
有 2MHz ,执行一条指令大概 二μs ,存款和储蓄周期(memory cycle time)为 0.贰5μs
。在接下去的35年里,处理器已经变得急迅,但内部存款和储蓄器还仅仅是那么。在 Raspberry
Pi 三 中的一个 Cortex-A5三 主旨,执行一条指令差不离 0.5ns ,但只怕需求多达
十0ns 去拜访主存。

乍壹看,那听起来像3个不幸:我们每一趟访问内部存款和储蓄器,要等待 100ns
后才得到结果再次回到。上面这么些例子须求开销 200ns :

a = mem[0]
b = mem[1]

但是,在骨子里中,程序倾向于以相对可预测的章程去做客内部存款和储蓄器,同时展现时间局部性(temporal
locality
,假如自个儿访问3个地点,小编很恐怕快捷就会重复访问它)和空中局地性(spatial
locality
,要是自个儿访问二个地点,小编很或许飞速就会造访它附近的职位)。缓存利用了那几个特征,以减掉访问内部存款和储蓄器的平分资金财产。

缓存是七个体量小的芯片存款和储蓄器,靠近电脑,存储方今应用的地方(及其左近)的内容的副本,以便它们在继续访问中急忙可用。有了缓存,上边的事例会实施三个多
100ns :

a = mem[0]    # 100ns delay, copies mem[0:15] into cache
b = mem[1]    # mem[1] is in the cache

从 Spectre 和 Meltdown
的角度来看,主要的有些是,如若能够总结内部存款和储蓄器访问的小时,就可以判断所走访的地址是或不是在缓存。

怎么是侧信道

维基百科zh-cn

侧信道攻击(罗马尼亚语:Side-channel
attack)是一种攻击格局,它根据从密码系统的情理达成中获得的音信而非暴力破解法或是算法中的理论性弱点(较之密码分析)。例如:时间音讯、功率消耗、电磁走漏或甚是声音能够提供额外的新闻来源,这可被应用于更为对系统的破解。

Spectre 和 Meltdown 是侧信道攻击, 它预计出内部存款和储蓄器地点的内容,
而内部存款和储蓄器地点一般不应使用定时来观看当前缓存中是否留存另二个可访问的职务。

什么样是侧信道

维基百科zh-cn

侧信道攻击(爱尔兰语:Side-channel
attack)是壹种攻击格局,它依据从密码系统的情理实现中拿走的新闻而非暴力破解法或是算法中的理论性弱点(较之密码分析)。例如:时间音信、功率消耗、电磁走漏或甚是声音能够提供额外的音讯来自,那可被利用于进一步对系统的破解。

Spectre 和 Meltdown 是侧信道攻击, 它预计出内部存储器地点的始末,
而内部存款和储蓄器地方壹般不应使用定时来观望当前缓存中是或不是存在另一个可访问的职位。

总结

明日让大家来看看估算和缓存是如何结合在一道去允许3个像 Meltdown
的对电脑的抨击。考虑上面的例证,那是1个用户程序,从贰个野鸡(内核)地址读取,导致三个谬误(崩溃):

t = a+b
u = t+c
v = u+d
if v:
   w = kern_mem[address]   # if we get here, fault
   x = w&0x100
   y = user_mem[x]

前几日,如果大家能磨练分支预测器相信 v 大概是非 0
的,我们双路乱序超标量处理器将会这么打乱程序:

t, w_ = a+b, kern_mem[address]
u, x_ = t+c, w_&0x100
v, y_ = u+d, user_mem[x_]

if v:
   # fault
   w, x, y = w_, x_, y_      # we never get here

不怕计算机总是从水源地址地读取, 它也非得延迟所发生的失实, 直到它驾驭 v
是非零的。从外表上看,那感觉很安全,因为:

  • v 为零,因而不合法读取的结果不会被交给到 w
  • v 为非零,但在将读取提交到 w 在此之前发生故障

只是,假如大家在推行代码从前清空缓存,并排列 a、b、c 和 d, 以便 v
实际上是零。今后,在第1周期中推测读取

v, y_ = u+d, user_mem[x_]

将访问用户地址 0x000 或地点 0x100
,具体取决于违规读取的结果的第陆人,将该地点及其左近加载到缓存中。由于 v
为零,因而将舍弃猜度性指令的结果,并继续执行。若是我们对中间1个地方进行三番五遍访问,
大家就能够规定哪些地点在缓存中。恭喜您,你刚刚从根本的地方空间读取了壹位!

真正的 Meltdown
利用比这更是复杂(特别是为着幸免不当地陶冶分支预测器,作者更乐于无偿地执行违法读取并处理结果至极),但原理是均等的。
Spectre 使用类似的不二等秘书籍来颠覆软件数组边界检查。

汇总

近来让我们来看看推断和缓存是如何整合在共同去允许三个像 Meltdown
的对电脑的攻击。惦念上边包车型地铁例子,那是一个用户程序,从二个野鸡(内核)地址读取,导致3个张冠李戴(崩溃):

t = a+b
u = t+c
v = u+d
if v:
   w = kern_mem[address]   # if we get here, fault
   x = w&0x100
   y = user_mem[x]

近期,假诺大家能磨练分支预测器相信 v 可能是非 0
的,我们双路乱序超过标准量处理器将会那样打乱程序:

t, w_ = a+b, kern_mem[address]
u, x_ = t+c, w_&0x100
v, y_ = u+d, user_mem[x_]

if v:
   # fault
   w, x, y = w_, x_, y_      # we never get here

纵然计算机总是从基础地址地读取, 它也必须延迟所发生的一无可取, 直到它知道 v
是非零的。从外表上看,那感觉很安全,因为:

  • v 为零,因而违规读取的结果不会被交付到 w
  • v 为非零,但在将读取提交到 w 此前产生故障

而是,假如咱们在履行代码以前清空缓存,并排列 a、b、c 和 d, 以便 v
实际上是零。未来,在第2周期中臆度读取

v, y_ = u+d, user_mem[x_]

将做客用户地址 0x000 或地方 0x100
,具体取决于非法读取的结果的第⑧位,将该地址及其相近加载到缓存中。由于 v
为零,因而将遗弃猜测性指令的结果,并继续执行。若是大家对当中三个地址进行后续访问,
大家就足以明确哪些地点在缓存中。恭喜你,你碰巧从水源的地址空间读取了壹人!

确实的 Meltdown
利用比那进一步复杂(尤其是为着制止不本地磨炼分支预测器,笔者更愿意无偿地实施违法读取并处理结果很是),但原理是一致的。
Spectre 使用类似的方式来颠覆软件数组边界检查。

结论

当代电脑不遗余力地维持抽象,即它们是直接待上访问存款和储蓄器的相继的标量机器。而实质上利用过多技能,包蕴缓存、指令重排和测度,能够提供比简单处理器更加高的习性。
Meltdown 和 Spectre
是大家在空虚的背景下对安全进行推理的例证,然后在抽象和实际之间遭受细微的距离。

在 Raspberry Pi 中,ACR-VM1176、Cortex-A7 和 Cortex-A五三宗旨的缺乏揣摸作用使大家对那体系型的攻击免疫性。

结论

现代处理器不遗余力地保证抽象,即它们是直接待上访问存款和储蓄器的壹1的标量机器。而实际利用过多技艺,包罗缓存、指令重排和估量,能够提供比简单处理器越来越高的性质。
Meltdown 和 Spectre
是大家在空虚的背景下对平安展开推理的例证,然后在空虚和求实之间碰着细微的异样。

在 Raspberry Pi 中,A猎豹CS陆M1176、Cortex-A7 和 Cortex-A伍三核心的贫乏推断功效使大家对这体系型的口诛笔伐免疫性。