32位系统为什么不能完全4G的物理内存?
Windows内核调试
32位系统为什么不能完全4G的物理内存?
Thomson
2009-12-07, 21:07 下午
在不启用PAE的情况下,在32位系统上只能看到3.5G,或者3G的物理内存, 即使插入的4G内存.
我BIOS有shadow的,但是要具体讲不是很明白...
求指教.
Re: 32位系统为什么不能完全4G的物理内存?
王半仙
2009-12-07, 21:34 下午
很简单,外设要占用内存地址空间,比如显卡的显存:256M或512M等。
Re: 32位系统为什么不能完全4G的物理内存?
Thomson
2009-12-07, 22:13 下午
谢谢.
独立显卡也是用物理地址空间吗?
有没有一张图来说明整个4G空间是怎么映射到物理内存上的呢?
Re: 32位系统为什么不能完全4G的物理内存?
格蠹老雷
2009-12-07, 22:27 下午
Thomson, 你可以阅读英特尔的北桥手册,通常在System Address Map一章中有详细描述
Re: 32位系统为什么不能完全4G的物理内存?
Coding
2009-12-07, 22:53 下午
你还可以看看这篇文章
http://blogs.technet.com/markrussinovich/archive/2008/07/21/3092070.aspx
Re: 32位系统为什么不能完全4G的物理内存?
麻大烦
2009-12-07, 23:07 下午
啥也不说,学习了。
Re: 32位系统为什么不能完全4G的物理内存?
Thomson
2009-12-07, 23:29 下午
谢谢张老师和coding, 都是非常好的resource.
Re: 32位系统为什么不能完全4G的物理内存?
Coding
2009-12-08, 11:14 上午
至于"独立显卡也是用物理地址空间吗?"的问题。
虽然没有深入的玩过独立显卡,不过比如说
程序要从文件中读出一些纹理来渲染,当一部分独立显卡的显存拥有物理地址的话,就可以直接写到显存中了。
"集成显卡需要额外的物理地址空间吗?"也可以有。
比如说,一块内存它既有一个普通的CPU访问物理地址(总线上的地址),他还有另外一个虚拟的"物理地址",当CPU用这个"虚拟的物理地址"访问内存的时候,这个访存请求会被翻译成实际的物理地址。
据个例子说明为什么要有这种需求。
不如说一块内存作为集成显卡的显存,里面放着一张图片。CPU当然可以根据内存在总线的实际物理地址访问这张图片。不过,如果显卡对于这张图片的布局作了优化,并且这个优化对于程序来说是透明的,那么程序根据位置(X,Y)算出的偏移,进而通过页表得到的物理地址就不是真正想要访问的内存单元了。于是集成显卡就可以预留一段"虚拟"的物理地址空间,然后OS可以在页表中把虚拟地址映射到这段"虚拟的”的物理空间上,当内存控制器发现对这段"虚拟的”的物理空间的访问,可以在翻译一次到真正的物理地址。
Re: 32位系统为什么不能完全4G的物理内存?
Thomson
2009-12-11, 11:24 上午
还有一个问题是,即使是在64位系统上,安装了4G内存,然后用mark 文章里面提到的meminfo -r,来但是PFN的映射,发现总共加起来仍然没有4096M, 我算出来好像是4029M, 不知道是什么问题...4G内存应该就是4096M吧?
meminfo -r信息如下:
Physical Memory Range: 0000000000001000 to 000000000009F000 (158 pages, 632 KB)
Physical Memory Range: 0000000000100000 to 00000000BFDFF000 (785663 pages, 3142652 KB)
Physical Memory Range: 0000000100000000 to 000000013C000000 (245760 pages, 983040 KB)
MmHighestPhysicalPage: 1294336
Re: 32位系统为什么不能完全4G的物理内存?
skyworth
2009-12-15, 16:07 下午
还有些内存是不分页的,并不是所有的内存都是分页内存
内核有一个未分页内存池