mingyanguo 发表于 2009-09-08 12:17

原帖由 新警察 于 2009-9-7 08:43 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
书上说386的虚拟地址空间是64TB。但是我怀疑,虚拟内存真的能超过4GB吗?〔这里认为CPU地址线是32根,不考虑36根地址线的pentium pro〕

关于为windows系统设置虚拟内存,理论上,虚拟内存设置为100GB比设置为 ...
看乱七八糟的书不如看intel手册,实话实说,我看不出这个64TB是怎么算出来的。 64T = 2^46 = 2^(32 + 10 + 4)

wheel 发表于 2009-09-08 12:38

回复 #10 JohnBull 的帖子

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

cjaizss 发表于 2009-09-08 13:04

64T怎么算的?很好奇.
"是不是如果真的有64TB虚拟内存,就意味着CPU必须有48根地址线,才能完全利用虚拟内存?"
不是,物理上(并行接口)和虚拟存储上(CPU行为)是有区别的两回事

vxasm 发表于 2009-09-08 14:50

原帖由 新警察 于 2009-9-8 00:43 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
书上说386的虚拟地址空间是64TB。但是我怀疑,虚拟内存真的能超过4GB吗?〔这里认为CPU地址线是32根,不考虑36根地址线的pentium pro〕

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

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

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

YaoFei 发表于 2009-09-08 15:21

14楼正解。

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

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

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

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

vxasm 发表于 2009-09-08 16:03

原帖由 vxasm 于 2009-9-8 14:50 发表 http://linux.chinaunix.net/bbs/images/common/back.gif


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

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

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

mik 发表于 2009-09-08 23:18

:em06: :em06:

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 空间

mik 发表于 2009-09-08 23:22

LZ:

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


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

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

mingyanguo 发表于 2009-09-09 03:57

原帖由 mik 于 2009-9-8 07:22 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
LZ:

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


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

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

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

slippp 发表于 2009-09-09 11:43

14楼的解释很牵强,无论怎么分段,都是会映射到相应的线性地址,线性地址不是独立的空间。我看了那么多手册没见过64T的说法。
页: 1 [2] 3 4 5 6
查看完整版本: 请问关于CPU的虚拟地址空间和虚拟内存