什么是指令集架构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对于寄存器的使⽤就不⼀样。
x86架构和arm架构区别因此⼀个操作系统很难兼容全部的ISA,有些OS只能在特定的ISA上运⾏,⽐如最新的Mac OS X Leopard 只⽀持X86架构处理器。⽽linux是公开源代码的,谁都可以对源代码进⾏修改和编译,因此在很多指令集架构上都有相应的版本。
总结
没有总结了== 偏个题,希望过年能回家看看~疫情退散!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论