CPU架构和指令集

简介: 不同的CPU架构通常使用不同的指令集。每种CPU架构都有其自己的一组特定的机器指令,这些指令用于执行计算机程序。不同的CPU架构之间的指令集是不兼容的,这意味着编写的程序通常需要根据目标CPU的架构进行编译或汇编,以确保它们能够在该CPU上正确运行。一些常见的CPU架构包括:

一 、CPU架构

不同的CPU架构通常使用不同的指令集。每种CPU架构都有其自己的一组特定的机器指令,这些指令用于执行计算机程序。不同的CPU架构之间的指令集是不兼容的,这意味着编写的程序通常需要根据目标CPU的架构进行编译或汇编,以确保它们能够在该CPU上正确运行。


一些常见的CPU架构包括:


  1. x86架构:这是一种广泛使用的CPU架构,英特尔和AMD的“专属”,常见于个人计算机。Intel从16位微处理器8086开始的整个CPU芯片系列,系列中的每种型号都保持与以前的各种型号兼容,主要有8086,8088(16位),80186,80286(过渡产品),80386,80486以及以后各种型号的Pentium芯片(32位CPU),通常所说的x86都是指32位CPU


  • i386:其实就是指Intel 80386,是第一个32位的x86架构的处理器,所有intel早期的cpu,amd早期的cpu都支持这种指令集,intel官方文档里面称为“IA-32”(安腾)
  • AMD64:在原始32位X86指令集的基础上加入了X86-64扩展64位X86指令集,使这款芯片在硬件上兼容原来的32位X86软件,并同时支持X86-64的扩展64位计算
  • x86-64:AMD比Intel率先制造出了商用的兼容x86的CPU,AMD称之为AMD64,后来Intel也开始支持AMD64的指令集,但是换了个名字,叫x86_64,表示是x86指令集的64位扩展


2.ARM架构:ARM是一种低功耗、广泛应用于移动端和便携设备的CPU架构。ARM指令集包括一系列ARM汇编指令,用于执行各种操作,包括数据处理、分支、加载/存储等


3.MIPS架构:MIPS是一种用于嵌入式系统(网关和机顶盒)和一些服务器领域的CPU架构,其指令集包括一组MIPS汇编指令,用于执行各种任务。


在不严格要求的情况下:


  • x86=i386=IA32
  • amd64=x86_64=x64!=IA64(纯64架构,不兼容32位,被市场抛弃)


AMD 和 Intel 在它们的CPU中实现了一些不同的指令集扩展。这些扩展通常是为了提供更好的性能、安全性或能力。一些著名的扩展包括:


  1. SSE (Streaming SIMD Extensions):基于x86体系架构的实现,用于加速多媒体数据处理,如图像处理和音频处理
  2. AVX (Advanced Vector Extensions):基于x86体系结构的实现。它是由Intel首次引入的,用于加速向量化计算
  3. AES-NI (Advanced Encryption Standard New Instructions):基于x86和x86-64体系结构的指令集扩展,旨在提高加密和解密操作的性能
  4. AMD64 和 Intel 64:虽然它们都是基于x86的64位扩展,但AMD和Intel的64位实现在某些方面略有不同,尽管它们兼容
  5. 虚拟化指令集


厂商开发兼容某种指令集的CPU需要指令集专利持有者授权,典型的例如:Intel授权AMD,使后者可开发兼容x86指令集的CPU。


如果从最基本的逻辑角度来对指令集进行分类的话,可以分为两大类,即所谓的“复杂指令集CISC”与“精简指令集RISC”系统,x86是CISC。


二、操作系统和CPU

不同的CPU有不同的指令集,所以同一个操作系统在不同CPU上运行的是不同的“代码”。


那么,同一个操作系统为不同cpu要写好几遍,也太繁琐了吧。是的,在高级编程语言发明前确实是这样的。但是当高级编程语言(特别是C语言)发明后,操作系统的大部份都是用高级编程语言写的。对于不同的CPU指令集,人们只需要选用相应的编译器(高程程序语言到相应CPU指令集的翻译程序),编译一下就好了。


三、CPU的位数和字长

