[Linux]CPU架构指令集:RISCCISCarmamdX86i386aarch64
1 前⾔
本⽂是解决在软件开发、软件交付过程中,常常需要寻与服务器硬件的CPU架构适配的软件包时,开发者和交付者⼜时常摸不着头脑、【迷迷糊糊】地就下载了某个所谓“适配”、“兼容”的各种软件包。
那么,我们真的get到了背后的关系(CPU指令集、CPU架构、CPU处理器/芯⽚、Soc(芯⽚上的系统)、x86_64架构、arm架构等等),这⼀层⾯了吗?
正本清源,⽅能以更⾼de效率去理解、学习基于此的上层知识模块,降低开发风险、提⾼⼯作效率。
扯远啦~ 赶紧⼀把回来!那么,先从CPU架构所涉及的相关概念说起~
2 基本概念
2.0 CPU := 中央处理器
Central Processing Unit,中央处理器。
CPU是计算机系统的核⼼和⼤脑,主要由控制器、运算器、存储器和连接总线构成。
其中,控制器和运算器组成CPU的内核,【内核】从存储器中提取数据,根据控制器中的指令集将数据解码,通过运算器中的微架构(电路)进⾏运算得到结果,以某种格式将执⾏结果写⼊存储器。
因此,内核的基础就是【指令集(指令集架构)】和【微架构】。
延申1:指令集(架构)
指令集是所有指令的集合,它规定了CPU可执⾏的所有操作微架构是完成这些指令操作的电路设计。
相同的指令集可以有不同的微架构,如Intel 和AMD都是基于X86指令集但微架构不同。
指令集架构( Instruction Set Architecture ),⼜称指令集或指令集体系,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集,寄存器,寻址模式,存储体系,中断,异常处理以及外部 I/O 。
指令集架构包含⼀系列的 opcode 即操作码(机器语⾔),以及由特定处理器执⾏的基本命令。
简单地来说,指令集⼀般被整合在操作系统内核最底层的硬件抽象层中,属于计算机中硬件与软件的接⼝,它向操作系统定义了CPU的基本功能。
2.1 程序语⾔代际 | 编译型程序语⾔VS解释型程序语⾔
2.1.1 计算机程序语⾔的发展代际: 3代
①第1代: 机器语⾔ (⼆进制的机器代码/指令集集合) [20世纪中期]
Eg: 00000000
机器语⾔是⼀种指令集的体系。
这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。
机器码有时也被称为原⽣码(Native Code),这个名词⽐较强调某种编程语⾔或库,它与运⾏平台相关的部份。
1)【⼆进制机器指令集合、机器可直接识别和执⾏】机器语⾔是⽤⼆进制代码表⽰的计算机能直接识别和执⾏的⼀种机器指令的集合。
2)【灵活、执⾏效率⾼】它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语⾔具有灵活、直接执⾏和速度快等特点。
3)【可移植性差、强硬件相关】不同型号的计算机,其机器语⾔是不相通的,按着⼀种计算机的机器指令编制的程序,不能在另⼀种计算机上执⾏。
②第2代: 汇编语⾔/符号语⾔ (⽤类⼈类语⾔描述指令集,即⾮指令集, x86汇编 /8086汇编 /AT&T汇编 /Intel汇编 /ARM汇编) [20世纪50年代-60年代]
Eg: ADD / MOV(数据传送指令) A,15 / HLT(中⽌) / MOV AX, 2000H(将16位数据2000H传送到AX寄存器) / MOV AX, BX(将BX寄存器的16位数据传送到AX寄存器)
汇编语⾔是⼀种⽤于电⼦计算机、微处理器、微控制器或其他可编程器件的低级语⾔,亦称为符号语⾔。
在汇编语⾔中,⽤助记符(Mnemonics)代替【机器指令】的操作码,⽤地址符号(Symbol)或标号(Label)代替指令或操作数的地址。
汇编语⾔是直接⾯向处理器(Processor)的程序设计语⾔。
处理器是在指令的控制下⼯作的,处理器可以识别的每⼀条指令称为【机器指令】。
每⼀种处理器都有⾃⼰可以识别的⼀整套指令,称为【指令集】。
处理器执⾏指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变⾃⼰内部的⼯作状态,也能控制其它外围电路的⼯作状态。
汇编语⾔和CPU息息相关,但是不能把汇编语⾔完全等同于CPU的机器指令。
不同架构的CPU指令并不相同,如x86,powerpc,arm各有各的指令系统;甚⾄同⼀种架构的CPU有⼏套指令集,典型的如arm除了有32位的指令集外,还有⼀套16位的thumb指令集。
但是作为开发语⾔的汇编,本质上是⼀套语法规则和助记符的集合,它可以包容不同的指令集。
如果从CPU体系来划分,常见的汇编有两种:IBM PC汇编和ARM汇编。
如果从未接触过汇编语⾔,建议从X86的汇编⼊⼿,硬件、软件、参考资料既多⼜便宜。
———— 摘⾃·知乎⽹友
③第3代: ⾼级语⾔ (⼈类化的程序语⾔, C++/Java/Python/C#/JavaScript等)
Eg: A=A+15
⾼级程序语⾔是⾼度封装了的编程语⾔,与低级语⾔相对。它是以⼈类的⽇常语⾔为基础的⼀种编程语⾔。
2.1.2 ⾼级程序语⾔: 编译型程序语⾔ VS 解释型程序语⾔
参见:
2.2 源代码 ----> 【编译】 ----> 【指令集(集合)】
CPU执⾏计算任务时都需要遵从⼀定的规范/语⾔,程序(可执⾏的、⼆进制机器语⾔)在被执⾏前都需要先翻译为CPU可理解的语⾔。这种规范或语⾔就是【指令集】(ISA,Instruction Set Architecture)。
程序(⼆进制执⾏程序)被按照某种指令集的规范翻译为CPU可识别的底层⼆进制代码的过程叫做【编译】(Compile)
编译的⼀般过程:
源程序分析
词法分析
语法分析
语法检查
中间代码⽣成
代码优化
⽬标代码⽣成
2.2.1 CPU指令
处理器是在【指令】的控制下⼯作的,处理器可以识别的每⼀条【指令】称为【机器指令】。
计算机指令就是指挥机器⼯作的指⽰和命令,程序就是⼀系列按⼀定顺序排列的指令,执⾏程序的过程就是计算机的⼯作过程。
在计算机中,指⽰计算机硬件执⾏某种运算、处理功能的命令称为指令。
指令是计算机运⾏的最⼩的功能单位,⽽硬件的作⽤是完成每条指令规定的功能。
2.2.2 CPU 指令集架构 / 指令集 / 指令系统
每⼀种处理器都有⾃⼰可以识别的⼀整套指令,称为【指令集】。
处理器执⾏指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变⾃⼰内部的⼯作状态,也能控制其它外围电路的⼯作状态。
处理器【指令集】只是定义了硬件与软件(含OS)之间的接⼝、标准规范,⽽不定义处理器的实现
⼀台计算机上全部指令的集合,就是这台计算机的指令系统。
指令系统也称指令集,是这台计算机全部功能的体现。
⽽⼈们设计计算机⾸要考虑的是它拥有的功能,也就是⾸先要按功能档次设计指令集;然后,按指令集的要求在硬件上实现。
指令系统不仅仅是指令的集合,还包括全部指令的指令格式、寻址⽅式和数据形式。
概念
CPU指令集架构,简称指令集
CPU指令集架构
:= ISA(Instruction Set Architecture)
:= 指令集
≈指令系统
:= 决定/指导/规范处理器架构
!= 微架构
总分类(判断依据:指令系统是否精简): RISC VS CISC
x86架构和arm架构区别【CISC】
CISC(Complex Instruction Set Computer, 复杂指令系统计算机),除了RISC,任何全指令集计算机都使⽤的是复杂指令集计算(CISC)。
常见使⽤CISC的处理器主要有X86.
从计算机诞⽣以来,⼈们⼀直沿⽤CISC指令集⽅式。
早期的桌⾯软件是按CISC设计的,并⼀直沿续到现在。⽬前,桌⾯计算机流⾏的x86体系结构即使⽤CISC。
微处理器(CPU)⼚商⼀直在⾛CISC的发展道路,包括Intel、AMD,还有其他⼀些现在已经更名的⼚商,如TI(德州仪器)、IBM以及VIA(威盛)等。
在CISC微处理器中,程序的各条指令是按顺序串⾏执⾏的,每条指令中的各个操作也是按顺序串⾏执⾏的。
顺序执⾏的优点是控制简单,但计算机各部分的利⽤率不⾼,执⾏速度慢。
CISC架构的服务器主要以IA-32架构(Intel Architecture,英特尔架构)为主,⽽且多数为中低档服务器所采⽤。
【RISC】
RISC(reduced instruction set computer,精简指令集计算机)是⼀种执⾏较少类型计算机指令的微处理器。
纽约约克镇IBM研究中⼼的John Cocke证明,计算机中约20%的指令承担了80%的⼯作,他于1974年提出了RISC的概念。
⽬前常见使⽤RISC的处理器包括DEC Alpha、ARC、ARM、MIPS、PowerPC、SPARC和SuperH等。
RISC是⼀种执⾏较少类型计算机指令的微处理器,起源于80年代的MIPS主机(即RISC机),RISC机中采⽤的微处理器统称RISC处理器。
这样⼀来,它能够以更快的速度执⾏操作(每秒执⾏更多百万条指令,即MIPS)。因为计算机执⾏每个指令类型都需要额外的晶体管和电路元件,计算机指令集越⼤就会使微处理器更复杂,执⾏操作也会更慢。
2.2.3 处理器架构 := CPU 微架构
CPU处理器架构
:= 微架构
:= 依据 CPU指令集(架构) 规范所开发的、⽤硬件电路实现对应CPU指令
:= CPU指令集(架构) 的接⼝
3 RISC 指令系统/指令集(架构) VS CISC 指令系统/指令集(架构)
3.1 RISC 指令集(架构) VS CISC 指令集(架构)
对⽐项CISC RISC
⽬的增强原有指令的功能,设置更为复杂的新指令实现软件功能的硬化减少指令种类和简化指令功能,提⾼指令的执⾏速度指令系统复杂、庞⼤简单、精简
指令数⽬⼀般⼤于200条⼀般⼩于100条
指令字长不固定固定
可访存指令不加限制只有 LOAD/STORE指令
各指令的执⾏
时长
指令间执⾏时长差距很⼤绝⼤多数在1个周期内完成
各种指令的使
⽤频度
指令间频度差距很⼤指令都⽐较常⽤
通⽤寄存器数
量
较少多中断机器是在⼀条指令执⾏结束后响应中断机器在⼀条指令执⾏的适当地⽅可响应中断
单元电路(功
耗)
包含有丰富的电路单元,因⽽功能强、⾯积⼤、功耗⼤包含有较少的单元电路,因⽽⾯积⼩、功耗低
⽬标代码的执
⾏效率
难以⽤优化编译⽣成⾼效的⽬标代码程序采⽤优化的编译程序,⽣成代码相对较为⾼效控制⽅式绝⼤多数为微程序控制绝⼤多数为组合逻辑控制
指令流⽔线可以通过⼀定⽅式实现必须实现
微处理器的设
计周期
微处理器结构复杂,设计周期长微处理器结构简单,布局紧凑,设计周期短,且易于采⽤最新技术
适⽤场景适⽤于【通⽤型机器】;功能强⼤,易于/利于实现、处理特殊功能,
因有专⽤指令来完成特定功能
适⽤于【专⽤型机器】,因RISC指令系统的确定与特定的应⽤领域有关;指令规整,性
能容易把握,易学易⽤
被应⽤的指令集(架构)X86指令集(架构)
MIPS、ARM、RISC-V、Power-PC[IBM]、SPARC、AArch64(基于ARMv8架构的、分离
出来的64位的执⾏状态) 指令集(架构)
3.2 RISC 指令集有哪些?
指令集架构发源于(时间、⼲系⼈)特点具体⽰例拓展、
延申出
来的架
构
微处理器
是否
开源
备注
MIPS(Million Instructions Per Second) 指令集架构
1.创⽴于1998年;
2.创始者: 斯坦福⼤学教
授John LeRoy
Hennessy(RISC架构的
开拓者)
1.在1999年前被适⽤
最多;
2.更成熟;
MIPS I/II/III/IV/V/16/32/64(略)龙芯芯⽚商业
闭源
1.MIPS本来就
没有⼀个较为
统⼀的⽣态。
因MIPS被转
卖多次、很多
相关专利已经
被卖掉了(导
致当前母公司
Wave
Computing 所
掌握的专利本
就有限)、碎
⽚化问题⾮常
严重
ARM(Acorn/Advanced RISC Machine) 指令集架
构
1. 创⽴于1985年;
2. 创始者:Acorn公
司、加州⼤学伯克利分
校Sophie Wilson(指令
集开发)和Steve
Furber(芯⽚设计)2位教
授(2家单位合作推出
ARM1芯⽚,以此作为
其未来个⼈计算机的中
枢)
1.低功耗、低成本;
2.ARM家族占⽐所有
32位嵌⼊式处理器的
75%,成为占全世界
最多数的32位架构;
3.⼴泛使⽤于嵌⼊式系
统(功耗低);
4.消费性电⼦:可携式
装置(PDA、移动端
设备(占主流地位)、移
动电话、多媒体播放
器、掌上型电⼦游
戏,和计算机),电
脑外设(硬盘、桌上
型路由器),甚⾄导
弹的弹载计算机等军
⽤设施
ARMv7a架构: ARM
Cortex A8/A9
ARMv7M架构:ARM
Cortex A3/A4
ARMv8架构(⽀持32+64位
架构):ARM Cortex
A32/35/53/57/72/73/77/78
Apple
Swift/
架构、
Marvell
的
XScale
架构、
德州仪
器的
OMAP
系列架
构
⾼通骁龙Qualcomm 810处理器
海思麒麟950处理器
三星Exynos 4412处理器
Apple A系列处理器、Apple A6/A6X CPU处
理器(基于Apple Swift 微架构[ARM指令集扩
展的微架构])
商业
闭源
(IP授
权模
式)
1.ARM公司的
商业模式:
IP(Intellectual
Property,知识
产权)授权模式
(ARM架构授
权、IP核授
权、使⽤级授
权);
2.主要业务范
围: ARM指令
集、ARM微架
构、ARM芯⽚
(不⾃⼰造)
1.ARMv8架构基于32
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论