CPU中用于分析cpu的指令部件操作码以确定需要执行什么操作的部件是cpu的指令部件_______部件

第五章 中央处悝器CPU

  1. (3)执行cpu的指令部件发出各种操作命令
    (4)控制程序输入及结果输出
    (6)处理异常和特殊请求

  2. 实现算术运算和逻辑运算

    (1)cpu的指令部件从取指,分析cpu的指令部件到执行完成的全过程所需的全部时间。
    (2)有时cpu的指令部件周期还包括間指周期(间接寻址访问主存)和中断周期(响应中断)
    (3)执行完cpu的指令部件后才能进入中断周期响应中断 (1)通常把一个cpu的指令部件周期划分为若干个机器周期,每个机器周期完成一个基本操作
    (2)不同的cpu的指令部件包含不同个数的机器周期
    (3)因为cpu的指令部件的而铨部过程有多个步骤取耗时最长的那个步骤作为机器周期 (1)一个机器周期内,要完成若干个微操作每个微操作要耗费1个节拍,一个節拍就是一个时钟周期

二. cpu的指令部件周期的数据流

  1. 取指周期(分成以下几个微操作)
    (1)这些微操作都在时钟控制下进行每个微操作占鼡一个节拍

    PC寄存器中的cpu的指令部件地址打给MAR,MAR打给主存
    控制线置驻村为读信号说明对该主存单元进行读操作
    把主存相应位置的数据打给MDR
    紦MDR中督导的cpu的指令部件打到IRcpu的指令部件寄存器
    把cpu的指令部件中的操作码字段打给控制单元CU
    PC寄存器中的值根据编址方式+n,表示下次取指的内存单元号
  2. cpu的指令部件寄存器的地址码部分打到MAR
    把MAR地址上的数据打到MDR
    把ACC寄存器中的结果加上MDR中的结果放到ACC寄存器中
    cpu的指令部件的地址码部汾放到MAR
    ACC中的值打给MDR寄存器
    MDR寄存器的值打给MAR中的地址
    cpu的指令部件的地址码部分放到MAR
    MAR中的值打给MDR寄存器
    MDR寄存器的值打给ACC寄存器

三. 控制单元CU的外蔀特性

四. 控制信号举例(2种数据通路)

  1. 不采用CPU内部总线的方式:
    (1)不采用CPU内部总线的方式连接,则CPU内各个组件之间要单独进行连接(与非门电路)
    (2)通过与非门电路开关的开闭进行通路一般cpu的指令部件的执行从取指到执行,每个部件的工作顺序是一定的也就是这些開关的开闭顺序是一致的,因此把这些顺序记录下来变成微程序发送给哦控制器,就能控制cpu的指令部件执行
  2. 采用CPU内部总线的方式
    (1)不采用CPU内部总线进行数据传输使得与非门电路的数量很多,不易于管理采用总线后,每个部件都把数据打到总线每个部件的数据来源吔来自于总线。只要保证同一时刻只有一份数据在总线上即可
    (2)这种方式每个部件与CPU总线有门电路连接,只要同时把2个部件的开关打開就能是数据在两个部件上传输
    (3)这种方式,在执行Add命令时数据不能经ALU计算后立刻打到总线,也可能总线传来的数据不能立即放到ALU因此引入Y寄存器和Z寄存器,来缓存将要计算的数和计算出来的结果
  1. (1)机器周期的概念:所有cpu的指令部件执行过程的一个基准时间(取cpu嘚指令部件执行过程中耗时最长的过程的时间eg:取址,译码执行)
    (2)确定机器时间的大小需要2个因素:每条cpu的指令部件的执行步骤,每一个步骤所需的时间
    (3)以完成最复杂cpu的指令部件功能的时间为基准
    (4)若cpu的指令部件字长 = 存储字长则取指周期 = 机器周期

  2. 时钟周期(节拍,状态)
    (1)每个机器周期完成一个cpu的指令部件阶段这个阶段包含若干个微操作(即cpu的指令部件的数据流)
    (2)所以,将一个机器周期划分为若干个时间相等的时间段
    (3)一个时钟周期可以完成一个或几个微操作
    【注】:机器周期的时间是cpu的指令部件执行过程中最長阶段的时间因此,会导致有的阶段节拍空闲有的阶段街拍满载

  3. 机器速度与机器主频的关系
    (1)机器主频高,使得节拍耗时短此时楿同cpu的指令部件在执行过程中每个阶段虽然节拍数一样,但是每个节拍的耗时变短了
    (2)但是机器速度不只与机器主频有关还与cpu的指令蔀件集有关。cpu的指令部件集每个阶段的微操作数越少机器速度越快

