计算机中各种位宽的含义

x86架构计算机是==按字节寻址==的。也就是一个内存单元是字节。

大家接触计算机就会听到各种位宽,多少位的CPU,多少位的操作系统,多少位的数据总线、地址总线等,很多时候大家纠结这些位宽之间有什么关系?有些资料或者学习视频里对这些概念的解释也是不准确,甚至是错误的,例如下面的说法:

1 数据总线和CPU的字长总是一致;

2 数据总线和地址总线位数一致;

都是常见的错误表述!

要搞清楚各种位宽的含义,先要解释下各位宽的物理意义:

一、    计算机的“字长”—俗称是多少位的CPU

这里上下文特指计算机的字长,它就是CPU里寄存器的宽度,学了计算机组成应该知道,CPU里除了控制器、运算器之外,还有很多寄存器(当然现在CPU还有Cache等),机器的字长就是其中通用寄存器(GPR)的位宽。

CPU在设计的时候会让运算器和通用寄存器的位宽保持一致,在硬件上就是CPU一次能进行的多少位数据运算,所以字长反应了CPU的数据运算能力(一次可以进行几位的数据运算,得到的结果是几位的)。

这里还要提一下编程人员经常说的字长,我们姑且叫它是软件字长吧,这个和上面的机器字长不一样,机器字长就叫硬件字长吧。可以看下面这篇文章,这里不赘述了。

https://www.bilibili.com/read/cv19069811

二、    数据总线位宽

有些资料里说数据总线宽度和机器字长一致,这种说法是不准确的,数据总线细分又分外部数据总线和内部数据总线,处理器在设计时一般通用寄存器GPR和运算器及内部数据总线是一致的,外部数据总线会链接内存、显卡、IO、设备等,外部数据总线反应的是CPU和外设的数据传送能力,而平时说的数据总线没特殊说明一般指外部数据总线,那“数据总线宽度和机器字长一致”这种说的就是不准确的。

三、    地址总线位宽

在计算机里内存寻址分逻辑地址寻址和物理地址寻址,地址线反应的就是物理地址的寻址能力。

那什么是逻辑寻址呢?学过计算机组成应该知道,指令执行时涉及指令寻址(下一条指令在哪里)和操作数寻址(指令执行时操作数在哪里),指令寻址肯定都是内存寻址(代码加载到内存中后才被执行),而操作数寻址中除了立即数寻址和寄存器寻址,其他都要进行内存访问,那就需要计算内存地址,内存地址的计算除了寄存器间接寻址不需要计算内存地址外,其他大都需要运算器去计算访存位置,上面介绍计算机“字长”概念时提到了,运算器字长决定了运算结果的位数,所以字长决定了计算机的逻辑地址寻址能力,在平时我们提的程序的地址空间其实说的都是这个逻辑地址范围。

很多资料里说地址总线和数据总线一致,这种说法也是错的,一个是物理上CPU能辨别的存储单元个数,一个是程序逻辑上能辨别的地址单元个数,两者没直接联系。以x86系列处理器为例,字长和外部数据总线及地址线可以各不相同(见下图)。

作者:papadogbl https://www.bilibili.com/read/cv19325810/ 出处:bilibili

显示 Gitment 评论