要设计处理器,首先就需要有指令集,规定处理器相应操作,通过指令集去控制处理器实现相应功能,比如说输入11111111时CPU就会去怎么操作(汇编其实就是用助记符来表示指令集的某一机器指令)。


软件(包括操作系统)之所以会有x86和x64的区分,是因为它们需要与特定的处理器架构兼容。不同的处理器架构具有不同的指令集和寄存器大小,因此软件必须根据目标处理器的架构进行编译和优化。由于x86和x64处理器的寄存器大小和内存访问方式等方面存在差异,编译器需要根据目标架构的特性进行优化和调整。因此,相同的代码在编译为x86和x64时,生成的机器码会有所不同。在程序进行编译的时候会去选择目标平台的位数、操作系统和处理器架构等,如果软件是针对x86指令集编译的,它将只能在x86的CPU上运行,而无法在x64的CPU上运行。


x86和x64使用的是同一套指令集,即x86指令集。x64是x86指令集的64位扩展,但它仍然兼容32位的x86指令集。这意味着x64处理器可以运行32位的操作系统和应用程序,同时也能够运行64位的操作系统和应用程序。


CPU位数(机器字长)= CPU中寄存器的位数

地址总线的位数决定了CPU的寻址能力,它不一定和CPU位数相同,比如早期16位的CPU使用的是20位的地址总线,通过段地址的方式来实现20位的寻址。而现在64位的CPU一般用的也就是40位的地址总线,因为没有那么大的地址寻址的需求。而如果数据总线的长度小于字长的话,那么会浪费cpu的处理能力,大于字长的话,传动过来的数据cpu一次处理不完,所以一般数据总线的长度等于字长。

操作系统也有位数,操作系统的位数是依赖于指令集架构的,比如操作系统可能会写着"64位操作系统,基于x64的处理器"。它是假定操作系统就是工作在x64的处理器上,操作系统里会去用到64位的寄存器,这也意味着CPU的位数至少是64,当然也可以更大,比如32位操作系统是可以工作在64位的CPU上的。


相关文章
|
4月前
|
缓存 测试技术 数据中心
【计算机架构】计算 CPU 动态功耗 | 集成电路成本 | SPEC 基准测试 | Amdahl 定律 | MIPS 性能指标
【计算机架构】计算 CPU 动态功耗 | 集成电路成本 | SPEC 基准测试 | Amdahl 定律 | MIPS 性能指标
83 0
|
4月前
|
存储 Linux Docker
跨cpu架构部署容器技术点:怎样修改Linux 的内核版本
在使用Docker 进行跨平台部署之后,我们还可以尝试进行跨架构部署。 从X86 架构上移植到 aarch64 上。
157 0
|
6天前
|
存储 缓存 Linux
CPU高速缓存架构
CPU高速缓存架构
|
2月前
|
存储 Java 程序员
cpu与指令集
cpu与指令集
20 0
|
2月前
|
缓存 机器人 芯片
CPU_X86架构和ARM架构入门篇
CPU_X86架构和ARM架构入门篇
55 0
|
3月前
|
XML Java API
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
24 0
|
4月前
|
NoSQL Shell Linux
跨cpu架构部署容器技术点:怎么将容器启动时的1号进程挂载到systemctl
--privileged=true:是Docker中的一个参数,用于授予容器的特权权限。当一个容器被设置为特权容器时,它将拥有与主机操作系统相同的权限,可以执行一些高级操作,如访问主机设备、加载内核模块等。
34 0
|
2月前
|
Linux
|
9天前
|
弹性计算
2024阿里云幻兽帕鲁/Palworld服务器价格表(CPU/内存/带宽/磁盘收费标准)
2024年阿里云幻兽帕鲁专用服务器的价格根据不同的配置有所不同。 • 4核16G配置的价格为32元/月,如果选择购买3个月,则价格为96元。 • 8核32G配置的价格为90元/月,如果选择购买3个月,则价格为271元。 另外,还有配置为4核16G10M带宽的服务器,其价格为26元/月起。而8核32G10M带宽的价格也是90元/月。
63 1
|
2月前
|
存储 缓存 关系型数据库
【如何选择Mysql服务器的CPU核数及内存大小】
【如何选择Mysql服务器的CPU核数及内存大小】

热门文章

最新文章