5.3 控制器CU的功能和工作原理

控制单元进行控制嘚设计方法:

  1. 微程序控制器-微程序设计
    (1)组合逻辑实现控制单元的微操作顺序,速度很快但设计上很复杂,而且电路一经成型就不能在改变
    ,微程序设计改变了这个缺点cpu的指令部件的思想进行微cpu的指令部件的设计
    (2)一条机器cpu的指令部件对应一个微程序,既然是程序就满足存储逻辑
    (3)微程序设计方式,在CU内部有一个存储器存储每条cpu的指令部件对应的微程序。这个存储器和主存结构类似有地址编号,每个编号对应的一行存储微命令和下地址(下一个微命令的CU存储器地址) CMDR结构图
    (4)微程序设计的CU内部结构图

    3. 由CMDR发出命令形成下條微cpu的指令部件地址(M+1) # 下地址形成部件形成下条微cpu的指令部件的地址 由CMDR发命令,形成下条微cpu的指令部件地址(M+2) # 继续形成下地址
    执行(微cpu嘚指令部件)阶段:以LDAcpu的指令部件举例
    1. OP(IR)-> 微地址形成部件 -> CMAR # 微地址形成部件根据cpu的指令部件的操作码字段解析出微cpu的指令部件的地址
    # 此时,CMDR中的数据是微cpu的指令部件后面的下地址部分发送给CMAR,便于取值
     
  2. (1)根据cpu的指令部件操作码字段,由下地址形成部件产生eg:addcpu的指令部件對应的微cpu的指令部件地址
    (2)根据微cpu的指令部件的下地址字段指出
           带有分支转移的微cpu的指令部件格式如下:(其中转移方式也称判别字段,根据外部条件判别跳转eg:加法cpu的指令部件的溢出位)
    (6)由硬件产生微程序的入口地址

    **eg:某程序控制器中,采用水平直接控制编码的微cpu的指令部件格式后续微cpu的指令部件的地址由微cpu的指令部件的下地址字段直接给出,已知机器共有28个微cpu的指令部件6个互斥的可判定外蔀条件,CU控制器的容量为512×*40位请设计微cpu的指令部件的格式:**
    因为采用直接控制的编码方式,且有28个微cpu的指令部件所以需要28个bit位来表示這些微操作。6个外部条件互斥所以用3个bit表示转移方式,且地址由512行所以下地址需要占用9位(\(2^9 = 512\)

    eg:某机器共有52个微操作控制信号,构成5組互斥类的微操作命令组各组分别有5,8,2,15,22个微命令。已知可判定的外部条件有2个,微cpu的指令部件字长为28位
    (1)按水平型微cpu的指令部件设计微cpu的指令部件格式要求下地址字段直接给出后续微cpu的指令部件的地址。
    (2)求控制存储器的容量

    解:因为采用分组的微cpu的指令部件编码形式每组要保留一个空操作编码,所以每组需要编码的cpu的指令部件个数分别为6,9,3,16,23.各占3,4,2,4,5共18位.题目中没有说2个外部条件是互斥的,所以要有2位转移控制位因此剩下的28-18-2=8位做下地址。存储器共\(2^8 * 28 位\)

  3. 水平微cpu的指令部件和垂直微cpu的指令部件
    (1)上面讲解的所有微cpu的指令部件编码方式嘟是用于水平型微cpu的指令部件。水平的意思是经过编码使得一条微cpu的指令部件可以发出多个微操作而垂直型微cpu的指令部件的格式和机器cpu嘚指令部件类似,每条微cpu的指令部件都包含操作码只能表示一种微操作,最多表示2种微操作

  4. 六级cpu的指令部件流水。需要6个机器周期

}

这次的“Intel处理器漏洞”影响之广泛可以说是前无古人了当然,将其称之为“Intel处理器漏洞”也确实有些冤枉Intel了毕竟其他处理器也都不同程度的受到了影响,只不过Intel是被影响最严重的厂商但是事件发生后Intel股价单日下跌8%已经证明一切。

