什么是16位,32位和64位架构?

时间:2010-08-29 10:40:55

标签: 64-bit operating-system 32-bit microprocessors 16-bit

对于微处理器和/或操作系统,16位,32位和64位架构意味着什么?

对于微处理器,它是指General Purpose Register的最大大小,Integer的大小,Address-line的数量或Data Bus line的数量还是什么?< / p>

说“DOS is a 16-bit OS”,“Windows in a 32-bit OS”等等我们的意思是什么?

7 个答案:

答案 0 :(得分:16)

如果您想了解评论,我的原始答案如下。

新答案

正如你所说,有各种各样的措施。幸运的是,对于许多CPU来说,很多措施是相同的,所以没有混淆。让我们看看一些数据(抱歉图片上传,我看不到在markdown中做表的好方法)。 Table data

如您所见,许多专栏都是不错的候选人。但是,我认为通用寄存器(绿色)的大小是最常被理解的答案。

当处理器的大小因各种寄存器而异,通常会对其进行更详细的描述,例如Motorola 68k被描述为16 / 32bit芯片。

其他人认为它是指令总线宽度(黄色),也在表格中匹配。然而,在今天的流水线世界中,我认为对于大多数应用而言,这是一个与通用寄存器的大小相关的措施。


原始答案

不同的人可能意味着不同的东西,因为正如你所说,有几种措施。因此,例如,有人谈论内存寻址可能意味着某人谈论整数算术的不同。但是,我会尝试定义我认为的共同理解。

我的看法是,对于CPU来说,它意味着“用于标准操作的典型寄存器的大小”或“数据总线的大小”(两者通常是等效的)。

我用以下逻辑证明这一点。 Z80具有8位累加器和8位数据总线,同时具有16位存储器寻址寄存器(IX,IY,SP,PC)和16位存储器地址总线。 Z80被称为8位微处理器。这意味着人们通常必须表示主整数算术大小或数据总线大小,而不是内存寻址大小。

这不是指令的大小,因为Z80(再次)有1,2和3字节指令,但当然多读取多字节读取。在另一个方向,8086是一个16位微处理器,可以读取8或16位指令。所以我不得不反对那些说它是指令大小的答案。

对于操作系统,我将其定义为“代码编译为在该大小的CPU上运行”,因此32位操作系统的代码编译为在32位CPU上运行(根据上面的定义)。 / p>

答案 1 :(得分:7)

CPU“是”多少位,表示它的指令字长是多少。 在32位CPU上,此类指令的字长为32位,这意味着这是CPU可以作为指令或数据处理的宽度,通常会产生具有该宽度的总线。 出于类似的原因,寄存器具有CPU字长的大小,但是为了不同的目的,通常会有更大的寄存器。

PDP-8计算机为例。这是一台12位电脑。每条指令都是12位长。为了处理相同宽度的数据,累加器也是12位。 但是,使12位计算机成为12位计算机的原因是它的指令字长。它在前面板上有12个开关,可以通过指令进行编程。

这是打破8/16/32位焦点的一个很好的例子。

位数通常也是地址总线的大小。因此它通常告诉最大可寻址内存。

Wikipedia对此有一个很好的解释:

  

在计算机体系结构中,32位整数,存储器地址或其他数据单元是最多32位(4个八位位组)宽的数据单元。此外,32位CPU和ALU架构是基于寄存器,地址总线或该大小的数据总线的架构。 32位也是一代计算机的术语,其中32位处理器是常态。

现在让我们谈谈操作系统。

使用OS-es,这与CPU的实际“bitty-ness”不太相关,它通常反映了如何组装操作码(CPU的字长)以及寄存器的处理方式(你可以' t在16位寄存器中加载32位值以及如何处理存储器。将其视为已完成的已编译程序。它存储为二进制指令,因此适合CPU的字长。任务方面,它必须能够解决整个内存,否则无法进行适当的内存管理。

但接下来的是,程序是32位还是64位(OS本质上是一个程序)它是如何存储二进制指令以及寄存器和存储器的寻址方式。总而言之,这适用于所有类型的程序,而不仅仅是操作系统。这就是为什么你有编译为32位或64位的程序。

答案 2 :(得分:1)

定义是营销术语而不是精确的技术术语。

在模糊技术术语中,它们与架构上可见的宽度相关,而不是任何实际的实现寄存器或总线宽度。例如,68008被归类为32位CPU,但在硅片中有16位寄存器,只有8位数据总线和20多个地址位。

答案 3 :(得分:1)

http://en.wikipedia.org/wiki/64-bit#64-bit_data_models数据模型意味着语言的位数。

“操作系统是x位”短语通常意味着操作系统是针对x位cpu模式编写的,即64位Windows在x86-64上使用长模式,其中寄存器为64位且地址空间为64位大,与32位模式存在其他明显差异,其中通常寄存器为32位宽,地址空间为32位大。在x86上,32位和64位模式之间的主要区别在于存在32位的分段以实现历史兼容性。

通常操作系统的编写考虑了CPU的位数,x86-64是数十年向后兼容性的显着例子 - 您可以拥有从16位实模式程序到32位保护模式程序到64-的所有功能。位长模式程序。

另外,有不同的虚拟化方法,因此您的程序可能像32位模式一样运行,但实际上它完全由非x86核心执行。

答案 4 :(得分:1)

差异归结为传递给通用寄存器进行操作的指令集的位宽。 16位可以在2个字节上操作,64个字节在8个字节的指令上一次操作。通常,您可以通过在每个时钟周期执行更密集的指令来提高处理器的吞吐量。

答案 5 :(得分:0)

据我所知,从技术上讲,它是整数路径的宽度。我听说有16位芯片有32位寻址。但实际上,它是地址宽度。 sizeof(void *)在16位芯片上为16位,32位为32位,64位为64位。

这会导致问题,因为C和C ++允许在void *和整数类型之间进行转换,如果整数类型足够大(与指针大小相同),则是安全的。

会导致各种不安全的东西
void* p = something;
int i = (int)p;

在64位代码上会出现可怕的崩溃和刻录(在32位上运行),因为void *现在是int的两倍。

在大多数语言中,您必须努力关注您正在处理的系统的宽度。

答案 6 :(得分:0)

当我们谈论计算机科学中的2 ^ n位架构时,我们基本上讨论的是存储器寄存器,地址总线大小或数据总线大小。 2 ^ n位体系结构术语背后的基本概念是表示此处的2 ^ n位数据可用于通过进程处理/传输大小为2 ^ n的数据。