CPU位数操作系统位数应用程序位数都是什么

Posted gss128

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CPU位数操作系统位数应用程序位数都是什么相关的知识,希望对你有一定的参考价值。

 问题起源:

64位CPU的64指的是什么

32位计算机的32位指的是啥

32位计算机装8G内存有用吗

32位应用程序和64位应用程序又是啥...

...

能说上来一点,但实际上含糊不清的概念有很多

下文主要从内存、CPU、操作系统的角度对一些容易模糊的基础知识做概况。

 

内存

主存储器,简称主存或内存,内存里的数据能被CPU直接访问。它的存储体由许多存储单元组成,每个存储单元可存储一串二进制代码(称为存储字)。

存储单元是内存的最小可寻址单位,通常都以字节(byte)为单位,一个字节占8位(bit)。

技术图片

 

存储单元可存储的位数称为存储字长,存储字长是CPU一次能并行处理的二进制位数。

C语言中的指针是用来存放内存地址的,指针的大小就等于字长。对于32位系统,内存地址位数是4字节,指针也就是4字节,64位系统则是8字节。

CPU

我们所说的32位处理器,指的是CPU内部的通用寄存器的宽度为32位,一次能处理的最大位数为32位(一次处理4个字节),它的地址总线位数为32位 (地址总线位数决定了CPU的寻址能力)。

可寻址物理地址范围为4GB(2^32byte= 4GB) 。4GB即4G个字节,CPU可寻址4G个地址,根据内存地址访问内存的存储单元。

内存地址计算机操作系统分配,每一个字节分配一个内存地址,,cpu只需要知道某个数据类型的地址, 就可以直接去到读影的内存位置去提取数据(这里的"直接",指直接寻址技术)。

由此可知,32位的操作系统(32位处理器或64位处理器的计算机才能装32位操作系统),即使配上8GB内存,操作系统最多也只能给其中4GB分配地址。(实际能被操作系统访问到的一般是3.2GB左右,有一部分会被显卡缓存等占用)

CPU发展迅猛,从零几年开始CPU就全都是64位的了,64位CPU理论上最多支持16EB内存,可理解成近似于无限大。

 

CPU通过MMU(内存管理单元)访问内存

CPU 在访问内存的时候都需要通过 MMU 把虚拟地址转化为物理地址,然后通过总线访问内存。MMU 开启后 CPU 看到的所有地址都是虚拟地址,
CPU 把这个虚拟地址发给 MMU 后,MMU 会通过页表在页表里查出这个虚拟地址对应的物理地址是什么,从而去访问外面的 DDR(内存条)。

内存的存取速度比中央处理器操作速度要慢得多,使CPU的高速处理能力不能充分发挥,整个计算机系统的工作效率受到影响。

不同存储器访问时间差异很大,离CPU越近的存储器,速度越快,每字节的成本越高,容量也因此越小。

CPU中的寄存器速度最快,离CPU最近,成本最高,所以个数容量有限,其次是高速缓存(分级),再次是主存、磁盘。

计算机存储体系结构图:

技术图片

高速缓冲存储器cache,用来提高CPU访问内存的速度,L1、L2、L3都属于高速缓存。

使用高速缓存的过程成为缓存,cache的效率由命中率来衡量,一个好的cache效率通常在80%-95%的命中率。

操作系统

我们所说的32位操作系统,指的是操作系统编译时使用x86位指令集,64位操作系统指的是使用x64指令集。

由上述可知,32位处理器的CPU是不可能装64位操作系统的,因为缺少64位指令集。

 

32/64位的应用程序也指的是编译时使用的指令集不同。

在windows上程序大多数是以exe形式发布的,得到的程序是目标文件以后的结果,本身是带有位数的。

在linux上,本身大部分软件包rpm等也是已经编译好的,也是带有位数的。

 

软件编程实际是面向特定指令集编译的,经过指令解释器编译成为控制信号传给CPU。

技术图片

对于C、C++等需要操作系统提供的动态链接库和系统API形成的可执行文件来说,是有位数的。

而对于Java、.Net这类的依托于虚拟机或解析器来动态运行的语言来说,编译出来的程序是中间表示,运行时虚拟机通过不同平台的不同解释器,将中间指令生成与平台相对应的机器码,体现了java等编程语言的平台无关性。

 

操作系统和指令集是可以向下兼容的,这意味着只要满足硬件和软件兼容在64位操作系统上就可以运行32位应用程序(不能兼容32位的驱动)。

 64位程序通常要比32位程序慢,因为64位指针比32位的大一倍。

 

64位操作系统运算速度更快(处理器一次可以取64位数据),理论上比32位提高了一倍,能访问的内存更大。

但是要在64位操作系统上运行64位软件才能发挥64位CPU的最佳性能,

在64位操作系统上运行32位程序,会调用32位相关的运行库,环境和32位一致,所以和运行在32位操作系统上的性能相差不大。

 

上面简要的介绍了,内存,CPU位数、操作系统位数、应用程序位数的概念

相关的组成原理、操作系统知识还有很多,有空闲的时候应该更深入的去了解这些基础知识,有助于理解程序的运行原理。

以上是关于CPU位数操作系统位数应用程序位数都是什么的主要内容,如果未能解决你的问题,请参考以下文章

CentOS查看CPU信息位数多核信息

CentOS查看CPU信息位数多核信息

centos系统查看系统版本内核版本系统位数cpu个数核心数线程数

如何判断CPU的位数

ZZNUOJ_C语言1076:三位数求解(完整代码)

点后打印8位数