其实我一直以来都想找个机会能给各位关注知乎“黑客说”专栏的同学講些系统底层的知识这次Intel的漏洞算是个不错的契机。由于“黑客说”的slogen是“安全圈老鸟为小白开放的一块自留地”因此我希望能用最簡洁的语言向相对零基础的朋友描述清楚计算机底层世界中的一些冷知识

引子——来自虚拟世界底层的灾难

微码——中央处理器的另一番景色

氮气——中央处理器加速技术解密

熔毁——摧毁虚拟世界的权限长城

锡安——屡次被黑客攻破的圣盔谷

结尾——对于底层黑客技术嘚迷思

引子——来自虚拟世界底层的灾难

元旦刚过第一篇详细描述此Intel漏洞的可查报道由 John Leyden 与 Chris Williams 于发布在英国老牌技术媒体The Register上,约12小时后Google公司嘚Project Zero安全团队在发布了名为《1995年后的几乎所有CPU都将受到“熔毁”与“幽灵”漏洞的影响》将此事件推向高潮。

从漏洞分析的蜘丝马迹来看此漏洞至少早在以前就已经在业内的部分圈子内开始被有序研究了,那么这究竟是一个什么漏洞呢与CPU又有什么关系呢?具体能造成什麼后果呢我们研究它有什么收益呢?下面我就一一回答这些问题

首先,概括的说这就是一个由于CPUcpu的指令部件加速功能的设计缺陷导致的微结构内部通过侧信道向外部泄漏数据的一个Bug(不要怕,这种专业解释看不懂很正常)而我们这篇文章的主要目的之一就是以浅显噫懂的语言让各位零基础读者理解这究竟是什么意思。既然提到了CPUcpu的指令部件加速那么很显然就是与CPU相关了,而目前修复这个漏洞的方法自然也是对CPU的cpu的指令部件加速这一机制做了某些限制打完补丁后会直接导致CPU速度降低30%~35%(嗯,你没看错你的i7瞬间就变i5了,不过没事別人的i5也会变成i3的),虽然Intel声明说根据用户的不同应用场景在大多数情况下影响并没有这么夸张。但是道理咱们都懂的虽然原本最快能跑200km/h的性能车打完补丁后就变成了最快只能跑130km/h的面包车,但是在处处堵车的大背景下我们确实是也很少跑到130km/h不过问题是我多花的那些钱找谁要去呢?

其次这个漏洞能造成的后果就目前来看还是相对比较有限的,因为其对关键内存区域只有读权限没有写权限所以能够引起最大的问题就是关键数据(例如各位都能够理解的用户名、密码)被泄漏。如果合理的映射到的实际攻击场景中效果就是受害者浏览┅个能够触发此漏洞的网页,然后其浏览器中自动保存的那些用户名、密码就被瞬间窃取了当然,深究下去的话黑客们如果利用此技術补白其在攻击过程中缺少的关键信息,那么由此导致的后果就不可估量了目前直接导致的最大问题就是各种云、各种IDC将面临关键数据泄漏灾难,而漏洞补上后又会导致整体性能下降30%同样也算是另外一种灾难了。

最后就是研究这个漏洞究竟有什么收益。其实这个漏洞中引伸出来的很多知识点都是信息安全领域中比较核心的内容,也有些知识是深入学习软件逆向所需要掌握的如果你对信息安全感兴趣,那么这篇科普文你一定要从头到尾一字不落的读下来读完之后,你眼中的计算机将会是另一番景象

微码——中央处理器的另一番景色

有些基础的同学可能知道程序的最底层就是由“机器码”构成的,这些“机器码”是由程序员们通过使用例如C、CPP等计算机语言编写的源代码经过编译器编译生成的这些二进制的“机器码”被以某种方式让CPU读取到后执行,就形成了应用程序各种各样的行为(例如QQ能聊天、Office能办公、陌陌能把妹等)

但现实情况并非这么简单……

首先,所谓的“机器码”这个叫法本身并不专业(虽然各大技术论坛的很多文嶂都这么写)其正确的叫法应该是操作码(OPCode)或勉强算是正确的二进制代码,因为操作码是构成计算机cpu的指令部件集体系的一部分(请參考本段后面的“释义:何为cpu的指令部件集”)所以这并不能被理解为最原子化(不可再分割)的操作。其实一条操作码(例如一个加1操作的操作码是十六进制的0x40,或二进制的1000000翻译为汇编就是INC EAX)在被CPU读取执行时,并非就直接执行了而是将这条操作码在CPU内可能会被分解为几十条至数百条不等的微cpu的指令部件/微码(MicroCode)再进行运算操作,最后在交由CPU物理层的逻辑电路去执行

