免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5475 | 回复: 17
打印 上一主题 下一主题

32位系统的物理地址空间? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-12 17:31 |只看该作者 |倒序浏览
最近做驱动时发现物理地址经常会被板卡占掉一些,如PCI Express的配置空间用内核映射方式的话会占用256M的地址空间,而板子为了完成某些寄存器和驱动来交互,也会占用一些地址空间(通过BAR申请)。

这种情况下如果系统装有4G的物理内存,在32位系统中是如何管理的?因为地址空间有些会被板卡占用。

另外,物理内存总是占用从0开始的物理地址吗,能不能把物理内存中的不同部分映射到不地的物理地址段上?

[ 本帖最后由 Cyberman.Wu 于 2008-7-12 17:32 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-08-12 00:03 |只看该作者
踢一下,没人站出来?

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
3 [报告]
发表于 2008-08-12 09:12 |只看该作者
原帖由 Cyberman.Wu 于 2008-7-12 17:31 发表
最近做驱动时发现物理地址经常会被板卡占掉一些,如PCI Express的配置空间用内核映射方式的话会占用256M的地址空间,而板子为了完成某些寄存器和驱动来交互,也会占用一些地址空间(通过BAR申请)。

这种情况 ...


内存映射的是虚拟地址,这个和物理地址是两码事。如果你有4G的物理内存,那实际上是不可能所有都映射到进程的地址空间的,应为896M以上的就属于高端内存了。建议LZ看看内存映射方面的资料,ULK上面有讲到,物理内存的使用布局等等,这个应该有帮助你理解这个问题。

论坛徽章:
0
4 [报告]
发表于 2008-08-12 16:51 |只看该作者
原帖由 dreamice 于 2008-8-12 09:12 发表


内存映射的是虚拟地址,这个和物理地址是两码事。如果你有4G的物理内存,那实际上是不可能所有都映射到进程的地址空间的,应为896M以上的就属于高端内存了。建议LZ看看内存映射方面的资料,ULK上面有讲到, ...


ULK是啥资料?不同进程在进程空间占用不同的物理页面,而共享所有内核空间,这个我早就知道。现在关心的不是虚拟地址,而是物理地址,32bit能否支持4GB物理内存?因为在总路上外设会占用一些物理地址空间,那4GB的物理内存如何支持?如我的显卡就占了256M的地址空间(通过BAR0申请的),那么在32bit物理寻址时从CPU上向总线发起访问这个范围内的内存操作时,实际上是北桥上视别出它在PCIe的地址空间之后直接生成一个PCIe的报文发到PCIe总线上了。这种情况下如何访问4GB的物理内存,通过某种复用机制?好像没看到FSB有这种机制吧,再说如果有这种机制硬件没办法视别出软件想访问什么啊,需要软件做出支持才行。

也就是说,我的问题是在纯32位物理寻址的情况下(即不考虑PAE)CPU能否支持4GB物理内存,和虚拟内存没有半点关系;打开PAE也只是物理内存寻址增加了,每个进程的虚拟内存还是4GB的。

[ 本帖最后由 Cyberman.Wu 于 2008-8-12 16:52 编辑 ]

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
5 [报告]
发表于 2008-08-13 09:11 |只看该作者

回复 #4 Cyberman.Wu 的帖子

理論上可以支持4GB的物理內存,但實際上高端內存(大于896MB)是不可能永久映射的到虛擬地阯空間的。

论坛徽章:
0
6 [报告]
发表于 2008-08-13 09:21 |只看该作者
原帖由 dreamice 于 2008-8-13 09:11 发表
理論上可以支持4GB的物理內存,但實際上高端內存(大于896MB)是不可能永久映射的到虛擬地阯空間的。


没怎么明白是什么意思,我想讨论的是物理内存寻址,不要老是扯到虚拟内存空间好不好?如果用VxWorks,根本就不存在虚拟空间了。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
7 [报告]
发表于 2008-08-13 10:07 |只看该作者

回复 #6 Cyberman.Wu 的帖子

不明白你到底要解决什么问题。32位肯定是可以支持4GB的物理地址,我的意思是一旦涉及到操作系统,就离不开讨论虚拟地址——进程的地址空间也指的的是虚拟地址。关于Vxworks,我了解不多,但是他也存在地址映射(你说不存在虚拟空间,这个结论我表示质疑)。我认为,一个真正意义的操作系统,不可能没有虚拟地址到物理地址映射这一层关系。所以,我一开始就连带说到了虚拟地址。

32位完全是支持4GB的物理内存的:如果不使用操作系统,你完全可以当作一个平板物理空间来访问。但一旦有了操作系统,(物理内存在896M—4G的情况),并不把RAM全部映射到内核地址空间,Linux在初始化阶段把一个具有896MB的RAM窗口映射到内核线性地址空间。如果一个程序需要对现有RAM其余部分寻址,那就必须把其他的线性地址间隔映射到所需的RAM,也就是說高与896MB的页框,并不映射到线性地址空间的第4个GB。这是一个永久映射和动态映射的问题。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
8 [报告]
发表于 2008-08-13 10:18 |只看该作者

回复 #1 Cyberman.Wu 的帖子

你所说的那些设备占用的物理内存的问题,有可能是映射到了第4个GB——是被永久映射的物理地址,也有可能是独立寻址的;当然,如果你这里說占用了,那就应该是永久映射到第4个GB了。可以看看这个图,是linux2.6前3MB的映射情况:

[ 本帖最后由 dreamice 于 2008-8-13 10:19 编辑 ]

map.JPG (16.98 KB, 下载次数: 49)

map.JPG

论坛徽章:
0
9 [报告]
发表于 2008-08-13 10:19 |只看该作者

回复 #7 dreamice 的帖子

我想清楚的是用32位的地址总线能否支持4GB物理内存,就这么简单,这个讨论并不涉及操作系统。此时如果向总线发出一个地址访问内存的话,并且装了4GB的RAM,能复用被外设占用的那一部分物理地址空间吗?我在想如果用线性寻址的话对于PC要在32位系统中支持4GB物理内存是不是一定要用PAE才行?当然用段寄存器也许有另外的解决办法?对于x86我并不熟悉,以前一直用PowerPC,所以现在搞不清楚。

什么叫“真正的操作系统”并没有什么绝对的定义吧,VxWorks取决于CPU,在PowerPC上确实可以映射,但一般都是一对一映射的。许多嵌入式系统的CPU根本就没有MMU,但许多还是有操作系统的,而且比通用操作系统的种类多多了。

论坛徽章:
0
10 [报告]
发表于 2008-08-13 10:25 |只看该作者
原帖由 dreamice 于 2008-8-13 10:18 发表
你所说的那些设备占用的物理内存的问题,有可能是映射到了第4个GB——是被永久映射的物理地址,也有可能是独立寻址的;当然,如果你这里說占用了,那就应该是永久映射到第4个GB了。可以看看这个图,是linux2.6前 ...


好象也不是绝对都映射到3GB以上的物理内存吧,传统的ISA设备应该不支持32bit地址的。独立寻址指什么,是指I/O空间吗?以前没怎么深入接触过这些通用操作系统,而计算机体系结构也不是非常了解,物理内存总应该在连续的物理地址空间上吧,就算是用了PAE,它和设备占用的物理地址空间又是如何分配的?

其实目前也不是有什么具体的问题要解决,只是想对系统有更明确的了解。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP