CPU位数、操作系统位数和编译器位数关系
     随着近来AMD和Intel的64位CPU以及 Microsoft 64位操作系统的相继发布,我想来谈谈CPU位数与操作系统位数的问题,这二者有区别也有联系,操作系统位数的概念是基于CPU的位数的。
     首先我们从计算机的信息表示谈起。计算机中的信息分为两类:控制信息、数据信息。控制信息表示:条件、命令、状态等。数据信息有数值与非数值的两类,非数值如:文字、图像、声音等。所有这些信息在计算机中用数字代码表示,为了电路表示处理方便,就用二进制表示。电路用高电平、低电平表示2个数码“1”和 “0”,简单地可理解为高低电压或有无电。十进制在每个数位上可用10个数码(0—9),二进制在每个数位上可用2个数码(0、1)。用二进制表示数和十进制的其实就是一样,也可进行各种运算。计算机系统的信息从输入、存储、处理到输出就都是用基于二进制的电信号表示。如键盘的每一个按键可用一个数码表示;如鼠标可用2个数码分别表示水平和垂直的位置;如存储字符“A”可用数码“01100101”表示;如存储、输出图像可将图像分为很多点,各点用一数码表示其颜。
     所谈的位数就是表示信息的二进制数码的位数。位数越大能表示的信息范围就越大。如“16位”就是说能表示的颜种数是2的16次幂(65536),32位就有2的32次幂(65536*
65536)。
    CPU的位数是指CPU能一次同时寄存和处理二进制数码的位数,这和CPU中寄存器的位数对应。
    CPU为了实现其功能一般设计了指令集,即是CPU的全部指令,这就是机器语言。计算机的所有功能都是基于CPU的指令集。指令集和CPU的位数是有联系的。如Intel 8086 CPU 是16位,其指令集也是16位。如Intel 80386DX CPU 是32位,其指令集也是32位,但它也保持原16位指令集,这是为了向上兼容。
     操作系统的位数是说其所依赖的指令集的位数。
     计算机系统一般都应有向上兼容性,所以也可有64位CPU上运行32位操作系统、32位CPU上运行16位操作系统的情况。
操作系统位数应该是根据指针类型的位数来定的。整数类型不一定跟位数相等,CPU位数准确地说应该是CPU一次能够并行处理的数据宽度,一般就是指数据总线宽度。
附:
64位CPU如:AMD Athlon64 、Intel Pentium 4 F
32位CPU如:Intel 80386DX 到 Intel Pentium III 和部分Intel Pentium 4
16位CPU如:Intel 8086、Intel 80286
64位操作系统如:Windows XP Professional x64和Windows Server 2003 x64
32位操作系统如:Windows95、Windows98、Windows NT、Windows 2000、Windows XP
16位操作系统如:DOS 
Windows1.0到3.2是运行在DOS上的,不能算是独立的操作系统。
呵呵,是这样的。如果你去看intel网站上的关于ia32结构的白皮书,会搞得比一般人明白许多。16位和32位早期的主要区别是寄存器的位数,内存的寻址和相应指令集的扩充。32位intel  cpu都有real模式,即完全的16位模式,屏蔽掉32位的所有特性;32位模式,可以使用所有的32位特性;模拟的8086模式,可以用一个32位机模拟多个16位的8086机,他们的内存是分段隔离的。现在的操作系统使用的都是32位的模式,因为可以享受到cpu直接提供的内存的分页和分段管理。他们提供模拟机制,实际上也是依托cpu实现的16位环境,而不是直接解释16位代码。由于负责生成汇编代码的主要是编译器,所以设计16位的编译器在任何情况下只能生成16位代码。当然,这并不是说用16位的编译器不可能生成32位的代码,因为他完全可能被设计成在16位实模式下生成32位的代码,从而可以在32位的
机器上被执行。这就是所谓的交叉编译。你可以使用诸如gcc这样的交叉编译器在16位dos环境下编译出可以在32位linux环境下被执行的程序。
 
本文来自CSDN博客,转载请标明出处:blog.csdn/ray_zhang_3/archive/2010/04/03/5447140.aspx
现在才来弄这个问题有点晚了,呵呵。
    这些信息是在网上的,我就总结了对自己有用的。
    操作系统要管理硬件,在对CPU进行管理的时候不同字长的CPU需要不同的指令集来管理,OS要可以管理响应的CPU才好,所以64位的CPU需要64位的OS。
   1、处理器的处理位数和操作系统的关系:
    处理器的位数是路,操作系统是调度灯或者交警。
    如果你的处理器是64位的处理器,而你的操作系统只支持32位处理器的话,就像一个不懂得现代交通的调度系统或者交警指挥交通,效率不会得到提升。
    如果你处理器是32位的,操作系统支支持64位。那么就像把现代交通调度系统和交警搬到清朝时期,你想想,他们愿意吗?(实际上,操作系统也不会正常运行,甚至不能正常
安装)
   2、如何查看系统的位数
