我读过微处理器由几个组件组成,每个组件都有相同/不同的“大小”。但真正让我感到困惑的是,是什么决定了微处理器的规定大小为 16 位、32 位或 64 位......
是吗:
- ALU的容量?
- 数据总线的大小?
- 地址总线的大小?
- 上述的“最小公分母”?
- 还是我迄今为止不知道的其他因素?
我读过微处理器由几个组件组成,每个组件都有相同/不同的“大小”。但真正让我感到困惑的是,是什么决定了微处理器的规定大小为 16 位、32 位或 64 位......
是吗:
Generally the bit-size of a processor is the size of its general purpose registers. this often corresponds to the size of the memory bus and possibly the address bus, but doesn't necessarily.
For example, Intel sold a version of the 386 chip called the 386SX (http://en.wikipedia.org/wiki/Intel_80386#The_i386SX_variant) that internally was a 386 with 32-bit registers, but only has a 16 bit data bus. I think that most people would consider the chip to still be a 32-bit processor instead of a 16 bit processor.
我想我会试一试的。传统上,我认为“大小”是指寄存器集中的宽度(位数)。在“我的”第一台计算机上,DEC PDP-8/E 可用的单个寄存器 - 累加器 - 是 12 位宽,它是一台 12 位计算机,在 PDP-11 上,寄存器是 16 位宽,它是一个 16位计算机。IBM 370 和 VAX 有 32 位寄存器并且是 32 位计算机。
从 80386 开始,事情变得很困难。根据操作模式,它可能显示为实模式 8086、保护模式 (PM) 80286 或 PM 80386。对于使用 AMD64 或 x86-64 的 64 位处理器,您拥有上述所有内容以及 64 位下午。那么它们是什么?它应该取决于在其上运行的操作系统的基本操作模式。Windows NT 2000、Windows XP-32、Vista-32 7-32 使处理器为 32 位。带有“64”的操作系统使处理器成为 64 位。
至于公交车什么的。x86 处理器地址+数据上有两条物理总线,内存+i/o 有两条逻辑总线。处理器上的特殊引脚决定了操作是内存还是 i/o,读还是写等等。在 8086/8088 上,数据和地址总线共享相同的引脚 A0-A15、D0-D15/A0-A7 和 D0-D7,其中位 A16-A19/A8-A19 是严格地址。在 80286 上它们是分开的,不确定 80186/80188。在 80286 上有 24 条地址线和 16 条数据线。在 80386 和 80486 上,地址和数据各有 32 个。80386SX 的外部配置与 80286 相同。
在这之后公共汽车变得复杂。处理器在内部运行得如此之快,以至于它们或多或少地不断等待它们的缓存,而这些缓存又或多或少地不断地等待外部 RAM。为了满足高速缓存对数据的贪得无厌的需求,外部存储器开始以 64 位宽的块传输数据,从 Pentium 和 Pentium MMX 开始,它们都是具有 32 条地址线但具有 64 条数据线的 32 位处理器。
使用后来的处理器,地址线的数量增加到 36 条,允许总可寻址外部存储器为 64 GB。处理器内部保持 32 位。
在多核处理器上,对数据的渴望更加明显,因此它们可能有几组地址和数据总线,以方便将数据塞进处理器中。台式机处理器可能有两个或三个,服务器处理器可能有三到四个。我不确定,但我相信有些人已经切换到 128 位宽的数据总线。
对于现代 64 位处理器,同时拥有 64 条地址线是不可行的,因为这将允许高达 160 亿千兆字节的内存,而这在今天是不可能的。一些主板允许 128 GB,这意味着处理器至少需要 37 条地址线。
如您所见,地址和数据总线不再真正可用于确定处理器大小。他们实际上在过去的 25 年(80386 模式)中没有。
在 C 中,int 类型应该等同于寄存器宽度。在 AMD64 上,这并不是因为对 64 位整数的需求不是很大:在大多数情况下,32 位整数就很好。不过,AMD64 上 C 中的指针宽度是 64 位。
Generally this refers to the amount of the memory (2^n) bytes that is addressable by the CPU. Usually it's the same as data bus, but the hardware may do multiple accesss to retrieve that amount so is not 100% guaranteed. Sometimes it also corresponds to CPU register size, however it too can be different.