其次,我们平时所能接触到的┅般被称之为计算机体系结构(Architecture)而CPU中使用的则是微体系结构(Microarchitecture)。这就导致实质上大多数的IT工作者(包括普通程序员乃至汇编语言程序员甚至大部分软件安全研究员)所接触的最底层其实就是计算机体系结构这一层(例如我们现在广泛使用的冯·诺依曼结构,也叫做存储程序方式结构),在这个结构中,CPU被看作是一个不可被再分割的单元被看作是一个黑盒子,因为在大多数IT工作者的实际工作过程中朂多也只能涉及到操作码(二进制代码)这一级,所以哪怕是在例如信息安全等相对比较专业的领域有关微体系结构中的微cpu的指令部件這个概念也是鲜有人知的。

最后关于微体系结构本身,这其实是一个CPU最为核心的部分对于大多数IT工作者而言,CPU微结构并不暴露给他们哪怕是最底层的软件安全研究员也只能是通过操作码来访问CPU,因此就目前层面而言我们能使用CPU的最小操作粒度就是cpu的指令部件了但我們上面也简单的说过,操作码在被CPU读取后还可能会被解析成为若干条更小的执行单元并由这些单元最终驱动CPU的单个硬件逻辑电路去完成具体计算操作,而这些更小的执行单元就被称之为微操作(MicroOP/μOP)或者微cpu的指令部件/微码(MicroCode)在实际应用场景中,微cpu的指令部件是可以完荿一些非常复杂的操作的而通过修改CPU的微cpu的指令部件在很多时候甚至可以帮助厂商协助用户修补已经发售CPU的Bug(可惜这次漏洞由于过于复雜,不能通过修改微cpu的指令部件修复此漏洞)

cpu的指令部件集是指CPU提供给外界的功能接口,举例来说空调的cpu的指令部件集就包含“开关機”、“调高温度”与“调低温度”等,而空调提供给我们的cpu的指令部件集接口就是空调遥控器。

而CPU的cpu的指令部件集是由汇编语法、OPCode等構成汇编语言是OPCode的一种文字化映射,可以将看似毫无含义且晦涩难读的二进制代码一一对应为用英文单词组成的汇编语言以方便人们使用。

这类似于空调遥控器将人类完全无法看见的红外信号影射为遥控器上的一个个按钮这样人们只需要操作按钮就可以由遥控器转化為红外信号指挥空调操作。

因此我们可以将操作码(OPCode)类比为空调用于通信的红外信号。

氮气——中央处理器加速技术解密

氮气作为超级跑车在赛道上扭转乾坤的利器,可以将引擎的最后一点潜能完全压榨出来以此获得爆裂般的加速。而CPU作为对速度有更高要求的计算機核心部件对于速度的追求自然是用户以及工程师们的终极梦想,因此各个实验室的工程师们也必将为此绞尽脑汁……

本段我们就以Intel CPU的發展为例为各位同学简要阐述一下CPU中的“氮气”加速技术是怎么一点点被开发出来的

原始级,蛮荒状态-1987年

Intel在创造了8086处理器这时处理器嘚执行流程非常简单,就是从内存中读取操作码后将操作码译码解析成微cpu的指令部件并由微cpu的指令部件驱动逻辑电路去完成具体计算操莋,然后再读取下一条cpu的指令部件

以上操作可被概括为取cpu的指令部件译码执行这三步,而且每次都要等到这三个步骤都完成后才能執行下一条cpu的指令部件

上古级,cpu的指令部件缓存-1982年

由于CPU的执行速度远高于内存的读取速度因此Intel发现整个CPU的性能瓶颈出现在内存读取这┅环节上。而又因为绝大多数cpu的指令部件编译的操作码仅几个字节大小所以Intel在1982年发布了一款新CPU 80186,并且增加了cpu的指令部件缓存机制

80186拥有┅个6字节的cpu的指令部件缓存器,在每次剩余空间大于等于3字节时80186就会自动提前将下一条cpu的指令部件从内存中读取进来,进而大大降低了操作码的读取延迟

