我的内存谁也没动:4GB内存终极解迷 - 图文

2019-04-22 22:08

我的内存谁也没动:4GB内存终极解迷

前言

500元、300元、150元......随着DDR2价格的逐渐崩盘,目前连2GB DDR2-800内存的价格也已经跌至百元,越来越多的朋友为爱机装上了4GB内存。随着4GB电脑的逐渐增加,一个长期存在的问题又再次被人们所关注:为何我只能看到3.25GB物理内存?

无论是WinXP-32bit还是Vista-32bit,所有的用户都可以发现自己的任务管理器中最多只显示3.25GB物理内存,更甚者还会有2.8GB甚至更低的数值出现。我们花钱购买的内存就这样白白不见了么?

人们当然不会允许这样的事情发生,于是各种论坛上展开了关于4GB内存的大量讨论。重装系统、打开PAE、使用Ramdisk、开启Memory Remapping等等各种手段层出不穷,所有人都想找回那失去的内存。再逐一尝试之后,人们发现始终能够在32bit系统上找到那0.75GB内存的下落。人们所寄希望的Vista系统也仅仅是能够在系统属性上看到4.00GB的字样,设备管理器的物理内存依然安逸的保持在3.25GB。期间,各大电脑网站和杂志也刊登了一些关于这方面的文章,介绍了大量内容,最终人们将一切归罪于32bit操作系统。

这样的审判似乎很正确,毕竟我们可以真实的看到64bit系统下那>3.25GB的物理内存显示,32bit系统显然贪污掉了0.75GB内存。然而事实上,操作系统却在这里成为了不折不扣的替罪羊。因为事实上即使是在64bit系统中,内存同样会被“侵蚀”。

为了让广大网友都能够了解事实究竟,今天笔者就为操作系统客串一次辩护律师,为其平反这个内存贪墨案,找寻那失落的内存。真相永远只有一个! 注:文本将以Intel当代芯片组的内存分配机制为例讲述,其他品牌芯片组在细节上或许有与本文所描述不同之处,但结论上不会有太大出入。 观念上的错误:32bit寻址

32bit操作系统,32bit处理器,有着32bit寻址能力,可以访问2^32 = 4G物理地址,于是拥有识别4GB内存的能力,这似乎是完全顺理成章的事情。然而

其中有一个关键,什么是物理地址?物理地址就是物理内存的地址?非也。物理地址是指处理器和系统内存之间所用到地址,我们可以简单理解成是CPU“极方便访问的地址”。这个地址并非物理内存独享,而是被分成了很多部分,物理内存地址也只能够占用这4GB地址中的一部分。

认真看看上面这个P45芯片组的系统地址区域图。图中的方块代表的是不同区域的“地址”,这些地址囊括了一台电脑中所有能和操作系统以及芯片组关联的设备地址,而不仅仅是“物理内存地址”。同样的,那个4G的红线代表的是第4G个Byte的地址,并不是4GB物理内存的分界线。由于P45芯片组是一款支持36bit寻址的产品,即可以支持64GB地址,因此从左边的“系统视角”来看各种设备所需地址轻松自如的分布在整个地址表上。然而从右侧的“内存控制器视角”来看结果就不相同了。因为32bitCPU只能访问到4GB的地址,因此系统运转所必须的所有设备地址都必须同时存在于这4GB地址内。很显然,让一个系统正常运行并不仅仅包括内存,还要包括各种I/O设备等。在4GB的寻址范围内,物理内存实际上只占据了一块,那个被称为Main Memory Address Range的区域(图中绿色框)。那么其他地址主要被谁占据了呢?

上面的图中展示了00000000h至FFFFFFFFh共4GB地址的详细分配(上图中方块大小于占用地址多少无关),除去物理内存(Main Memory)之外,多数部分通常只会占据几MB最多十几MB的地址空间,其中唯一的一个地址大户是PCI Memory Address Range(PCI Memory Range)。

有一点我们必须再次明确,到目前为止我们都在讲“地址”,无论是4GB或者64GB,这里并不是在讲述任何与存储设备空间相关联的NAND gate或者磁颗粒数量(比如内存、硬盘空间),而是由16进制计数的物理地址。32bit寻址由CPU决定,因此即使你安装不到4GB的物理内存,系统仍然会拥有4GB的系

统内存地址。上面的图很直观的说明了这一点,尽管只有2GB的物理内存, 但系统依然分配出了00000000h至FFFFFFFFh共2^32bit = 4GB的地址。而且我们还可以发现从80000000h至FFFFFFFhF这整整2GB的地址都分配给了PCI bus,也就是前面所讲到的PCI Memory Address Range。 内存地址“侵蚀者”:PCI Memory Address Range

PCI Memory Address Range这一部分包含了各种I/O设备,系统总线等部分所需的地址,上面的图中我们可以看到ICH10的磁盘控制器、PCIE(显卡)等该系统现有设备所占据的地址范围。这些I/O设备地址被通过一种叫做MMIO的技术使得CPU可以高速便捷的访问它们。根据设备状况的不同,PCI Memory Address Range的大小也会发生变化,这都一切取决于硬件本身,例如芯片组、显卡等等。

小贴士:MMIO全称是Memory-mapped I/O,是一种在CPU和外围设备之间执行输入输出功能的途径。MMIO与内存使用相同的地址总线,CPU用于访问内存的

指令也可以直接用于访问I/O设备。CPU会将自己的地址空间预留一块用于I/O设备,而不是物理内存。

PCI Memory Address Range的地址范围定义为4GB至TOLUD(即FFFFFFFFh减去TOLUD地址),由高地址位(FFFFFFFFh)向低地址位延伸。 TOLUD全称是Top of Low Usable Dram,这个16bit寄存器由BIOS赋予一个适当的数值,其含义是4GB地址内的物理内存地址顶端。在我们使用4GB内存的时候,这个数值通常会是D0000000h,即3.25GB。而之前图中的系统用的是2GB内存,那么物理内存地址顶端自然就只到7FFFFFFFh(2GB),PCI Memory Address Range也就自动占据了80000000h至FFFFFFFFh这剩下2GB的地址空间。

上图展示了P45芯片组(Intel芯片组)的典型PCI Memory Address Range分配,里面包含了大量系统所必须的内容:High BIOS、DMI总线、FSB中断、APIC、PCIE等多方面的设备地址。这些都是一款Intel芯片组正常运行所必须的东东,尤其是DMI总线(连接Intel芯片组南北桥)管理着主板上的大多数IO设备,它们自然必须在任何时候都享受着MMIO所分配的地址,而这个地址范围通常就是0.75GB。


我的内存谁也没动:4GB内存终极解迷 - 图文.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2007美国大学生数学建模竞赛B题特等奖论文翻译

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: