CPU(Central Processing Unit,中央处理器)是计算机系统中的主要组件之一,负责执行程序指令并进行数据处理。我们之前已经介绍了CPU与冯诺依曼机CPU与冯诺依曼机-CSDN博客,而ISA(Instruction Set Architecture,指令集架构)则是 CPU 的设计蓝图,定义了 CPU 支持的指令集合、寄存器、数据类型和操作。
ISA 可以被看作是一种抽象的计算机模型,它规定了计算机硬件与软件之间的接口,使得编译器、汇编器和操作系统能够与 CPU 进行通信,并为程序员提供编程的接口。
ISA 定义了以下内容:
指令集:ISA 规定了 CPU 支持的指令集合,包括算术运算、逻辑运算、数据传输、控制流程等操作。不同的 CPU 可能支持不同的指令集,例如 x86、ARM、MIPS 等。
寄存器:ISA 规定了 CPU 中的寄存器结构,包括通用寄存器、特殊目的寄存器等。寄存器用于存储指令执行过程中的临时数据、地址和控制信息。
内存访问:ISA 规定了 CPU 如何与内存进行交互,包括内存地址空间的组织、地址访问方式(直接寻址、间接寻址等)、数据的读写操作等。
数据类型:ISA 规定了 CPU 支持的数据类型和操作,包括整数、浮点数、字符、向量等数据类型,以及对应的算术运算、逻辑运算、转换操作等。
异常处理和控制流:ISA 规定了 CPU 如何处理异常事件(如中断、陷阱、系统调用等)、程序的控制流程(分支、跳转、子程序调用等)以及指令执行的顺序和优先级。
总的来说,ISA 定义了 CPU 的体系结构和指令集,为软件开发提供了底层的硬件支持和抽象接口,使得不同的软件可以在不同的 CPU 上运行,并为 CPU 的设计和优化提供了基础。
不同的 ISA(指令集架构)代表着不同类型的 CPU 架构和指令集设计。以下是几种常见的 ISA 的简要介绍:
x86:
ARM:
MIPS:
PowerPC:
ISA那么重要,那么我们编译一个java文件或者C文件的过程中,他扮演了什么角色呢?
编译阶段:在编译C程序时,编译器会将源代码转换为目标机器的汇编代码。这个过程中,编译器会根据目标机器的ISA生成相应的汇编代码,以便最终生成与该ISA兼容的机器码。
链接阶段:在链接阶段,编译器会将各个源文件编译生成的目标文件链接在一起,形成最终的可执行文件。链接器会处理符号解析、重定位等任务,并确保生成的可执行文件与目标机器的ISA兼容。
C程序在编译和链接阶段会考虑到目标机器的ISA,以生成适合该平台的机器码。
在Java程序中,不同机器的ISA(Instruction Set Architecture)通常在Java虚拟机(JVM)执行字节码时发挥作用。Java字节码是与平台无关的中间代码,它由javac编译器从Java源代码生成。当Java程序在特定的平台上运行时,Java虚拟机会将字节码转换为该平台的本地机器码执行,这个转换过程中会考虑到该平台的ISA。因此,Java程序在执行过程中会在JVM层面与不同机器的ISA进行交互。
在计算机中,CPU位数通常指的是CPU寄存器的位数,这决定了CPU一次可以处理的数据位数。CPU寄存器是CPU内部用于存储和处理数据的关键部件,因此其位数直接影响着CPU能够处理的数据大小。
举例来说,一个32位CPU意味着它的寄存器的宽度是32位(也交一个word),即一次能处理32位的数据。同样,64位CPU的寄存器宽度是64位,可以一次处理64位的数据。CPU的位数通常也就是它能够寻址的内存地址的位数,及地址总线位数,也等于操作系统的位数。
地址线的位数决定了计算机可以寻址的内存单元的数量。如果一个计算机有 n 位地址线,也就是地址有几个bit位,那么它可以寻址 2^n 个内存单元。例如,32位地址线可以寻址的内存单元数量是 2^32,而64位地址线可以寻址的内存单元数量是 2^64。
有了计算机的内存大小与地址线位数,我们就能计算出常见的计算机内存单元大小了,分别为1,2,4字节。
以一个4GB内存,32位机器为例

这样我们就得到了最为常见的一个内存单元大小。
我们在以C语言为例,先介绍一下,笔者用的是Vs studio,Vs studio提供了两种架构来使用
X86 架构:X86 架构是一种 32 位或64位的指令集架构,它最初由 Intel 公司开发,并被广泛应用于个人计算机和服务器领域。X86 架构的处理器可以是 32 位的,也可以是 64 位的。在 32 位的处理器上运行的操作系统通常被称为 X86 操作系统。
X64 架构:X64 架构是一种 64 位的指令集架构,也被称为 AMD64 或 Intel 64。它是在 X86 架构的基础上扩展而来的,增加了对更大内存地址空间的支持。X64 架构的处理器只能是 64 位的。在 64 位的处理器上运行的操作系统通常被称为 X64 操作系统或者 64 位操作系统。
我将用地址的大小与bit位位数,来显示是32位机器还是64位机器,一个计算机有 n 位地址线,也就是地址有几个bit位

此时X86这个架构下,我用的是32位,此时地址为8*4=32bit,X64这个架构下我用的是64位,地址大小为8*8=64位。