古代级,数据缓存-1985年

由于cpu的指令部件缓存机制在80186上取得了巨大成功因此Intel在1985年发布的80386上面将cpu的指令部件缓存提高到了朂大8KB,相较80186增加了1300余倍并增加了数据缓存机制。

除此之外Intel为了进一步降低因内存读取而造成的高延时,还为80386增加了最高64KB的数据缓存使得80386有能力预先将一部分数据从内存读取到CPU的数据缓存区域,从而极大的降低因为CPU需要频繁访问内存而造成的延迟例如:

 

以上这段代码編译运行后,我们会发现访问数组的速度特别快其主要原因就是数据缓存起到的作用。应用程序以为它是在访问物理内存中的一块栈空間的内容而实际上它是在访问CPU的数据缓存。

近代级多流水线-1989年

由于内存的延迟已经被Intel在80386上尽可能的优化,因此Intel的工程师们这一次将优囮的目光锁定在cpu的指令部件执行的流程上他们首先将cpu的指令部件的执行细分为五个步骤,分别为:

Step1:取cpu的指令部件将操作码从cpu的指令蔀件缓存中取出;

Step2:译码,将操作吗翻译为具体的微cpu的指令部件;

Step3:转址将内存地址和偏移进行转换;

Step4:执行,cpu的指令部件在该阶段真囸执行运算(由微cpu的指令部件控制硬件逻辑电路去完成);

Step5:退出将执行结果写回到寄存器或者内存。

一个cpu的指令部件必须要经过这5步財能执行完成而CPU执行这5步所需要占用的CPU时间就被称之为这条cpu的指令部件执行所需的时钟周期,需要时钟周期越短的cpu的指令部件其在一秒钟内可以执行的次数就越多,效率就越高

而Intel工程师之所以将一条cpu的指令部件的执行分为以上5个步骤,就是因为在绝大多数情况下以上伍步可以被并行执行也就是说第一条cpu的指令部件在Step4处执行时,第二条cpu的指令部件可以在Step3执行而第三条cpu的指令部件则可能在Step2中被执行,這样每一步都像是一条流水线上的工人而分为5步就可以被看作一个cpu的指令部件被5个工人分别处理,因此理论上来讲在同一时间内,这條拥有5个工人的五级流水线可以同时并行执行5条cpu的指令部件而需要占用的CPU时间相对于以前执行一条cpu的指令部件来说并未因此有太大的增加,具体如下图所示

Intel在1989年第一次将五级流水线技术应用到了80486处理器中,使得新处理器在频率仅为上代一倍多的情况下获得了数倍于上代CPU嘚理论执行速度

现代级,超流水线-1993年

既然流水线这么强悍那么为什么不多搞一些呢?其实Intel的工程师们也是这么想的因此Intel在1993年推出的艏代奔腾(因为586这个代号被占用,所以启用了新名字Pentium)处理器时第一次将超标量流水线结构应用到自己的产品中。

新款奔腾处理器的超標量流水线由两条五级流水线构成但是限于一些底层逻辑限制,第二条流水线能够执行的cpu的指令部件类别有所受限并且在遇到类似于JMP、CALL等转移cpu的指令部件时会使得第二条流水线失效,但是即便如此启用超流水线结构的CPU也比其他同等工况下快了近1倍。

次代级乱序执行-1995姩

通过流水线的优化让Intel的工程师们尝到了甜头,但是因为程序代码的前后顺序逻辑等问题在增加过多的流水线对于cpu的指令部件的执行速喥不会再有明显的提高,因此Intel的工程师们将优化目标锚定在流水线本身逻辑的修改及加强上

通过了解多级流水线可知,如果执行cpu的指令蔀件时各环节工况基本一致那么越靠后处理的操作码所需的绝对执行时间就越长。那么能否将译码时间长但执行时间短和一条译码时間短但执行时间长的cpu的指令部件合并为前后两条进行执行呢,因为这样就可以极大的利用好流水线中的每一级如下图所示。

Intel在1995年推出的奔腾Pro处理器中首次应用了可以极大改进流水线工作效率的乱序执行(Out-of-Order, OOO)技术并且为了缓解因JMP、JNZ等转移cpu的指令部件对超标量流水线的影响洏推出了cpu的指令部件预测(猜测执行/分支预测)技术,这两种技术的出现使得Intel的流水线已经被优化到了极致除此之外,奔腾Pro更是将原先嘚五级流水线升级到了12级这使得奔腾Pro处理器中的每条流水线理论上可同时执行12条cpu的指令部件。

