免费注册 查看新帖 |

Chinaunix

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

关于虚拟内存空间的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-25 09:09 |只看该作者 |倒序浏览
进程的虚拟内存空间被放在什么地方?是交换分区还是程序原可执行文件的地方,还是任意的地方啊?

论坛徽章:
0
2 [报告]
发表于 2008-01-25 09:20 |只看该作者
虚拟的,就是哪儿都不放,只是个逻辑的东西。

论坛徽章:
0
3 [报告]
发表于 2008-01-25 09:22 |只看该作者
恩..那可执行文件加载时...怎么知道虚拟的地址呢...是在可执行文件中记载了?

论坛徽章:
0
4 [报告]
发表于 2008-01-25 09:26 |只看该作者

回复 #3 arodnap 的帖子

在编译生成elf文件时,编译器只把一个相对便宜记录在elf文件中,加载的时候操作系统再计算。

论坛徽章:
0
5 [报告]
发表于 2008-01-25 09:32 |只看该作者
恩...那就是...程序执行开始,会把程序段的起始虚拟地址送到CPU,CPU会生成物理地址,再一点一点的载入程序的其他内存,也就是虚拟页表不是实际存在的,只是内存不断的加载可执行文件的内存

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
6 [报告]
发表于 2008-01-25 09:36 |只看该作者
原帖由 cugb_cat 于 2008-1-25 09:20 发表
虚拟的,就是哪儿都不放,只是个逻辑的东西。


要是哪儿都不放的话,malloc弄出来的动态空间内核怎么管理?那么内存管理系统不是就根本就没用拉?

论坛徽章:
0
7 [报告]
发表于 2008-01-25 09:37 |只看该作者

回复 #6 gvim 的帖子

请详细讲解一下...

论坛徽章:
0
8 [报告]
发表于 2008-01-25 09:48 |只看该作者

回复 #6 gvim 的帖子

虚拟地址空间只是一个逻辑概念,malloc出来的东西也是逻辑上的,具体放在哪儿是由操作系统管理的,我前面说哪儿都不放也不准确,应该是哪儿都有可能(这里包括物理内存和交换空间)。还有,地址空间本来就是个逻辑的东西,是根据字长决定的(可能不准确),但物理内存+交换空间可能并没有达到2^32(32位系统,一般系统的交换空间为物理内存的1.5倍左右,不太确定)。这是我的理解,不知道对不对,欢迎讨论。

论坛徽章:
0
9 [报告]
发表于 2008-01-25 09:57 |只看该作者
原帖由 arodnap 于 2008-1-25 09:09 发表
进程的虚拟内存空间被放在什么地方?是交换分区还是程序原可执行文件的地方,还是任意的地方啊?


虚拟内存的使用的一个原因是: 避免各个进程直接使用物理地址进行操作.
虚存能够更好的隔离进程, 增加并行执行进程数量. 虚拟内存有个一个很关键的概念叫: 工作集.

虚拟内存通过段, 页, 段/页将进程的内存划分成逻辑的块. 根据局部性原理, 一个程序不会在同一时间访问所有的地址空间, 因此操作系统一般会采用基于LRU的算法, 将一些不需要使用内存页/段换出到磁盘等位置, 将物理内存分配给需要的使用的进程.

在unix, linux上是swap分区, windows是文件.

建议可以读读OS方面的书籍. 这些理论基础阐述的很明确.

论坛徽章:
0
10 [报告]
发表于 2008-01-25 10:00 |只看该作者
恩...虚拟页表会被放在什么地方?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP