文章目录
什么是指令集
指令顾名思义就是用来引导某一硬件工作的方式的,集即集合的意思,也就是很多种不同引导指令的集合!
指令集是存储于CPU内部,用来引导CPU进行加减运算和控制计算机操作系统的一系列指令集合!
可以这样说指令集是软件与CPU之间的一个接口而CPU就是接口的实列化。
其实指令集就是一组汇编指令的集合,不同的CPU使用的指令集不同。
先有指令集,规定好指令集之后再定芯片架构。
什么是ISA
指令集架构(Instruction Set Architecture, ISA) 首次出现在IBM的System/360中。作为软硬件之间的接口,ISA在编译器编写者和处理器设计者之间提供了一个抽象层,将编程所需要了解的硬件信息从硬件系统中抽象出来。这样软件开发者就可以面向ISA编程了,开发出来的软件不经过修改就可以在符合该ISA的计算机上运行了。
ISA定义了机器语言程序编写者需要知道的一切,这其中就包括指令集,指令集编码,基本数据类型,寄存器,寻址模式,存储体系,异常处理,中断,I/O模型等。
ISA的规定了什么?
1.数据类型;
2.寄存器;
3.字节次序;
4.指令格式;
5.指令集;
6.寻址方式;
7.协处理器:表示处理器的一个可选部件,负责处理指令集的某个扩展, 拥有与处理器想相独立的寄存器;
8.异常处理方式。
不同指令集架构存在的问题:
由于不同的处理器开发团队采用的技术,具体的实现也不尽相同,不同的处理器使用了不同的指令集合。
这样在处理器A上编写的程序就不能直接在处理器B上运行,需要重新编写,编译、汇编后才可以运行。显然这给程序设计,软件开发带来了极大的不便。
指令集架构分类:
这两种就计算机分别采用的就是CISC和RISC指令集架构。一种常见的划分方式是CISC(Complex instruction set computer)复杂指令集计算机和RISC(Reduced instruction set computer)精简指令集计算机。。
- RISC精简指令集,RISC简化了指令集,人们重新设计了指令集,剔除了那些不常使用的指令,只保留常用的指令。指令较短,但是如果要做复杂的事情就要多个指令来完成。最著名的ARM CPU就是使用的精简指令集,所有品牌的手机以及网络设备等都是用的是arm架构的CPU。ARM、MIPS、PowerPC 均是基于精简指令集RISC机器处理器的架构
- CISC复杂指令集拥有很多特殊的指令,指令数目多而且复杂,每条指令可以是变长的。每条指令执行时间较长,但是可以处理的工作更为丰富。**代表性的CPU就是AMD和Intel的x86架构的CPU,用于我们的个人电脑。**X86是基于复杂指令集的架构,Atom则基于是x86指令集的精简版 现在只有x86架构还在使用复杂指令集。
微架构
我们经常听说某某CPU体系架构,比如什么x86啊,这里的架构指的是微架构(Microartecture), 微架构就是ISA的具体实现,也就是CPU中的实现处理器各个功能的数字电路。微架构和ISA之间的关系可以说是这样的:ISA是处理器设计的规范,微架构就是对应ISA的处理器的具体实现。同样的ISA,不同的微架构,在性能上存在一定的差异。
在表现形式上,微结构是指一个处理器实现具体指令集功能的电路设计,是实现指令集的一套硬件源代码。
主流指令集架构介绍
x86系列/Atom处理器
x86是英代尔Intel首先开发制造的一种微处理器体系结构的泛称。
x86架构是重要地可变指令长度的CISC(复杂指令集电脑,Complex Instruction Set Computer)。
常见的CISC微指令集CPU主要有AMD、Intel、VIA 等的 x86 架构CPU
那为何称为 x86 架构呢? 这是因为最早的那颗 Intel 发展出来的 CPU 代号称为 8086,后来依此架构又开发出 80286, 80386…, 因此这种架构的 CPU 就被称为 x86 架构了。
不同的 x86 架构的 CPU 有什么差异呢?除了 CPU 的整体结构(如第二层快取、每次运作可执行的指令数等)之外,主要是在于微指令集的不同。新的x86的 CPU 大多含有先进的微指令集, 这些微指令集可以加速多媒体程序的运作,加强虚拟化的效能。
ARM架构
ARM架构,过去称作进阶精简指令集机器(Advanced RISC Machine,更早称作:Acorn RISC Machine),是一个32位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。由于节能的特点,ARM处理器非常适用于行动通讯领域,符合其主要设计目标为低耗电的特性。
优势:价格低;能耗低;
ARM 授权方式:ARM 公司本身并不靠自有的设计来制造或出售 CPU ,而是将处理器架构授权给有兴趣的厂家。
生产厂商:TI (德州仪器)/Samsung(三星)/Freescale(飞思卡尔)/Marvell(马维尔)/Nvidia(英伟达)
ARM家族占了所有32位嵌入式处理器75%的比例,使它成为占全世界最多数的32位架构之一。ARM处理器可以在很多消费性电子产品上看到,从可携式装置(PDA、移动电话、多媒体播放器、掌上型电子游戏,和计算机)到电脑外设。
MIPS系列
MIPS是很流行的一种RISC处理器。MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。
与英特尔采用的复杂指令系统计算结构(CISC)相比,RISC具有设计更简单、设计周期更短等优点,并可以应用更多先进的技术,开发更快的下一代处理器。
MIPS自己只进行CPU的设计,之后把设计方案授权给客户,使得客户能够制造出高性能的CPU。
32位和64位的区别
32位和64位可以指CPU位数也可以指总线位宽,所以要说明指定的是哪个。
如果说的是总线位宽,也就是每个时钟周期能够传输的数据量,64位那就是8byte。
如果说的是CPU那么表示32位处理器每次处理4Byte(32bit),同理,64位处理器每次处理8Byte(64bit)。
64位的CPU,相比较32位的CPU来说,64位CPU最为明显的变化就是增加了8个64位的通用寄存器,内存寻址能力提高到64位,以及寄存器和指令指针升级到64位等。
如果说我们的CPU位数是64位,但是总线位宽是32位,那么实际发挥的效果也仅仅是32位,总线传输速度跟不上。
区别具体说明:
1、运行速度:
相对于32位处理器,64位处理器的运行速度更快。
2、支持内存:
相对于32位支持的内存最多只有4G,64位支持内存的大小和种类更加多样化。支持4G 8G 16G 32G 64G 128G 256G内存,理论上可以无限支持,只要你主板上有足够的内存条。
3、支持系统:
32位处理器不能完全支持64位处理器。
4、支持软件:
32位处理器只能支持32位的软件,支持不了64位的,而如今64位可以两种类型都支持。
5、大小对比:
64位处理器大小比32位处理器大。比如win7 64位比win7 32位系统大700M左右。
64位处理器是采用64位处理技术的CPU,相对32位而言,64位指的是CPUGPRs(General-PurposeRegisters,通用寄存器)的数据宽度为64位,64位指令集就是运行64位数据的指令,处理器一次运行64bit数据。
32位处理器,计算机中的位数指的是CPU一次能处理的最大位数。
32位计算机的CPU一次最多能处理32位数据,例如它的EAX寄存器就是32位的,当然32位计算机通常也可以处理16位和8位数据。
在Intel由16位的286升级到386的时候,为了和16位系统兼容,它先推出的是386SX,这种CPU内部预算为32位,外部数据传输为16位。
直到386DX以后,所有的CPU在内部和外部都是32位的了。
什么是x86与非x86
按照CPU体系架构,服务器主要分为两类:
- 非x86服务器:使用RISC(精简指令集)或EPIC(并行指令代码)处理器,并且主要采用UNIX和其他专用操作系统的服务器,指令系统相对简单,它只要求硬件执行有限且常用的部分指令,CPU主要有Compaq的Alpha、HP的PA-RISC、IBM的Power PC、MIPS的MIPS和SUN的Sparc,Intel研发的EPIC安腾处理器等。这种服务器价格昂贵,体系封闭,但是稳定性好,性能强,主要用在金融、电信等大型企业的核心系统。
- x86服务器:又称CISC(复杂指令集)架构服务器,即通常所讲的PC服务器,它是基于PC机的体系结构,使用Intel或其他兼容x86指令集的处理芯片的服务器。目前主要为Interl的E3、E5系列,价格相对便宜,兼容性好,稳定性较差,安全性不算太高。
x86与x86_64
x86是指Intek的开发的一种32位指令集,从386时代开始,一直沿用至今,是一种cisc指令集,所有Intel早期的cpu,以及amd早期的cpu都支持这种指令集,在Intel官方文档中称之为(IA-32)。
x86:泛指一系列由Intel公司开发的处理器架构。基于x86的32位架构(i386,x86)即IA-32。
x86-64通常称为amd64或者Intel64。指64位架构
x86_64是x86 CPU开始迈向64位时面临的两种选择:
- 向下兼容x86
- 完全重新设计指令集,不兼容x86
AMD先Intel制造出兼容x86的商用CPU,AMD称之为AMD64,且得到用户的认同。
Intel选择设计了一种不兼容x86的全新64位指令集,称之为IA-64(这个就是前面所说的安腾)。由于较AMD晚,同时由于是全新设计的CPU,没有编译器、不支持Windows后来不得不在时机落后的情况下也开始支持AMD64指令集。
换了个名字叫x86_64。表示x86指令集的64扩展。他提供了向下兼容x86
实际上,x86_64、x64、AMD64基本上是同一个东西,我们现在用的Intel/amd的桌面级CPU都是x86_64,与之相对的arm、ppc等都不是x86_64。
x86、x86_64主要区别就是32位和64位的问题,x86中只有8个32位通用寄存器:
eax
ebx
ecx
edx
ebp
esp
esi
edi
x86_64把这8个通用寄存器扩展成了64位的,并且比x86增加了若干个寄存器(好像是增加了8个,具体数量有待考证),同样的MMX的寄存器的位数和数量也进行了扩展。此外cpu扩展到64位后,也能支持更多的内存以及其他的种种好处。
对于普通程序来说,CPU位数的扩展,寄存器数量的增加不会带来明显的性能提升,比如IE浏览器、Office办公软件这些。特定的程序才能够充分利用64位的CPU、以及更多寄存器带来的优势。
比如MMX除了提升多媒体程序的性能,对矩阵、多项式、向量计算也能带来提升,更多的MMX寄存器、更大的寄存器都有利于SIMD指令的执行,能够提升CPU对数据的吞吐量(RISC指令集的CPU通常数百例,可以有效的缓存中间计算结果,不需要把中间结果写入内存,从而减少内存的访问次数。显著提升性能)
x86-64 与 AMD64
x86-64有时会简称为x64,是64位微处理器机构及其相应指令集的一种,也是Intel x86架构的延伸产品。
x86-64是1999年由AMD设计,该64位集主要用于扩充IA-32,成为x86-64,后来改为AMD64。AMD64架构在IA-32基上新增64位寄存器,兼容早期的16位和32位软件,可使现有的以x86为对象的编译器转换为AMD64版本。
由于AMD64和Intel64基本上一致,很多软硬件产品都使用一种不倾向任何一方的词汇表达对两种架构的兼容。出于这个目的AMD对这种CPU架构的原始成为由x86_64变体为x86-64。其他公司也使用x64代表x86-64的缩写。
许多操作系统及产品,尤其是那些在Intel进入这块市场之前就引入x86-64支持的,使用amd64同时指代amd64和intel64。
现在的x86CPU在位数上由32/64bit之分,在ARCH上又有x86/x86_64/x64/i386/IA32/IA64/amd64
简单可按照下述理解:
32位 x86=i386=IA32
64位 amd64=x86_64=x64
64bit的CPU都做了向下兼容32bit的特殊设计,所以在64bit CPU上运行32bit的软件(kernel、app、driver)是没有问题的。反之则不行。
32位和64位指令集的区别
64bit拥有64bit的register和bus,在数据传输效率上比32位高很多,64bit的地址总线的寻址空间突破了4G限制,所以大于大内存、密集数据运算的应用场景,64bit的优势是非常明显的。
对于小内存系统,64bit的CPU在某些情况下可能比32bit的CPU效率更低。因为64bit的CPU地址是64位的,指针是64位的,编译生成的二进制文件更大,运行时占用的内存更多;另一方面,因为64bit地址的问题,cache中能存放的指令更少,所以更容易导致cache的miss。
所以在某些应用场景下,64bitCPU的更大寻址空间,更快的数据传递,更快的浮点运算的特性,与其64bit地址的指针所导致的cache miss的特性始终并存。