CPU架构与指令集:RISC / CISC | arm | amd | X86

本篇博文是解决在软件开发、软件交付实施过程中,常常需要找寻与服务器硬件CPU架构适配的软件包时,开发或实施工程师时常摸不着头脑。 本文将简单介绍CPU指令集、CPU架构、CPU处理器/芯片、Soc(芯片上的系统)、x86_64架构、arm架构等底层知识模块。

那么,先从CPU架构所涉及的相关概念说起~

1、CPU := 中央处理器

Central Processing Unit,中央处理器。 CPU是计算机系统的核心和大脑,主要由控制器运算器存储器连接总线构成。 其中,控制器和运算器组成CPU的内核,【内核】从存储器中提取数据,根据控制器中的指令集将数据解码,通过运算器中的微架构(电路)进行运算得到结果,以某种格式将执行结果写入存储器。 因此,内核的基础就是【指令集(指令集架构)】和【微架构】。

处理器是在【指令】的控制下工作的,处理器可以识别的每一条【指令】称为【机器指令】。 计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。 在计算机中,指示计算机硬件执行某种运算、处理功能的命令称为指令。 指令是计算机运行的最小的功能单位,而硬件的作用是完成每条指令规定的功能。

2、CPU 指令集架构 / 微架构

指令集架构( Instruction Set Architecture ),又称指令集或指令系统,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集,寄存器,寻址模式,存储体系,中断,异常处理以及外部 I/O 。 指令集架构包含一系列的 opcode 即操作码(机器语言),以及由特定处理器执行的基本命令。 简单来说,指令集一般被整合在操作系统内核最底层的硬件抽象层中,属于计算机中硬件与软件的接口,它向操作系统定义了CPU的基本功能。

微架构:ISA在处理器中的实现,被称为Microarchitecture(微架构)。相同的指令集可以有不同的微架构,如Intel 和AMD都是基于X86指令集但微架构不同。

3、指令集架构分类 RISC / CISC

总分类: RISC VS CISC (判断依据:指令系统是否精简) 在计算机处理器设计中,RISC(精简指令集计算机)和CISC(复杂指令集计算机)是两种主要的指令集架构。

什么是RISC? RISC,全称为精简指令集计算机(Reduced Instruction Set Computer),是一种采用简化指令集设计的计算机架构。RISC的设计理念是在硬件中实现较少的指令集,从而简化处理器的设计和提高执行效率。RISC架构的主要特点包括:

  • 简化的指令集:RISC处理器的指令集相对简单,每条指令执行时间固定,通常在一个时钟周期内完成。
  • 较少的寻址模式:RISC架构通常只支持几种简单的寻址模式,这使得指令解码和执行更加高效。
  • 大量寄存器:RISC处理器通常拥有较多的寄存器,以减少对内存的访问频率,从而提高性能。
  • 硬件实现的流水线:RISC架构通过硬件实现指令流水线,使得多个指令可以同时进行处理,从而提高指令的执行速度。

RISC的优势

  • 高效率:由于指令集简单且执行时间固定,RISC处理器可以实现高效的指令流水线,提高指令执行速度。
  • 低功耗:RISC架构简化了处理器的设计,减少了功耗,因此广泛应用于移动设备和嵌入式系统中。
  • 易于优化:由于指令集和寻址模式较少,编译器可以更容易地优化代码,提高程序的执行效率。

什么是CISC? CISC,全称为复杂指令集计算机(Complex Instruction Set Computer),是一种采用复杂指令集设计的计算机架构。CISC的设计理念是通过在硬件中实现复杂的指令集,从而简化编译器和软件的设计。CISC架构的主要特点包括:

  • 复杂的指令集:CISC处理器的指令集非常丰富,可以在一条指令中完成多个操作。
  • 多种寻址模式:CISC架构支持多种复杂的寻址模式,使得编写高级语言的编译器更加方便。
  • 微代码实现:CISC处理器通常通过微代码实现复杂指令,这使得处理器可以支持更多的指令类型。
  • 指令长度不固定:CISC指令的长度不固定,这使得指令的解码和执行更加复杂,但也更灵活。

CISC的优势

  • 指令功能强大:CISC处理器的指令集功能强大,可以直接执行复杂操作,减少了程序的指令数量。
  • 向后兼容性好:由于CISC处理器支持丰富的指令集,能够运行大量历史遗留的软件和应用程序。
  • 灵活性高:CISC处理器的复杂指令集和多种寻址模式使其具有很高的灵活性,适用于各种应用场景。
对比项CISCRISC
目的增强原有指令的功能,设置更为复杂的新指令实现软件功能的硬化减少指令种类和简化指令功能,提高指令的执行速度
指令系统复杂、庞大简单、精简
指令数目一般大于200条一般小于100条
指令字长不固定固定
可访存指令不加限制只有LOAD/STORE指令
各指令的执行时长指令间执行时长差距很大绝大多数在1个周期内完成
各种指令的使用频度指令间频度差距很大指令都比较常用
通用寄存器数量较少
中断机器是在一条指令执行结束后响应中断机器在一条指令执行的适当地方可响应中断
单元电路(功耗)包含有丰富的电路单元,因而功能强、面积大、功耗大包含有较少的单元电路,因而面积小、功耗低
目标代码的执行效率难以用优化编译生成高效的目标代码程序采用优化的编译程序,生成代码相对较为高效
控制方式绝大多数为微程序控制绝大多数为组合逻辑控制
指令流水线可以通过一定方式实现必须实现
微处理器的设计周期微处理器结构复杂,设计周期长微处理器结构简单,布局紧凑,设计周期短,且易于采用最新技术
适用场景适用于【通用型机器】;功能强大,易于/利于实现、处理特殊功能,因有专用指令来完成特定功能适用于【专用型机器】,因RISC指令系统的确定与特定的应用领域有关;指令规整,性能容易把握,易学易用
被应用的指令集(架构)X86指令集(架构)MIPS、ARM、RISC-V、Power-PC[IBM]、SPARC、AArch64(基于ARMv8架构的、分离出来的64位的执行状态)指令集(架构)

总结 RISC和CISC架构各有其优缺点,适用于不同的应用场景。RISC架构以其高效、低功耗的特点,在移动设备和嵌入式系统中得到了广泛应用。而CISC架构则以其强大的指令功能和向后兼容性,在高性能计算和服务器领域占据了重要地位。

4、CISC 指令集

指令集架构发源于(时间、干系人)具体示例拓展、延申出来的架构微处理器是否开源
X86指令集(架构)创始者:Intel公司X86-32/X86-64(即AMD64/Intel64)(略)Intel i8086 CPU处理器(首台X86 CPU)
VIA CPU处理器
Intel Core I3/I5/I7/I9 CPU处理器
AMD CPU处理器
商业闭源

5、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
1.低功耗、低成本;
2.ARM家族占比全世界32位嵌入式处理器的75%。
ARMv7a架构:ARM Cortex A8/A9
ARMv8架构(支持32+64位架构):ARM Cortex A32/35/53/57/72/73/77/78
Apple Swift、Marvell的XScale、德州仪器的OMAP系列 高通骁龙、海思麒麟、三星Exynos、Apple A系列处理器 商业闭源(IP授权模式) 1.ARM公司的商业模式:IP授权模式;
2.主要业务范围:ARM指令集、ARM微架构、ARM芯片(不自己造)
AArch64/ARM64(ARMv8A架构的64位指令集架构) 1.概念于2011年在美国加州圣克拉拉的一场技术大会发布 1.保留了TrustZone、虚拟化、NEON等关键技术特性;
2.完全向下兼容32位ARM架构。
... ... ... (同上) aarch64的Apple后端称为arm64,而LLVM社区开发的后端称为aarch64。
AArch32指令集(ARMv8A架构的32位指令集架构) (同上) (同上) (同上) (同上) (同上) (同上) (暂无)
Power PC(Performance Computing)指令集 1.POWER是1991年,Apple、IBM、Motorola组成的AIM联盟发展出的微处理器架构;
2.但是自2005年起,苹果电脑将旗下产品转用Intel CPU。
1.强嵌入式表现:高性能、能耗损失低、散热低;
2.主要应用领域:高端服务器、嵌入式设备。
(略) (略) 任天堂Gamecube、MPC系列 现已开源 1.所有PowerPC(包括64位实现)都使用定长的32位指令。
SPARC(可伸缩的处理器架构)指令集 1987年,SUN公司与TI合作的成果 1.主要应用于星载计算机、嵌入式设备。 (略) (略) ERC 32(欧洲航天航空局) 开源 (略)
RISC-V/RISC-FIVE指令集(Reduced Instruction Set Computer-V) 1.创始者:Keste Asanovic、David Pattern、Andrew Waterman、Yunsup Lee;
2.源于2010年在加州大学伯克利分校的研究项目。
1.生态联盟强大;
2.开源+免费,采用BSD许可证。
(略) (略) (略) 开源(BSD协议) 相对X86的复杂度,RISC-V的指令集手册相对简洁。

6、国产芯片公司

处理器领域的两大巨头仍然是Intel 和 AMD 公司。

国产芯片种类繁多, 基于 ARM 架构 授权的芯片厂商最有可能形成自主可控指令集。 由于指令集的复杂性和重要性,自主研发一套全新的指令集难度较大且效益不高。国产CPU厂家大多选择购买国外授权,以实现不同程度的自主可控。目前, 国产CPU架构大体可以分为三类:

  • 第一类,是以龙芯为代表的MIPS 指令集架构和以申威为代表的 Alpha 架构,申威已基本实现完全自主可控(申威64已经完全形成了自己的架构),龙芯部分关键技术需付专利费。

  • 第二类,是以飞腾和华为鲲鹏为代表基于 ARM 指令集授权的国产芯片。ARM主要有三种授权等级:使用层级授权、内核层级授权和架构指令集层级授权,其中指令集层级授权等级最高,企业可以对ARM 指令集进行改造以实现自行设计处理器,如苹果在 ARM v7 架构基础上开发出苹果 Swift 架构, 其他如:高通、Krait 、Marvell等都是基于ARM指令集或微架构进行的改造。因此,已经获得ARM V8 永久授权的海思、飞腾等厂家凭借自身的研发能力,亦有可能发展出一套自己的指令集架构。

  • 第三类,是以海光、兆芯为代表的获得X86的授权(仅内核层级的授权),未来扩充指令集形成自主可控指令集难度较大。因此, 可以看出,在自主可控程度上申威、龙芯、飞腾、鲲鹏较高。 未来鲲鹏和飞腾如果基于 ARM V8 发展出自己的指令集, 则创新可信程度将显著提升。

7、 程序语言代际 | 编译型程序语言 / 解释型程序语言

计算机程序语言的发展代际: 3代。

  • ①第1代: 机器语言 (二进制的机器代码/指令集集合) [20世纪中期]
  • ②第2代: 汇编语言/符号语言 (用类人类语言描述指令集,即非指令集, x86汇编 /8086汇编 /AT&T汇编 /Intel汇编 /ARM汇编) [20世纪50年代-60年代]
  • ③第3代: 高级语言 (人类化的程序语言, C++/Java/Python/C#/JavaScript等)

CPU执行计算任务时都需要遵从一定的规范/语言,程序(可执行的、二进制机器语言)在被执行前都需要先翻译为CPU可理解的语言。 这种规范或语言就是【指令集】(ISA,Instruction Set Architecture)。 程序(二进制执行程序)被按照某种指令集的规范翻译为CPU可识别的底层二进制代码的过程叫做【编译】(Compile)

编译的一般过程:

源程序分析
  词法分析
  语法分析
语法检查
中间代码生成
代码优化
目标代码生成

8、Linux系统信息的查询命令

 uname -a             # 查看内核/操作系统/CPU信息 
 head -n 1 /etc/issue # 查看操作系统版本 
 cat /proc/cpuinfo    # 查看CPU信息 
 hostname             # 查看计算机名 
 lspci -tv            # 列出所有PCI设备 
 lsusb -tv            # 列出所有USB设备 
 lsmod                # 列出加载的内核模块 
 env                  # 查看环境变量资源 
 free -m              # 查看内存使用量和交换区使用量 
 df -h                # 查看各分区使用情况 
 du -sh <目录名>       # 查看指定目录的大小 
 grep MemTotal /proc/meminfo # 查看内存总量 
 grep MemFree /proc/meminfo  # 查看空闲内存量 
 uptime               # 查看系统运行时间、用户数、负载 
 cat /proc/loadavg    # 查看系统负载磁盘和分区 
 mount | column -t    # 查看挂接的分区状态 
 fdisk -l             # 查看所有分区 
 swapon -s            # 查看所有交换分区 
 hdparm -i /dev/hda   # 查看磁盘参数(仅适用于IDE设备) 
 dmesg | grep IDE     # 查看启动时IDE设备检测状况网络 
 ifconfig             # 查看所有网络接口的属性 
 iptables -L          # 查看防火墙设置 
 route -n             # 查看路由表 
 netstat -lntp        # 查看所有监听端口 
 netstat -antp        # 查看所有已经建立的连接 
 netstat -s           # 查看网络统计信息进程 
 ps -ef               # 查看所有进程 
 top                  # 实时显示进程状态用户 
 w                    # 查看活动用户 
 id <用户名>           # 查看指定用户信息 
 last                 # 查看用户登录日志 
 cut -d: -f1 /etc/passwd   # 查看系统所有用户 
 cut -d: -f1 /etc/group    # 查看系统所有组 
 crontab -l           # 查看当前用户的计划任务服务 
 chkconfig –list      # 列出所有系统服务 
 chkconfig –list | grep on    # 列出所有启动的系统服务程序 
 rpm -qa              # 查看所有安装的软件包

文章目录