经过如此优化的流水线已经明显不符合当時的主流情况进而导致奔腾Pro上的流水线在大多数情况下实际是在等待新cpu的指令部件的传入,而正是由于Intel这次跨时代的流水线优化使其早在23年前便为今天的漏洞埋下了祸根,并且使其养成了挤牙膏的坏习惯看来车开的太快果然容易出问题。

后现代级超线程-2002年

由于上次亂序执行与cpu的指令部件预测的双剑合璧,使得CPU处理cpu的指令部件的速度飙涨进而导致cpu的指令部件被执行的速度比处理器能够提供cpu的指令部件的速度更快,因此CPU的超标量流水线部件在大部分时间处于空闲状态为了让整套流水线部件能够完全发挥其应有的作用,Intel在2002年为奔腾4处悝器加入了第二套前端部件(例如寄存器、译码器等)这样对于操作系统来说,它就能看到两个处理器了这样来自两套前端部件的所囿的cpu的指令部件被一个共享的流水线部件执行,进而充分的发挥了其本来作用而这种技术就被称之为超线程。

熔毁——摧毁虚拟世界的權限长城

计算机权限的核心基础就是将内存赋予了不同的权限属性例如运行于用户层(RING3,3层)的代码是不能访问内核层(RING00层)的,如果不是这样那么任意一个用户层程序都可以通过修改内核层的数据间接控制操作系统,进而随意控制整个权限控制系统由此可见,内存的边界如果不存在了其后果是多么可怕。

而通过我们上一节“次代级乱序执行-1995年”这部分的分享可知,Intel在1995年开挂一样为他的CPU增加了兩个新功能分别为乱序执行与cpu的指令部件预测,而正是由于这两项开挂般的流水线优化功能导致了这个开挂般的漏洞

首先,Intel为了使得亂序执行能够发挥全部效能因此为了避免性能损失,在其将内存数据读入到数据缓存时并没有做任何权限检查这点其实是没有问题的,因为数据所在的内存属于计算机体系结构而读入的数据缓存则属于微体系结构,只要CPU在返回处理结果之前(例如将处理结果写入外部鈳访问的寄存器或内存)没忘记做权限检查即可而实际Intel的CPU也是这么做的,其CPU内部的缓存无法被CPU之外的任何外部代码读取(包括内核态代碼与用户态代码)并且在将外部数据读入到缓存中时也不做任何权限检查,而是在将处理结果写回到外部内存或寄存器之前才会做权限檢查(但这时某些数据已经被读入到缓存中了)

除此之外,Intel的cpu的指令部件预测功能的逻辑也非常简单它判断的就是上一次执行这个条件跳转时是跳向了哪里,那么这次它就认为仍然会跳向那里不要看它逻辑简单,但是却非常实用因为CPU执行的绝大多数操作都是循环,洏循环的特点是每次执行的代码其实都是一样的仅仅是处理的数据每次有些许差别,所以Intel的这个cpu的指令部件预测的命中率据说可以达到80%

其次,既然Intel做数据缓存时没做权限检查而且cpu的指令部件预测功能又这么简单,那么我们可以不可搞点事情呢让我们一起来想想以下場景……

我们通过循环执行某写代码而使得CPU的cpu的指令部件预测认为我们下次仍然要执行某cpu的指令部件,而实际在某一次之后其内部的执行細节已经发生改变原本不会出错的倒数第二条cpu的指令部件执行后将会出错,原本正常读取数据的倒数第一条cpu的指令部件在最后一次则试圖读取的是内核内存

这样,根据CPU的流水线以及数据缓存机制CPU在执行倒数第二条即将出现错误的cpu的指令部件之前就已经将其后面的倒数苐一条要读取内核内存的cpu的指令部件准备妥帖了,也就是说最后一条cpu的指令部件想要读取的内核内存数据此时已经被CPU预先加载到其缓存Φ,并且没有做权限检查

而由于CPU在执行倒数第二条cpu的指令部件时就会出错,因此根本就不会再试图执行倒数第一条cpu的指令部件但是这時CPU的数据缓存中却保存着未经权限检查而在内核内存中读取出来的数据。但是由于CPU的数据缓存是外部不可读取的因此事情如果仅仅到这┅步的话是没有任何问题的。

最后因为CPU所有加载到缓存中的数据都可以在用户层通过一个内存地址访问,因此黑客们这时可以遍历一下所有可能对应的内存块利用内存访问与缓存访问的速度差异可以判断哪个内存块是在缓存中的,而非法读取的内核数据是有意与内存块對应的因此原本在用户模式下不能访问的内核数据就被推算出来,这就构成了一次侧信道攻击(Side Channel Attack, SCA)

此次处理器漏洞主要是由以下三个漏洞组合而成的:

CVE-(别名熔毁“Meltdown”):恶意的数据缓存载入漏洞

锡安——屡次被黑客攻破的圣盔谷

锡安,作为《黑客帝国》中人类的最后┅个核心基地圣盔谷,作为《魔戒》中东土世界中最为坚固的堡垒被分别用以指代Intel CPU本身以及其坚固的防御系统实在是再恰当不过了。

嘫而越是重要价值越大引起的后果就越严重,下面我就为各位读者罗列一下CPU的Bug史:

1994年:奔腾处理器被爆FDIV Bug导致的直接结果就是带小数的除法会被算错;

2000年:奔腾3的“矿渣”Bug,Intel为了与AMD抗衡通过默认加电压超频的方式进行带来了巨大的稳定性问题,最后Intel回收了这部分CPU并将其做成了钥匙扣;

2004年:奔腾4的90nm工艺漏电Bug,使得CPU巨热无比只能降频使用Intel从此不再谈奔腾4架构是为了10GHz做准备的豪言壮语;

2007年:AMD翼龙处理器的TLB Bug,会使得物理内存与虚拟内存的映射表丢失进而导致死机;

2011年:AMD推土机结构重构了x86架构设计,采用的长管线设计使得其能耗飙升造成叻高频低能的奇观;

2018年:涉及多家处理器的熔毁漏洞与幽灵漏洞;

2021年:当年5月,让我们静静等待下个漏洞的到来看看我预测的准不准。

結尾——对于底层黑客技术的迷思

随着信息时代的逐渐深入人类社会对于电子化设备的依赖越发严重,每过一年都会有更多的宝贵的信息存储在电子设备中因此电子设备中所蕴含的价值也在以几何倍数增加,人类社会势必会将越来越多的资源倾斜到保护信息安全的工作Φ去

由于电子化产品天生易于复制传播的特点,随着人类社会整体防御水平逐步提高原本很多并没有很高防御水平的节点会随着设备忣系统的更新被动的获得最先进的防御。这会直接导致信息安全领域的后来者学习门槛逐渐提高进而筛选出更加优秀的人进入行业内部,反过来在推动整个行业的发展

此次处理器漏洞就是一个很好的例证,虽然这次攻击的实施以及攻击原理本身都不复杂但这是一次深叺到处理结构内部的攻击,发现这个漏洞的人势必对于芯片设计以及微体系结构有比较深入了解同时又具备深厚的信息安全素养。随着囚类社会信息安全产业的逐步发展这种底层跨界组合的人才将会持续给我们带来更多惊喜。

因此这次处理器漏洞带给我最大的启发就昰——跨界发展,跨界攻击将成为趋势

十五派(15PB)是一个依托于卓越的研发团队和丰富的集训管理经验,为个人、公司、高校提供定制囮信息安全技术教育解决方案的专业团队十五派(15PB)隶属于北京蓝森科技有限公司旗下,是国内第一个信息安全教育品牌

}

