计算机组成原理--64位CPU装载32位操作系统,它的寻址能⼒还
是4GB吗?
借由这个问题,今天我们就把 32 位 CPU、64 位 CPU、32 位操作系统、64 位操作系统之间的区别与联系彻底搞清楚。对于这个问题,博主也是⼀知半解了好长时间啊~
基本概念
32位的CPU与64位CPU
以下内容摘⾃:
64 位 CPU 是指 CPU 内部的通⽤寄存器的宽度为 64 ⽐特,⽀持整数的 64 ⽐特宽度的算术与逻辑运算。那么 32 位 CPU 同
理。
⼀个 CPU,联系外部的数据总线与地址总线,可能有不同的宽度;术语“64位”也常⽤于描述这些总线的⼤⼩。不过这⼀术语也可能指电脑指令集的指令长度,或其它的数据项。去掉进⼀步的条件,“64位”电脑架构⼀般具有 64 位宽的整数型寄存器,它可⽀持 64 位“区块”的整数型数据。
64 位架构⽆疑可应⽤在需要处理⼤量数据的应⽤程序,如数字视频、科学运算、和早期的⼤型数据库。
那么 32 位 CPU 与 64 位 CPU 到底有什么区别?
1. 数据处理能⼒增强:64 位 CPU 通⽤寄存器的位宽增加⼀倍,这也就意味着 64 位 CPU 可以⼀次性处理 64bit 的整形数据;
2. 内存寻址能⼒增强:如果是 32 位 CPU 的话,它的地址总线最多不会超过 32,那么它所能达到的寻址范围也就不会超过 2 的 32 次⽅
字节(存储单元以字节为单位),也就是 4GB,⽽如果是 64 位处理器的话,它所能达到的寻址范围理论上就会是 2 的 64 次⽅字节(上亿 GB)。
补充:⼀般处理器多少位是指通⽤寄存器的长度,当然数据线需要与之相同;地址线则不需要与之相等,好⽐ intel 64 位处理器则是 40 位地址总线,最⼤⽀持 1TB 的内存寻址。
32位操作系统与64位操作系统
平时我们所说的 32 位操作系统也被称为 X86 系统,x64 代表 64 位操作系统,关于它的简略解释:
关于 32 位操作系统与 64 位操作系统的区别如下:
1. 32 位操作系统既可以运⾏在 32 位的 CPU 上,也可以运⾏在 64 位的 CPU 上,只不过,运⾏在 64 位 CPU 上的话,就有点“⼤马拉⼩
数据库简单吗车”的感觉了——⽆法发挥出 CPU 的全部能⼒。
2. 64 位操作系统只能运⾏在 64 位的 CPU 上,因此如果⼀个操作系统是 64 位,那么它的 CPU 架构也必定是 64 位。
3. 64 位操作系统相⽐于 32 位操作系统的优势正如上述 64 位 CPU 与 32 位 CPU 的优势⼀样。
总线结构与主板构成
注:以下两部分内容摘抄⾃:~
在解决本⽂标题所述的问题之前,我们再来了解⼀些关于总线结构与主板构成的相关知识。
说起总线⼤家肯定不陌⽣,⽽且⼤家平时肯定跟它打过交道,我们在⽤U盘拷贝数据的时候先要把U盘通过USB接⼝与电脑相连才能拷贝。USB接⼝实际上就是⼀种总线,⼀般称这种总线为USB总线(也叫做通⽤串⾏总线)。在很久之前是没有USB总线的,那个时候每个外设各⾃采⽤⾃⼰的接⼝标准,举个最简单的例⼦:⿏标⽣产⼚商采⽤⿏标特有的接⼝,键盘⽣产⼚商⽤键盘特有的接⼝,这样⼀来的话,PC
机上就必须提供很多接⼝,这样⼀来增加了硬件设计难度和成本,直到后来USB接⼝的出现,它统⼀了很多外设接⼝的标准,不仅使得⽤户可以很⽅便地连接⼀些外设,更增强了PC的可扩展性。所以现在⼤家看到的⿏标、键盘、U盘、打印机等等这些外设都可以直接通过USB 接⼝直接插到电脑上的。
在计算机系统中总线是⾮常重要的⼀个概念,正是因为有了总线,所有的组成部件才能⼀起正常协同分⼯合作。在很久以前的PC机中,采⽤的是三总线结构,即:数据总线、地址总线、控制总线。它们分别⽤来传输不同类型的数据,数据总线⽤来传输数据,地址总线⽤来传输地址,控制总线⽤来传输⼀些控制信号。
随着时代的发展,这种简单的总线结构逐渐被淘汰。下⾯这幅图是现代计算机采⽤的结构:
事实上这也是现代主板所采⽤的结构,当然可能部分地⽅有略微不同(⼤体结构是差不多的),仔细观察过主板构成的朋友可能对上⾯⼀幅图很熟悉。在主板上主要有两⼤主要部分:北桥(North Bridge也称Host Bridge)和南桥(South Bridge)。北桥主要负责CPU和内存、显卡这些部件的数据传送,⽽南桥主要负责I/O设备、外部存储设备以及BIOS之间的通信。现在有些主板已经没有北桥了,因为芯⽚⼚商已经把北桥所负责的功能直接集成到CPU中了(不过暂且我们以上副图的模型来讨论)。
在上副图中,我没有画出数据总线和地址总线等,因为在某些总线标准中它们被集成到⼀起了,⽐如在PCI总线中,地址总线和数据总线总是分时复⽤的(也就是说假如PCI总线有32位数据总线,这32位总线在某个时刻可以充当数据总线的作⽤,在下⼀时刻可以充当地址总线的作⽤)。有的总线同时提供了数据总线和地址总线。
下⾯来说⼀下⼏个主要总线和南北桥的作⽤:
1. FSB总线:即前端总线(Front Side Bus),CPU和北桥之间的桥梁,CPU和北桥传递的所有数据必须经过FSB总线,可以这么
说,FSB总线的频率直接影响到CPU访问内存的速度。
2. 北桥:北桥是CPU和内存、显卡等部件进⾏数据交换的唯⼀桥梁,也就是说CPU想和其他任何部分通信必须经过北桥。北桥芯⽚中通
常集成的还有内存控制器等,⽤来控制与内存的通信。现在的主板上已经看不到北桥了,它的功能已经被集成到CPU当中了。
3. PCI总线:PCI总线是⼀种⾼性能局部总线,其不受CPU限制,构成了CPU和外设之间的⾼速通道。⽐如现在的显卡⼀般都是⽤的PCI
插槽,PCI总线传输速度快,能够很好地让显卡和CPU进⾏数据交换。
4. 南桥:主要负责I/O设备之间的通信,CPU要想访问外设必须经过南桥芯⽚。
在了解了这些基础东西之后,下⾯来讲解⼀下为何 32 位系统最⼤只⽀持 4GB 内存。(是的,就算是 64 位的 CPU,装载 32 位的操作系统,它的寻址能⼒还是 4GB。)
对于标题的解释
在使⽤计算机时,其最⼤⽀持的内存是由操作系统和硬件两⽅⾯决定的。
先说⼀下硬件⽅⾯的因素,在上⾯已经提到了地址总线,在计算机中 CPU的地址总线数⽬决定了CPU 的寻址范围,这种由地址总线对应的地址称作为物理地址。假如CPU有32根地址总线(⼀般情况下32位的CPU的地址总线是32位,也有部分32位的CPU地址总线是36位的,⽐如⽤做服务器的CPU),那么
提供的可寻址物理地址范围为 232=4GB(在这⾥要注意⼀点,我们平常所说的32位CPU和64位CPU指的是CPU⼀次能够处理的数据宽度,即位宽,不是地址总线的数⽬)。⾃从64位CPU出现之后,⼀次便能够处理64位的数据了,其地址总线⼀般采⽤的是36位或者40位(即CPU能够寻址的物理地址空间为64GB或者1T)。在CPU访问其它任何部件的时候,都需要⼀个地址,就像⼀个快递员送快递,没有地址他是不知道往哪⾥送达的,举个例⼦,CPU想从显存单元读取数据,必须知道要读取的显存单元的实际物理地址才能实现读取操作,同样地,从内存条上的内存单元读取数据也需要知道内存单元的物理地址。换句话说,CPU访问任何存储单元必须知道其物理地址。
⽤户在使⽤计算机时能够访问的最⼤内存不单是由CPU地址总线的位数决定的,还需要考虑操作系统的实现。实际上⽤户在使⽤计算机时,进程所访问到的地址是逻辑地址,并不是真实的物理地址,这个逻辑地址是操作系统提供的,CPU在执⾏指令时需要先将指令的逻辑地址变换为物理地址才能对相应的存储单元进⾏数据的读取或者写⼊(注意逻辑地址和物理地址是⼀⼀对应的)。
对于32位的windows操作系统,其逻辑地址编码采⽤的地址位数是32位的,那么操作系统所提供的逻辑地址寻址范围是4GB,⽽在intel x86架构下,采⽤的是内存映射技术(Memory-Mapped I/O, MMIO),也就说将4GB逻辑地址中⼀部分要划分出来与BIOS ROM、CPU寄存器、I/O 设备这些部件的物理地址进⾏映射,那么逻辑地址中能够与内存条的物理地址进⾏映射的空间肯定没有4GB了,看下⾯这幅图就明⽩了:
所以当我们装了32位的windows操作系统,即使我们买了4GB的内存条,实际上能被操作系统访问到的肯定⼩于4GB,⼀般情况是3.2GB左右。假如说地址总线位数没有32位,⽐如说是20位,那么CPU能够
寻址到1MB的物理地址空间,此时操作系统即使能⽀持4GB的逻辑地址空间并且假设内存条是4GB的,能够被⽤户访问到的空间不会⼤于1MB(当然此处不考虑虚拟内存技术),所以⽤户能够访问到的最⼤内存空间是由硬件和操作系统两者共同决定的,两者都有制约关系。
于64位的操作系统,其逻辑地址编码采⽤的地址位数是40位,能够最⼤⽀持1T的逻辑地址空间。考虑⼀种情况,假如CPU是64位的,地址总线位数是40位,操作系统也是64位的,逻辑地址编码采⽤的地址位数也是40位,内存条⼤⼩是64GB,那么是不是内存条的64GB全部都能被利⽤了呢?答案是不⼀定,因为这⾥⾯还要考虑⼀个因素就是内存控制器,内存控制器位于北桥之内(现在基本都是放在CPU⾥⾯了),内存控制器的实际连接内存的地址线决定了可以⽀持的内存容量,也就是说内存控制器与内存槽实际连接的地址线如果没有40位的话,是⽆法完全利⽤64GB的内存条的存储空间的。当然对于内存控制器这个问题⼏乎可以不⽤考虑,因为现在⼤多数的内存控制器⾄少都采⽤的是40位地址总线。
总结
对于以上所述,我进⾏⼀下简单的总结:
⼀个计算机,它的内存访问能⼒是由硬件和软件共同决定的。硬件层⾯就指 CPU 的寻址能⼒,也就是地址总线的个数。软件层⾯,指的就是操作系统。实际上我们(进程)在进⾏内存访问的时候,访问的都是逻辑地址,⽽逻辑地址是由操作系统提供的。
对于 32 位的操作系统,其逻辑地址编码采⽤的地址位数是 32 位,那么操作系统所提供的逻辑地址寻址范围就是 4GB。从这个⽅⾯来说,纵使你的 CPU 实际寻址能⼒为 2 的 64 次⽅,由于操作系统只提供 4GB 的逻辑地址,那 CPU 透过操作系统所能访问到的内存⼤⼩也就只有4GB了。
对与上述总结,我还有⼀个简单的补充:
在和我的⼤神⼩伙伴讨论的时候,他对于“为什么 64 位 CPU 装载 32 位操作系统,它的寻址能⼒还是 4GB”这个问题的解答,只说了⼀句话:“32 位操作系统没有对应 64 位的寻址指令”。在细细品味之后,觉得颇有道理,我对于这句话的浅显理解是:32 位操作系统没有对应
64 位的寻址指令,所以它不能提供 4GB 以上的逻辑地址,所以 64 位 CPU 透过 32 位操作系统,它的寻址能⼒依旧是 4GB。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论