一:关于windows系列机系统:
我发现许多软件下载和安装时多了位数选择,有什么32位64位或x86之类的。
  现在关于查看自己系统位数的方法,提供大家参考。
  以前的Windows XP/Server2003几乎都是32位的操作系统
什么电脑可以装linux系统  使用  工具检查处理器:
  1. 在开始菜单下,单击“运行”。
  2. 在“运行”中,输入 ,然后回车。
  3. 系统摘要 在弹出的“项目(system summary)”下面的右窗格中到“处理器(processor)”。注意其数值。
  如果“处理器”对应的值是以“x86”开头的,则该计算机正在运行的是 Windows 操作系统的 32 位版本。
  如果“处理器”对应的值是以“ia64”开头的,则该计算机正在运行的是 Windows 操作系统的 64 位版本。
二:关于linux系统:
     查看Linux操作系统位数(32位还是64)
  在安装一份64位ORACLE数据库之前,想先确认一下操作系统是否是64位。用uname -a命令查看了,但结果中并没有明确说明是多少位,于是可以再继续其它方法。
  1.编程实现:
  在程序中返回sizeof(int)的值,返回的结果是操作系统的字节数。若返回4则是32位操作系统,返回8即是64位。
  2.getconf命令:
  getconf命令可以获取系统的基本配置信息,比如操作系统位数,内存大小,磁盘大小等。
  例如:
  确定磁盘 hdisk0 大小,若是 root 用户,则输入:
  getconf DISK_SIZE /dev/hdisk0
  确定实际内存大小:getconf REAL_MEMORY
  确定是否机器硬件是 32 位或 64 位:getconf HARDWARE_BITMODE
  确定是否内核是 32 位或 64 位: getconf KERNEL_BITMODE
  若以上的getconf KERNEL_BITMODE方法不成功(在我的机器上就不成功),可能是因为版本不一致,可以再尝试用:getconf WORD_BIT,这个命令返回int类型的长度,与sizeof(int)一致。
有的人会问:为什么586主板上必须同时插两条内存?不能插1条或3条吗?实际上这是指586主板使用72线内存时的情形,如果使用168线的内存就可以插任意条内存了,只要有插槽即可。如何理解CPU与内存条的关系呢? 
CPU不仅可以分成X86,还可以从位数上划分,如Intel 8088/8086 CPU就是8位的,而80286 CPU就是16位的, CPU与I/O口的操作要受I/O口的限制,每次只能传8位。但与内存交换数据则是公平的同频宽的传输。而CPU的发展比内存快,即位数多,因此内存条就要组合起来才能和CPU传输一次数据。缺少内存条就可能造成电脑系统无法工作。上面所说的586 CPU是64位的,因此就要使用两条32位的72线内存条。而168线的内存条是64位的,所以可以独立的工作。显然,72线并不表示72位都用来传输数据。同理,168线内存也不是168根数据线。下面的列表可以告诉您组装电脑时如何匹配CPU和内存条。 
CPU种类 CPU内部宽度 30线内存条/BANK 72线内存条/BANK 168线内存条/BANK 
Intel8088/8086 8位 1条(每条8位) 
Intel 80286 16位 2条(每条8位) 
Intel80386SX 16位 2条(每条8位) 
Intel 80386DX 32位 4条(每条8位) 
Intel 80486SX 32位 4条(每条8位) 
Intel 80486DX 32位 4条(每条8位) 1条(每条32位) 
Pentium 64位 2条(每条32位) 1条(每条64位) 
Pentium Pro 64位 2条(每条32位) 1条(每条64位) 
Pentium II 64位 2条(每条32位) 1条(每条64位) 
如果您没有这个表,又记不住应该插几条内存,该怎么办呢?很简单,仔细查看主板上的内存槽,上面有BANK编号,如BANK0,BANK1等。您知道为什么主板说明书上都说要插满一个BANK,才能插另一个BANK吗?实际上,一个BANK的几条内存宽度之和就是CPU内部的宽度。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。