1.认识计算机总线

CPU位宽与其寻址能力并不是挂钩的

冯诺伊曼计算机结构

 

总线是连接多个部件的信息传输线,是各部件共享的传输介质。输入输出设备可以和主存通信而不用影响CPU的工作,这样CPU的工作效率得到了很大的提升。

  • 系统总线: 用于IO接口、主存、CPU之间的信息传输,IO和CPU之间只传输指令信息。
  • 主存总线: 专门用于主存和CPU之间的信息传输

1.2 系统总线的分类

  • 数据总线:

数据总线用来传输各功能部件之间的数据信息,它是双向传输总线,其位数就是数据总线的宽度。总之是用来传输数据的。

  • 地址总线:

地址总线主要用来指出数据总线上的源数据或目的数据在主存单元的地址或者I/O设备的地址。总之就是传输数据所在地址。

  • 控制总线:

由于数据总线、地址总线都是被挂在总线上的所有部件共享的,如何使各部件能在不同时刻占有总线使用权,需依靠控制总线来完成,因此控制总线是用来发出各种控制信号的传输线。总之是用来传输控制指令的。

2.CPU结构

CPU位宽与其寻址能力并不是挂钩的

CPU的结构

CPU基本由运算器、cache、控制器三大部分构成。 

 

3.IA32、IA64、AMD64、Intel64

IA32、x86、x86-32
IA-32为Intel Architecture 32bit简称,即英特尔32位体系架构,在英特尔公司1985年推出的80386微处理器中首先采用。通常也被称为i386、x86-32、x86等。

 

IA64
IA64是后来intel和惠普联合推出的64位体系架构,但是不兼容原有的32位体系结构的应用程序,导致市场惨淡。

 

AMD64、x86-64、x64、

和  Intel64、CT、IA-32E、EM64T


后来AMD推出了兼容32位的64位集关于IA-32的扩展,称为x86-64或者x64,之后改名为AMD64。

Intel后来也采用该架构,先后使用Clackamas Technology (CT)、IA-32E、EM64T(Extended Memory 64 Technology),最后命名为Intel64。

 

4.8086名字的由来

当intel发明第一颗4位的位处理器的时候,intel把他叫4004.编号为4004,第一个“4”代表此芯片是客户订购的产品编号,后一个“4”代表此芯片是intel公司制作的第四个订制芯片。

因为4004的指令集很有限,所以又搞出来了一个升级版本4040.

8008是4004的8位版,8080是4040的8位版。

8085是8080的单5伏电压版

8085升级到16位后,就叫8086了

80286最后一款16位处理器

80386第一款32位处理器

80486英特尔最后一款以数字为编号的

之后进入奔腾(Pentium)、酷睿(Core)时代

 

5.CPU位宽与其寻址能力并不是挂钩的

CPU的位宽一般是以 min{ALU位宽、通用寄存器位宽、数据总线位宽}决定的!也就是说CPU由ALU、通用寄存器、数据总线三者之中最少的位宽决定!所以CPU位宽与其寻址能力并不是挂钩的!

事实上CPU寻址能力因每种CPU设计不同而不同!就比如说32位的X86CPU,其实就在PentiumII是引入了36位的扩展PAE机制(Physical Address Extention)地址位来支持64G内存(源于当时服务器的问题),正常情况下也是用32位寻址,但通过设置相应的寄存器(没记错是cr4)的相应位**PAE就可以支持64G内存了!

Intel的32位架构下,可使用的地址线是36个,可使用的最大物理地址是2^36B,折合64GB,可用的地址空间是4GB。

64位架构下,地址线是46个,所以最大的物理地址是2^46B,折合64TB,可用地址空间一般为128G,如下面第7节所示,微软针对不同版本的操作系统做了不同的限制,有8G,16G,128G,192G;WIN10的有2T和6T

 

这里引入线性地址(也叫虚拟地址)和物理地址的概念,另外还有逻辑地址。这些地址的转换又涉及到内存的段式管理和页式管理。具体可以参见  逻辑地址、虚拟地址、物理地址以及内存管理  以及  怎样通俗的理解操作系统中内存管理分页和分段

 

下图是不同的CPU型号对应的地址线位数与最大的寻址地址

CPU CPU Address Bus Size  Maximum RAM 
8086 20 bit  1MB
8088  20 bit  1MB
80286  24 bit  16MB
80386SX 24 bit  16MB
80386DX  32 bit  4GB
80486SX  32 bit  4GB
80486DX 32 bit  4GB
Pentium I  32 bit  4GB
K6 32 bit  4GB
Duron  32 bit  4GB
Athlon  32 bit  4GB
Athlon XP  32 bit 4GB
Celeron   36 bit 64GB
Pentium Pro 36 bit  64GB
Pentium II 36 bit 64GB
Pentium III 36 bit 64GB
Pentium 4  36 bit 64GB
Athlon   40 bit 1TB 
Athlon-64  40 bit 1TB 
Athlon-64 FX  40 bit 1TB 
Opteron   40 bit 1TB 
Itanium  44 bit  16TB 
Itanium 2   44 bit 16TB 

 

6.为什么32位Windows中实际可用内存少于4G

虽然物理地址有4G,但CPU如果要访问你的显卡上的显存,就必须把物理地址空间的一部分用于标识显存,这种技术被称为memory-mapped I/O,这样可以让CPU操作显存像操作内存一样。

在Windows的设备管理器里,查看显卡的属性页里的“资源”,可以看到内存映射的地址范围,实际上不管32位还是64位,都需要占用一部分地址空间,32位Windows只有4G的地址空间,被显存占去了一部分,所以可用的地址空间就少于4G了

实际上不仅仅是显存,你电脑上的PCI控制器,各种网卡、声卡、USB控制器等等都需要占用一定的物理内存,所以最终的后果就是可用的物理地址范围变得特别少,最少可能只有1.99GB,这种限制在32位Windows上是不可改变的。

 

7.微软对各个版本的Windows的物理内存上限作出限制

PAE(Physical Address Extention)确实可以让x86硬件支持到能够访问64G的地址空间,Windows的内核也支持使用多达64G的物理地址空间,但是微软偏偏要对各个版本的Windows的物理内存上限作出限制,下面是XP和Win7、Win10的物理内存上限

CPU位宽与其寻址能力并不是挂钩的

 

CPU位宽与其寻址能力并不是挂钩的

 

CPU位宽与其寻址能力并不是挂钩的

 

虽然32位环境下实际上CPU支持访问大于4G的物理内存,但Windows将此功能屏蔽了,导致了32位Windows实际只能使用4G的物理地址空间,具体原因参见这个回答:为何微软不在新的操作系统中让 32 位支持大于 4GB 的内存? - 北极的回答

相关文章:

  • 2021-09-01
  • 2021-12-10
  • 2021-06-17
  • 2022-12-23
  • 2021-06-12
  • 2021-09-06
  • 2022-12-23
  • 2021-10-08
猜你喜欢
  • 2022-12-23
  • 2022-02-16
  • 2021-09-26
  • 2022-12-23
  • 2021-09-12
  • 2021-10-07
相关资源
相似解决方案