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上的。


相关文章
|
2月前
|
缓存 Linux Go
一次性构建出多CPU指令集的 Docker 镜像
本文介绍了使用 Docker Buildx 构建跨平台 Docker 镜像的流程。首先确保系统为 Ubuntu 22.04,安装 Docker 和相关依赖。然后配置 Docker Buildx,编写 Go 程序和 Dockerfile。接着,创建构建脚本 `build.sh` 自动化构建并推送镜像到 Docker Hub。运行此脚本将为不同平台(如 amd64, arm64)构建并推送镜像。最后,在 Docker Hub 可查看构建结果,并可在其他系统上测试镜像。
65 3
|
29天前
|
缓存 C语言 计算机视觉
程序与技术分享:CPU0处理器的架构及应用
程序与技术分享:CPU0处理器的架构及应用
|
2天前
|
NoSQL Redis 开发工具
在多核 CPU 或 NUMA 架构的机器上运行 Redis 实例时应该注意什么
在多核 CPU 或 NUMA 架构的机器上运行 Redis 实例时应该注意什么
|
19天前
|
机器学习/深度学习 人工智能 并行计算
GPU 和 CPU 处理器的架构
CPU(中央处理器)和 GPU(图形处理单元)是计算机系统中最重要的两种处理器。它们各自的架构设计和技术体系决定了其在不同应用领域中的性能和效率。
29 1
|
29天前
|
Linux Perl
如何在Linux系统中确定CPU架构
如何在Linux系统中确定CPU架构
21 0
|
1月前
|
芯片
芯片设计 | 一文读懂,CPU、精简指令集、复杂指令集该如何理解
芯片设计 | 一文读懂,CPU、精简指令集、复杂指令集该如何理解
80 0
|
2月前
|
存储 人工智能 并行计算
计算机架构:漫游CPU的奥秘世界(二)
计算机架构:漫游CPU的奥秘世界
94 0
|
2月前
|
存储 人工智能 缓存
计算机架构:漫游CPU的奥秘世界(一)
计算机架构:漫游CPU的奥秘世界
90 0
|
4天前
|
缓存 监控 负载均衡
探索微服务架构中的API网关模式
在微服务架构的海洋中,API网关如同一座灯塔,指引着服务间的通信。本文将深入探讨API网关的设计哲学、关键功能以及在实际应用中的考量因素。通过对比分析,我们将揭示API网关如何在提高系统可维护性、增强安全性和优化性能方面发挥其不可或缺的作用。此外,文章还将提供实践指南,帮助读者在构建或改进微服务架构时,做出明智的API网关选择和部署决策。
|
4天前
|
Kubernetes 持续交付 开发者
探索后端技术的未来:微服务架构与容器化部署的融合
在数字化时代的浪潮中,后端技术正经历着前所未有的变革。本文将深入探讨微服务架构和容器化部署如何共同推动后端技术的发展,提升应用的性能、可扩展性和可靠性。通过分析现代软件开发的需求,我们将揭示这两种技术如何互补,以及它们在未来后端开发中的潜力和挑战。