Chinaunix首页 | 论坛 | 博客
  • 博客访问: 203327
  • 博文数量: 77
  • 博客积分: 1749
  • 博客等级: 上尉
  • 技术积分: 810
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-28 18:27
文章分类
文章存档

2012年(28)

2011年(49)

分类: LINUX

2011-12-10 20:20:05

from: http://blog.csdn.net/ray_zhang_3/article/details/5447140

CPU位数与操作系统位数,这二者有区别也有联系,操作系统位数的概念是基于CPU的位数的。

首先我们从计算机的信息表示谈起。

计算机中的信息分为两类:控制信息、数据信息。

控制信息表示:条件、命令、状态等。

数据信息有数值与非数值的两类,非数值如:文字、图像、声音等。

所有这些信息在计算机中用数字代码表示,为了电路表示处理方便,就用二进制表示。电路用高电平、低电平表示2个数码“1”和 “0”,简单地可理解为高低电压或有无电。如键盘的每一个按键可用一个数码表示;如鼠标可用2个数码分别表示水平和垂直的位置。
所谈的位数就是表示信息的二进制数码的位数。位数越大能表示的信息范围就越大。

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一次能够并行处理的数据宽度,一般就是指数据总线宽度。

呵呵,是这样的。如果你去看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环境下被执行 的程序。

阅读(1342) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~