32位和64位操作系统
你是否经常听到下面这些词汇:
32位操作系统
、64位操作系统
、32位处理器
、64位处理器
、x86
、x64
这些词汇是什么意思?它们之间是什么关系?
本文将详细讲解这些基本概念
XX位处理器
我们所说的32位处理器
、64位处理器
,这里的32
和64
通常是指CPU的寻址能力
什么是寻址能力,这还要从内存地址说起
你需要先阅读上一章节从二进制到十六进制
我们知道,为了方便CPU从内存中取出数据,CPU会把内存划分为一段一段的区域,每一段占8bit,即一个字节
通过对每个区域进行编号,来精准的操作某一个内存区

上图中的编号,就是内存地址
当我们要让CPU取出内存地址3
的时候,我们要通过连接到CPU的数据总线(CPU的数据总线通常连接在电脑主板上),向CPU发送一个取值指令,同时,告诉CPU内存地址

从图中可以看出,CPU根本不是预先给每个内存地址编号,而是根据你发送的内存地址,通过一个数学运算,就立刻算出应该从整个内存的哪个位置开始取
我之所以这样解释,是因为有些朋友总是纳闷:对内存编号没问题,那编号本身是存在什么地方呢?
答案就是:编号根本不存在任何地方,而是在操作内存的时候,CPU根据你发送的编号,直接计算出来的
就像上图中所示,你发送一个地址3,CPU并不知道3的编号,它甚至没有编号这个概念,它只是简单的经过运算3 * 8 bit = 24 bit
,计算出需要读取的数据,在整个内存中的偏移量,从而定位到内存的第24bit,然后读取一个字节(8bit)即可
这就是内存地址在真实的硬件环境中是如何应用的
再说回我们的话题
我们要让CPU操作某个数据,需要告诉CPU内存地址
怎么告诉CPU内存地址呢?根据之前所讲,是由主板通过数据总线,发送一个地址给CPU
要知道,在计算机内部,所有的东西都必须用二进制表示,包括内存地址,比如,内存为3
的地址实际上是11
你可以把数据总线想象成一个高速公路,CPU想象成一个临时仓库,你向CPU发送的地址是高速公路上的并行车辆

从上图中可以看出以下细节:
- CPU仓库:CPU实际上对数据拥有短暂、快速的暂存能力,这里把CPU比作仓库,实际上是指CPU的寄存器。寄存器会短暂的记录数据,比如收到一个地址后,寄存器会把地址短暂的记录下来,等待CPU通过这个地址计算出偏移量。
- 数据总线的宽度决定了一次能运送的数据量,上图中的数据总线宽度是5,则表示一次有能力运送5bit的数据
- 数据总线的宽度必须和CPU寄存器的存储能力一致。试想,如果仓库中只能存3bit的数据,而数据总线运输过来的是5bit,则多余的2bit必须要丢弃,这样一来,多出来的数据就无意义了。所以,如果CPU的寄存器能暂存5bit,则数据总线一定也是5bit的宽度。
我们平时所说的32位处理器,指的就是寄存器可以暂存32位的数据,同时,数据总线的宽度也是32位
这也就意味着,我最大可以向CPU发送的地址编号是32
个1
,即十进制的,即4294967295
根据存储的换算公式,1GB = 1024MB,1MB = 1024KB,1KB = 1024 byte,1byte = 8bit
可以轻松的换算出:32位的CPU,根据最大的地址编号,可以读到内存的偏移量为:4294967295
个字节,也就是大约4GB
这就是为什么很多老的电脑,它使用的是32位的CPU,哪怕你给内存升级到16G
,它还是只能识别4G
于是,我们有了这样的说法:一个X位的CPU,它的寻址能力是X位,能识别的内存是字节
大家可以根据这样的算法,算算看,64位的CPU大概可以识别多少G的内存,答案在本文末尾
另外,64位的CPU不仅可以提升寻址能力,还可以提升一次性读取数据的能力,比如,64位的CPU可以一次性从内存中读取8个字节的数据,然后通过64位的数据总线传输,不需要分8次读取
x86 和 x64
x86和x64是指CPU的指令集
这是啥意思呢
所谓指令,是指向CPU发送的一个特殊的二进制命令,常见的指令有:取出某个内存中的数据(取址)、保存某个数据到某个内存(存值)、运算等等
要知道CPU发展了这么多年,速度不断的提升,同时也不断开发出新的指令
x86是一种古老的指令集合,它出现于1978年,目前这种指令集主要集中在32位的CPU上
x86-64,简称x64,它在x86指令集基础上新增了很多针对64位CPU的指令集
所以,有些软件分为x86版本和x64版本,它们就是为不同指令集的CPU分开发布的版本
这就产生了以下有趣的现象:
- 如果你的CPU是32位的,那么只能安装软件的x86版本,因为x64版本要用到新的指令集,你的CPU是不支持的
- 如果你的CPU是64位的,既可以安装x64版本,也可以安装x86版本,因为x64指令集兼容x86指令集。但是,如果你安装的是x86版本,虽然CPU仍然是64位的,但是你的软件只会使用x86指令集,也就是说,你的软件只会向CPU运送32位的地址和数据,信息高速公路有一半没有用上,无法完全发挥64位CPU的优势。
XX位操作系统
操作系统的出现,让用户不需要直接管理硬件
如果你看到这里,应该知道直接操作硬件是非常麻烦和复杂的
操作系统就是用来直接管理硬件的
因此,既然作为硬件的核心——CPU,拥有32位和64位,为了尽可能的发挥CPU的优势,操作系统也分为32位和64位
和其他软件一样
32位的CPU上,只能安装32位的操作系统,因为64位操作系统会使用新的指令集,而CPU是没有这些指令的
64位的CPU上,可以安装64和32位的操作系统,当然,和软件一样,32位的操作系统无法发挥64位的速度优势
另外,由于软件不会直接管理硬件,而是通过向操作系统对硬件进行管理,因此:
只有64位的操作系统才能安装64位的软件,当然也兼容32位的软件
32位的操作系统只能安装32位的软件
它们的关系就像是下图所示

64位的CPU可以识别多少G的内存 ≈ = =
GB