8086指令集的一系列处理器,都称为x86处理器。x86处理器其实并不一定是32位的,比如说8086,实际上,在80386后才变成了32位。现在指的x86肯定是32位的了。英特尔官方将自己32位处理器架构称之为IA32,但是是一个东西。其实x86架构有很多种,比如linux选版本的下面就有386,486,586,2012年,liuux正式告别了386这个老古董。586就是奔腾初代处理器。在之后,人们渐渐意识到用这些数字称呼CPU是不靠谱的了,于是改口按照英特尔的叫法,比如说奔腾4,酷睿i7等等。软件都满足兼容,即标称386的软件同时兼容486,586的处理器内核(其实也兼容x64的处理器)。

在发展到64位的时候,INTEL纠结要不要兼容x64,于是开发了IA64,不兼容x86。狡猾的AMD率先开发了AMD64,兼容x86.英特尔看到情况不妙就发展了所谓的x86_64浏览器,意思是x86浏览器的64位扩展,也成为x64。英特尔官方将这种处理器架构称之为EM64T,上述概念基本上都是一个个东西,微微有所差别

上面的两种都属于CISC架构。MIPS是CISC中的一种。
若要问RISC架构的,那就要提ARM了。原来的苹果pad中搭载的就是arm处理器。
高通的骁龙处理器就是arm内核,华为的海思也是arm的内核。

流水线技术

流水线技术在486中开始使用。


基于X86架构的存储系统 x86架构发展历程_arm开发

基于X86架构的存储系统 x86架构发展历程_arm开发_02


上面的五级流水线,可以说是最经典的。arm9就采用这种技术。

wiki上有一张图也画的很清楚

基于X86架构的存储系统 x86架构发展历程_arm开发_03

超标量&乱序执行&超流水线技术

超标量(superscalar)是指在CPU中有一条以上的流水线,
并且每时钟周期内可以完成一条以上的指令,这种设计就叫超标量技术。 
其实质是以空间换取时间。而超流水线是通过细化流水、提高主频,
使得在一个机器周期内完成一个甚至多个操作,其实质是以时间换取空间。

简单而言就是一条流水线的有多个执行部件。比如说证书和浮点数运算所需要的运算部件不相同。像这样,不共享资源的指令可以同时进行。

超标量其实和【乱序执行】的含义很接近。

多核心技术

一般而言,一个传统CPU的包含一个1个PU和一个AS。

基于X86架构的存储系统 x86架构发展历程_超标量_04

超线程技术

让多个线程同时共享一个cpu资源。一般是两个。

一个简单的例子

我们找一个最近小有名气的香山CPU为例子简单介绍下CPU的结构

基于X86架构的存储系统 x86架构发展历程_基于X86架构的存储系统_05

上图中一些概念的解释。

  • ITLB。TLB也就是所谓的Translation Lookaside Buffer。是一种缓存,用于改进虚拟地址到物理地址的转换速度。TLB分为Instruction TLB(也就是ITLB)和 Data TLB (DTLB)。还有Second level/Shared TLB(STLB)
  • dispatch。一般而言,CPU指令分为 Control Instruction, Integer Operation, Floating-point operation or Data transfer operation。dispatch模块用来根据指令类型分配到不同的执行单元上去执行。
  • rename https://docs.boom-core.org/en/latest/sections/rename-stage.html。简单来说,通过重命名寄存值来保证执行时序。
  • MDU(Multiply-Divide Unit)处理乘法和除法
  • AGU (Address generation unit).用于计算cpu访问数据的物理地址
  • PTW(page-table-walker).负责将虚拟地址的页号翻译成物理地址的页号
  • 基于X86架构的存储系统 x86架构发展历程_超标量_06

  • MAC multiplier–accumulator (MAC unit)。执行乘法累加操作。也就是下面的形式。这是在数字信号处理中使用的常见操作