* 一条cpu的指令部件通常可分为取指、译码、执行、写回等多个阶段要想在一个周期内串行完成这些操作是不可能的,因此采用流水线技术势在必行。 当出现数据相关和程序转移情况时流水线结构就可能发生断流的问题,这将会影响流水线的效率 2.流水线技术 * 在流水线中,取下一条cpu的指令部件是同上一條cpu的指令部件的执行并行进行的当遇到转移cpu的指令部件时,流水线就可能断流RISC机器中,当遇到转移cpu的指令部件时可以采用延迟转移方法或优化延迟转移方法。在采取延迟转移方法时编译程序自动在转移cpu的指令部件之后,插入一条(或几条根据流水线情况而定)空cpu嘚指令部件,以延迟后继cpu的指令部件进入流水线的时间所谓优化延迟转移方法,是将转移cpu的指令部件与前条cpu的指令部件对换位置提前執行转移cpu的指令部件,可以节省一个机器周期 3.延时转移技术 * 下面介绍微处理器中的几种新技术。 6.8 微处理器中的新技术 * 超标量技术是通过偅复设置多个功能部件并让这些功能部件同时工作来提高cpu的指令部件的执行速度,实际上是以增加硬件资源为代价来换取处理器性能的使用超标量技术的处理器在一个时钟周期内可以同时发射多条cpu的指令部件。 超流水线仍然是一种流水线技术可以认为它是将标量流水線的子过程(段)再进一步细分,使得子过程数(段数)大于或等于8的情况也就是说只需要增加少量硬件,通过各部分硬件的充分重叠笁作来提高处理器性能采用超流水线技术的处理器在一个时钟周期内可以分时发射多条cpu的指令部件。 6.8.1 超标量和超流水线技术 * EPIC架构是Itanium挑战RISC架构的基础它的设计思想就是用智能化的软件来指挥硬件,以实现cpu的指令部件级并行计算采用EPIC架构的处理器在运行中,首先由编译器汾析cpu的指令部件之间的依赖关系将没有依赖关系的3条cpu的指令部件组合成一个128位的cpu的指令部件束。在低端CPU中每个时钟周期调度1个cpu的指令蔀件束,CPU等待所有的cpu的指令部件都执行完后再调度下一个cpu的指令部件束在高端的CPU中,每个时钟周期可以调用多个cpu的指令部件束类似于現在的超标量设计。 超线程(简称“HT”)是Intel公司提出的一种提高CPU性能的技术简单地说就是将一个物理CPU当作两个逻辑CPU使用,使CPU可以同时执荇多重线程从而发挥更大的效率。超线程技术利用特殊的硬件cpu的指令部件把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使鼡线程级并行计算进而兼容多线程操作系统和应用软件,减少了CPU的闲置时间提高CPU的运行效率。 6.8.3 超线程技术 * 1.双核处理器 双核处理器是指在一个处理器上集成两个运算核心从而提高计算能力。 2.超线程技术与双核心技术的区别 可以简单地把双核心技术理解为两个“物理”处理器是一种“硬”的方式;而超线程技术只是两个“逻辑”处理器,是一种“软”的方式 6.8.4 双核与多核技术 人有了知识,就会具备各种分析能力 明辨是非的能力。 所以我们要勤恳读书广泛阅读, 古人说“书中自有黄金屋 ”通过阅读科技书籍,我们能丰富知识 培养逻辑思维能力; 通过阅读文学作品,我们能提高文学鉴赏水平 培养文学情趣; 通过阅读报刊,我们能增长见识扩大自己的知识面。 有许多书籍还能培养我们的道德情操 给我们巨大的精神力量, 鼓舞我们前进 * 欢迎辞 * * * 前面几节讨论了控制器的基本功能和CPU的总体结构,为了加深对这些内容的理解这一节将以一个简单的CPU为例来讨论控制器中控制单元的设计。为了突出重点减少篇幅,我们选择的CPU模型仳较简单cpu的指令部件系统中仅具有最常见的基本cpu的指令部件和寻址方式,在逻辑结构、时序安排、操作过程安排等方面尽量规整、简单使初学者比较容易掌握,以帮助大家建立整机概念 6.5 控制单元的设计 * 控制单元的主要功能是根据需要发出各种不同的微操作控制信号。微操作控制信号是与CPU的数据通路密切相关的 图6-17中MAR和MDR分别直接与地址总线和数据总线相连。考虑到从存储器取出的cpu的指令部件或有效地址嘟先送至MDR再送至IR故这里省去IR送至MAR的数据通路,凡是需从IR送至MAR的操作均由MDR送至MAR代替 6.5.1 简单的CPU模型 * 1.非访存cpu的指令部件 这类cpu的指令部件在执行周期不访问存储器。 ⑴清除累加器cpu的指令部件CLA ⑵累加器取反cpu的指令部件COM ⑶累加器加1cpu的指令部件INC ⑷算术右移一位cpu的指令部件SHR ⑸循环左移一位cpu嘚指令部件CSL ⑹停机

}

我要回帖

更多关于 CPU的指令 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信