accessory 发表于 2009-09-15 00:22

建议LZ先找本OS的书,好好看看虚拟地址和虚拟内存的区别。比如 <<Operating Systems: Internals and Design Principles>> 一书中的第7,第8章。

自学就要看经典的书,学会自己思考。

下面是我自己简单的解释:
虚拟地址的产生是由于INTEL CPU硬件决定的。它的含义是,在INTEL CPU保护模式下,指令使用的地址都是虚拟地址。都需要经过CPU的MMU(内存管理器)翻译过之后,才是真正的物理地址。这个也可以说和CPU的寻址能力有关。比如有32 BIT 地址线的CPU,36 BIT 地址线的CPU等。即使现在的 64 BIT CPU,也没有把所有的64BIT 地址线都做上去,因为基本用不到那么多。

虚拟内存主要是由操作系统来控制的。CPU硬件也提供一些必要的支持。虚拟内存的大小和CPU寻址能力没有必然的关系。所谓虚拟内存,也就是“假的”内存。也就是把硬盘上的文件当作内存。为啥要这样呢?因为有的程序需要很大的内存(比如8G),但是机器上的物理内存没那么大(比如只有1G)。那么这时设计OS的人有2个选择,选择1,直接告诉程序,你没法运行。升级硬件吧。 选择2,用硬盘(可以很大)上的一个或者几个文件来代替物理内存,暂时保存些数据。这样的好处是程序还可以跑,但是会比较慢。因为硬盘的存取速度比真正的内存慢很多。

所以说不管你的虚拟内存,WINDOWS OR LINUX SWAP可以设置的多大,最理想的情况是不到万不得已不要用它。

罗嗦了半天,希望能对后面看贴的人有点用。如果有不对的地方 ,也欢迎大家指出。

accessory 发表于 2009-09-15 00:37

关于 VXASM 和 MIK 2位之间的讨论。我觉得是这样的:
VXASM 企图找到 64 TB的来源。但是他(有意或者无意)忽略了一个地方。那就是LDT 可以有多张。多张之间可以不一样。 只有当所有的LDT都一样的时候,才能算出 64 TB. 如果 LDT 不一样,那么就不止 64 TB了。

关于MIK, 这个 0xffffffff + 0xffffffff = 8G 含义是清楚的,那就是 0XFFFFFFFF = 4G (其实是4G-1).      4G+4G =8G.
但是为啥要用到这个公式呢?每个段的基地址都可以不一样啊。假如CPU有足够多的地址线,同时机器上插了足够多的物理内存。那么每个段都可以映射到不同的地方。所以会超出 8G。

另外,讨论归讨论。就事论事嘛。没必要又是吐啊 ,又是不屑啊的。 谁也不是天生什么都懂的。我也不是,如果以上解释有不对的地方,欢迎指正。

mingyanguo 发表于 2009-09-15 00:51

原帖由 bluehumor 于 2009-9-12 06:20 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
没怎么细看各位的分析,觉得这个问题好像并没有什么实际意义。


随手翻了两本自己手头上的中文的关于保护模式的书。

杨季文的《80x86汇编语言程序设计教程》有这句“虚拟存储器的地址(逻辑地址)由指示 ...
这应该是个来源,这两本书似乎流传很广。
回到主题说,纠缠这种字眼没什么意思,要了解CPU的原理,不是去考试做填空选择题。知道虚拟地址->线性地址->物理地址基本上就够了。像64T这种问题基本上是看你自己怎么定义概念了,没什么用。

mik 发表于 2009-09-15 00:57

原帖由 accessory 于 2009-9-15 00:37 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
关于 VXASM 和 MIK 2位之间的讨论。我觉得是这样的:
VXASM 企图找到 64 TB的来源。但是他(有意或者无意)忽略了一个地方。那就是LDT 可以有多张。多张之间可以不一样。 只有当所有的LDT都一样的时候,才能算 ...

我之所以对 vxasm吐,是因为我前面指出他 3 个的错误,他还继续他的理论。
1、8096 这个数之错
2、2 个 descriptor- table 之错
3、64TB 之错

为了64TB,强硬找个式子!


至于说 8G,完全是根据他的 64TB 理论,而说出“顶多也就是 8G "

新警察 发表于 2009-09-15 01:01

谢谢accessory,我在图书馆里没有找到那本书,可以推荐一本中文版的关于os的、能解释虚拟地址与虚拟内存之间区别的经典书吗?
英语的也可以,但是不好找啊。

mik 发表于 2009-09-15 01:04

vxasm 最大错误是:把虚拟内存搞成了虚拟地址空间

如果就虚拟内存,来解释:那么 64TB 这个概念就勉强可以接受


另外,这里不涉及物理内存,扯上物理内存(地址)就超出范围

新警察 发表于 2009-09-15 01:08

我这里就有周明德的这本书,以前对比过programming the 80386这本书,简直就是整篇整篇的复制呀,哎,

changsha 发表于 2009-09-15 19:48

怎么没人能说清楚?

rawa9999 发表于 2009-09-15 20:14

不是那样的,精简指令计算机就是运用简化的指令描述大地址空间和处理大位数数据,intel&AMD生产的是PC用的通用处理器,不需要大数运算,不需要解决NP问题,只要需要32位计算机可以控制大内存,但是你买回家的处理器不行,你可以自己设计处理器。

accessory 发表于 2009-09-15 23:17

原帖由 新警察 于 2009-9-15 01:01 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
谢谢accessory,我在图书馆里没有找到那本书,可以推荐一本中文版的关于os的、能解释虚拟地址与虚拟内存之间区别的经典书吗?
英语的也可以,但是不好找啊。

那本书有翻译成中文的。中文名是:操作系统:精髓与设计原理(第5版)。下面是一个连接: http://www.amazon.cn/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F-%E7%B2%BE%E9%AB%93%E4%B8%8E%E8%AE%BE%E8%AE%A1%E5%8E%9F%E7%90%86-%E6%96%AF%E6%89%98%E6%9E%97%E6%96%AF/dp/B00114AMBQ

或者看下面这本,也是翻译的。不过我没看过
http://www.china-pub.com/2033
页: 1 2 3 [4] 5 6
查看完整版本: 请问关于CPU的虚拟地址空间和虚拟内存