厚德载物 发表于 2013-4-19 10:28:39

一直不明白虚拟地址到底是怎么回事儿,来帮帮小弟吧

《加密与解密》11页 中这样说道:
① 当一个应用程序启动时,操作系统就创建一个新进程,并给每个进程分配2GB的虚拟地址(不是内存,只是地址);
② 虚拟内存管理器将应用程序的代码映射到那个应用程序的虚拟地址中的某个位置,并把当前所需要的代码读取到物理内存中

那是不是可以这样理解呢:
一、 进程创建时候并不加载到内存,只是在属于这个进程的时间片内,把当前所需要的部分代码 数据加载到物理内存中
二、从上面第②条看,进程启动时候,系统给进程分配虚拟内存地址的时候也要指定每个虚拟内存地址的数据,那这样不是要形成一个表那种结构了吗,一列是虚拟内存地址,一列是虚拟内存地址对应的数据。是不是这样一回事呢,如果是,那么这个表是存储在硬盘吗,还是存储在什么地方。如果不是, 那么上面第②条说的应用程序代码映射到虚拟内存地址,又到底是指什么意思。

希望懂的朋友帮忙解释一下,小弟感激不尽啦

wjb8love_9c7c9c 发表于 2013-4-19 10:45:24

假如一个超市可以摆4千排货架,每排可以摆放1千种物品,有间隔隔开,为了方便管理呢,每个间隔都有编号,0---4百万。你是个供货商,那么理论上你可以全部租用4千排货架,那么你可以使用的编号是0--4百万,其实上你只能用的起其中的一部分,比如,第21---50排,你为了方便也使用了编号,从0--3万,所以呢,你说的0号位呢,其实在超市管理的编号中你的0号位是21001号,这个变换过程就是虚拟内存管理器做的工作。

厚德载物 发表于 2013-4-19 10:47:31

wjb8love_9c7c9c 发表于 2013-4-19 10:45 static/image/common/back.gif
假如一个超市可以摆4千排货架,每排可以摆放1千种物品,有间隔隔开,为了方便管理呢,每个间隔都有编号,0- ...

谢谢你的帮忙呀,从上面第②条看,进程启动时候,系统给进程分配虚拟内存地址的时候也要指定每个虚拟内存地址的数据,那这样不是要形成一个表那种结构了吗,一列是虚拟内存地址,一列是虚拟内存地址对应的数据。是不是这样一回事呢,如果是,那么这个表是存储在硬盘吗,还是存储在什么地方。如果不是, 那么上面第②条说的应用程序代码映射到虚拟内存地址,又到底是指什么意思呢。

wjb8love_9c7c9c 发表于 2013-4-19 11:06:38

那这样不是要形成一个表那种结构了吗,确实好像是有吧,页面映射什么什么的,至于具体怎么管理的,我还不是很清楚,操作系统原理这本书,看的不是很透。

厚德载物 发表于 2013-4-19 12:45:27

继续顶上去呀楼主加油,鱼C加油!我们都看好你哦!

1971827035 发表于 2013-4-19 15:40:24

首先要明白,系统使用虚拟内存的目的:主要是为了弥补物理内存的不足。其次是在这里的映射是通过两次地址映射(第一次是分段单元,第二次是分页单元)将程序中的代码地址(硬盘上)映射到真实的内容地址(内存中)中。也就是程序代码首先映射到虚拟内存中,然后虚拟内存在映射给真实的内存地址。而这段地址信息是存放在虚拟内存单元中的

厚德载物 发表于 2013-4-19 16:40:29

1971827035 发表于 2013-4-19 15:40 static/image/common/back.gif
首先要明白,系统使用虚拟内存的目的:主要是为了弥补物理内存的不足。其次是在这里的映射是通过两次地址映 ...

谢谢你的回答,按照这种说法,那么对于不设置虚拟内存的电脑又是怎么回事情呢?

1971827035 发表于 2013-4-19 16:55:13

厚德载物 发表于 2013-4-19 16:40 static/image/common/back.gif
谢谢你的回答,按照这种说法,那么对于不设置虚拟内存的电脑又是怎么回事情呢?

无分页文件就代表系统不使用虚拟内存了吗?不是的。建议看下操作系统这本书

厚德载物 发表于 2013-4-19 17:18:36

终于搞懂了,其实就是硬盘文件-----虚拟内存------物理内存 ,原来虚拟内存是也是真实存在的,只不过是在硬盘上而不是在内存条上
参考文献:http://blog.sina.com.cn/s/blog_63fcae5c01018d5l.html#bsh-75-220728884

bafengao 发表于 2013-4-19 17:22:49

强烈支持楼主ing……

pcode 发表于 2013-4-19 21:48:45

楼主加油,鱼C加油!我们都看好你哦!
页: [1]
查看完整版本: 一直不明白虚拟地址到底是怎么回事儿,来帮帮小弟吧