免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 新警察

请问关于CPU的虚拟地址空间和虚拟内存 [复制链接]

论坛徽章:
0
发表于 2009-09-08 12:17 |显示全部楼层
原帖由 新警察 于 2009-9-7 08:43 发表
书上说386的虚拟地址空间是64TB。但是我怀疑,虚拟内存真的能超过4GB吗?〔这里认为CPU地址线是32根,不考虑36根地址线的pentium pro〕

关于为windows系统设置虚拟内存,理论上,虚拟内存设置为100GB比设置为 ...

看乱七八糟的书不如看intel手册,实话实说,我看不出这个64TB是怎么算出来的。 64T = 2^46 = 2^(32 + 10 + 4)

论坛徽章:
0
发表于 2009-09-08 12:38 |显示全部楼层

回复 #10 JohnBull 的帖子

再补充一个。。内核的位数决定于可最大使用的内存。和交换分区无关

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2009-09-08 13:04 |显示全部楼层
64T怎么算的?很好奇.
"是不是如果真的有64TB虚拟内存,就意味着CPU必须有48根地址线,才能完全利用虚拟内存?"
不是,物理上(并行接口)和虚拟存储上(CPU行为)是有区别的两回事

论坛徽章:
0
发表于 2009-09-08 14:50 |显示全部楼层
原帖由 新警察 于 2009-9-8 00:43 发表
书上说386的虚拟地址空间是64TB。但是我怀疑,虚拟内存真的能超过4GB吗?〔这里认为CPU地址线是32根,不考虑36根地址线的pentium pro〕

关于为windows系统设置虚拟内存,理论上,虚拟内存设置为100GB比设置为 ...


因为386中的段由描述符来描述,而每个段最大可达4G,并且系统中又有全局描述符表和局部描述符表各一张,所以最大的虚拟地址空间是:4GB×8096×2=64TB。

因此说,64TB是整个系统中可描述的最大虚拟空间,而4GB是每个任务可访问的最大虚拟空间,注意不要搞混了。

评分

参与人数 1可用积分 +30 收起 理由
cjaizss + 30 我很赞同

查看全部评分

论坛徽章:
0
发表于 2009-09-08 15:21 |显示全部楼层
14楼正解。

虚拟内存是每个进程可以看到的逻辑地址范围,不考虑段描述符映射关系的时候可以吧段地址的位数加上每个段长度的32位看成是 48位地址空间,也就是所谓的 64T。

这个只有逻辑意义,跟硬盘上的交换空间还不是一回事。

在硬件上,段地址通过描述符表加上偏移量成为线性地址,也只有32位。

可惜x86上没有哪个操作系统用段式内存管理,只玩分页,所以虚拟地址空间只考虑32位。

论坛徽章:
0
发表于 2009-09-08 16:03 |显示全部楼层
原帖由 vxasm 于 2009-9-8 14:50 发表


因为386中的段由描述符来描述,而每个段最大可达4G,并且系统中又有全局描述符表和局部描述符表各一张,所以最大的虚拟地址空间是:4GB×8096×2=64TB。

因此说,64TB是整个系统中可描述的最大虚拟空间 ...


感谢慷慨大方的cjaizss,呵呵。

论坛徽章:
0
发表于 2009-09-08 23:18 |显示全部楼层


to vxasm:

很明显,你的解释是错误的,张冠李戴,牵强附会!

你这个:4GB×8096×2=64TB 的想法是怎么得来的?

首先:

1、descriptor table 可以容纳、可寻址的 descrptor 数量是 8192(0 ~ 8191)个

从下面两方面限制得出来:

(1) selector 结构的 selector.SI = 0 ~ 8191,即 selector 最大可寻址 8192 个 descriptor

(2) GDTR.limit 和 LDTR.limit 最大 limit 是 0xFFFF,每个 descriptor 为 8 bytes
     因此:GDT / LDT 的最大可容纳 descriptor 为 8192 个 descriptor


2、GDT 只有一张,但 LDT 可以有多张


所以,你这个计算式子是怎么得来的?




其次:关于“64TB是整个系统中可描述的最大虚拟空间” 这个理论也是莫名奇妙

如果:segment descriptor 所描述的内存段 segment base 设为 0xffffffff,而 segment limit 设为 4G

那么:充其量 descriptor 所描述的范围最大为 0xffffffff + 0xffffffff = 8G 空间,何为 64TB 空间

论坛徽章:
0
发表于 2009-09-08 23:22 |显示全部楼层
LZ:

我赞成 mingyanguo   的看法,好好的看一看 intel 和 AMD 的文档


至于,你在书上看到的 64TB 虚拟地址空间,是在哪本书看?

把那一段贴出来,不是书上有误,就是你理解有误

论坛徽章:
0
发表于 2009-09-09 03:57 |显示全部楼层
原帖由 mik 于 2009-9-8 07:22 发表
LZ:

我赞成 mingyanguo   的看法,好好的看一看 intel 和 AMD 的文档


至于,你在书上看到的 64TB 虚拟地址空间,是在哪本书看?

把那一段贴出来,不是书上有误,就是你理解有误


我估计书上这种说法的来源,就是上面同学解释的,每个段的容量x段的数量。每个段的描述区间都在[0, 4G)之间,不知道把这些区间加在一起算什么。反过来说,一共就这么大的区间,你在里面放多少个段也不会把区间变大。

论坛徽章:
0
发表于 2009-09-09 11:43 |显示全部楼层
14楼的解释很牵强,无论怎么分段,都是会映射到相应的线性地址,线性地址不是独立的空间。我看了那么多手册没见过64T的说法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP