什么是指令集架构ISA【从处理器谈起】

文章目录


前言

当我们在买电脑时,总要关注一下电脑中使用的是哪一款CPU,也就是*处理单元,不同的CPU会影响电脑的性能。我们会发现CPU的描述中总会介绍这款CPU是基于什么架构的,比如我们常见的X86、PowerPC以及手机中常见的ARM。

这些名字就代表着不同的指令集架构,没有它就无法按照规则设计出处理器。

本文将介绍指令集架构是什么,它和处理器又有什么关系。适合还不清楚计算机组成原理的童鞋们阅读~


在了解指令集架构前,我们先来明确处理器的概念。

一、处理器是什么?

组成计算机的五个经典部件是输入、输出、存储器、数据通路和控制器,后两个部件合称为处理器。

处理器又被称为*处理单元(CPU),它的功能主要是解释计算机指令以及处理计算机软件中的数据。处理器从逻辑上包括两个主要部件:数据通路(或称运算器)和控制器,

  • 数据通路负责完成算术运算;
  • 控制器负责指导数据通路、存储器和I/O设备按照程序的指令正确执行。

在电脑运行程序时,处理器从存储器中得到指令和数据,经过自身的处理和运算后,输出结果到计算机的输出设备如屏幕或存储到存储器中。因此处理器是计算机运行程序完成运算的核心。

关于数据通路的具体介绍可以参看【计算机组成原理】流水线式指令执行

多核处理器

为了提升计算机性能,现在多采用多核并行的设计,其中一个“核”就是一个处理器,而人们常说的“多核处理器”中的“处理器”是一个宏观概念,和上文阐述的处理器不是一个事物。

或者我们可以认为“多核处理器”原称应该是“多处理器处理器”,为避免重复,用“核”来代替第一个“处理器”。

二、指令集架构

指令集和处理器的关系

处理器在计算机中占主导地位,它本质上是一堆硬件构成的芯片,我们怎么能在这些硬件上实现复杂的计算功能呢。这就需要一个指挥棒去操作硬件完成程序想要实现的运算。

我们知道,高级语言程序会被翻译成汇编语言。在汇编语言中,每一行就代表了一个指令,来告诉CPU如何操作,这些指令就是指挥棒。

那么这些指令是哪里来的呢?这就引出了我们的主角——指令集架构。

准确地说,它是一套指挥CPU工作的规则。当我们要开发一款处理器时,必须要选定一个指令集架构,并按照该架构的规则对处理器进行设计和实现。

指令集的重要性

指令集架构(ISA, Instrucion Set Architecture)定义了基本数据类型(BYTE/HALFWORD/WORD/…)、寄存器(Register)、指令、寻址模式、异常或者中断的处理方式等。一台计算机的指令系统反映了该计算机的全部功能,机器类型不同,其指令系统也不同,因而功能也不同。

ISA作为处理器(即“核”)的基础,对于处理器的整体性能起到了决定性的作用,不同架构的处理器同主频下,性能差距可以达到2-5倍。ISA的实现需要通过编写与指令集中的指令对应的硬件实现的逻辑代码来完成。

CPU依靠指令来计算和控制计算机系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。

指令集的强弱也是CPU的重要指标,指令集是提高处理器效率的最有效工具之一。采用相同架构的处理器,性能基本上已经锁定在一定的范围之内,不会有本质的区别。

指令系统的设置和机器的硬件结构密切相关,一台计算机要有较好的性能,必须设计功能齐全、通用性强、内含丰富的指令系统,这需要复杂的硬件结构来支持。


总的来说,在开发一款处理器时,

  1. 我们首先需要选定所使用的ISA,这个架构会极大地影响这款处理器的最高性能。
  2. 之后需要根据ISA规则中要求的硬件资源来搭建处理器的硬件平台。
  3. 最后一步,是按照ISA的规则要求,使用硬件描述语言(HDL)进行逻辑编写,控制这个硬件平台按照指令规则进行数据处理。

ps:我们常说的ISA(或处理器)的宽度指的是CPU中通用寄存器的宽度(二进制的位数),这决定了寻址范围的大小以及数据运算的能力。ISA的宽度和指令编码长度无关。

指令集的分类

指令集分为精简指令集(RISC)和复杂指令集(CISC),二者区别在于:

  • CISC针对特定的功能实现特定的指令,导致指令数目比较多,但生成的程序长度相对较短;
  • RISC只定义常用指令,对复杂的功能采用常用指令组合实现,这导致指令数目比较精简,但生成的程序长度相对较长。

我们常用的X86架构属于CISC,而手机等小平台上的ARM架构就属于RISC。

三、指令集架构和操作系统

操作系统(OS)也是计算机中连接底层设备和上层应用程序的重要部分,每台计算机都要有操作系统才能运行。那么OS和ISA之间存在什么关系呢?

其实ISA代表了底层硬件部分,OS代表了底层软件,它们之间的关系就是OS调用硬件的方式。

(该部分参考某个博客,没记网址)

具体来说,操作系统中有一个叫板级支持包BSP(board support package)的东西,这个是负责与硬件沟通的,任何OS都有。

BSP是介于主板硬件和操作系统中驱动层程序之间的一层,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主板。

BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的。BSP所包含的内容一般说来是和系统有关的驱动和程序,如网络驱动和系统中网络协议有关,串口驱动和系统下载调试有关等等。离开这些驱动系统就不能正常工作。

同时针对不同的指令集,BSP也需要有所改变。比如一个ISA支持乘法指令,另一个ISA不支持乘法指令,操作系统就只能用加法指令去模拟乘法指令。再比如两个ISA通用寄存器的数量不同,这样BSP对于寄存器的使用就不一样。

因此一个操作系统很难兼容全部的ISA,有些OS只能在特定的ISA上运行,比如最新的Mac OS X Leopard 只支持X86架构处理器。而linux是公开源代码的,谁都可以对源代码进行修改和编译,因此在很多指令集架构上都有相应的版本。

总结

没有总结了== 偏个题,希望过年能回家看看~疫情退散!

什么是指令集架构ISA【从处理器谈起】

上一篇:red hat enterprise linux 8 修改默认启动图形界面还是键盘命令界面


下一篇:算术逻辑单元ALU