免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: socay2
打印 上一主题 下一主题

[C] exec 后,地址空间的疑惑 [复制链接]

论坛徽章:
1
巨蟹座
日期:2014-03-18 23:44:30
11 [报告]
发表于 2012-12-17 18:00 |只看该作者
folklore 发表于 2012-12-17 17:31
@socay2

这个错的,


那么,我在子进程中 exec 的时候,肯定是 write 的时候了,因此,也就会为该进程分配新的内存地址。
这个时候系统是否是先试探性的分配一块内存,比如1K,如果,不够,继续分配?

如果上面的说法正确,那么子进程的所用的实际空间就和父进程的没有关系了。
好像是这样的吧,父子进程在内存大小上没有什么依赖关系

期待继续指正!

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
10 [报告]
发表于 2012-12-17 17:58 |只看该作者
说了半天的各位, 可曾真正读过相关代码?
就我所读的过时 linux 源码, fork 确实会拷贝页表项, 但在 exec 的时候又全部重置了

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
9 [报告]
发表于 2012-12-17 17:42 |只看该作者
回复 6# liuiang


    计算公式错误哈,大概约莫着看看,理解意思就行了。

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
8 [报告]
发表于 2012-12-17 17:31 |只看该作者
@socay2
copy on write 是在子进程需要写是才给它重新分配进程空间,对吧?

这个错的,
改为:
copy on write 是在子进程需要写是才给它重新分配内存,对吧?

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
7 [报告]
发表于 2012-12-17 17:30 |只看该作者
@socay2
进程空间!=于分配内存

理论上第个进程的空间都可以是4G(32Bit),或是2^64(64Bit机器)。
哪来那么多内存。

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
6 [报告]
发表于 2012-12-17 17:25 |只看该作者
简单说,如果有100M的空间,那么我不需要拷贝100M,我只需要拷贝100M/4K=25K的索引即可,我将索引直接拷贝出来,拷贝出来的索引都指向相同的100M空间。

这样,父子进程都持有相同空间的索引。当然还有其他操作,否则一个进程的更改会被另外的进程感知,那就不好玩了。

论坛徽章:
1
巨蟹座
日期:2014-03-18 23:44:30
5 [报告]
发表于 2012-12-17 17:22 |只看该作者
folklore 发表于 2012-12-17 16:34
copy on write.
只要Copy页表就行了。


copy on write 是在子进程需要写是才给它重新分配进程空间,对吧?
此时的分配进程空间,我们是否可以等价于分配内存?

copy 页表是指什么呢? 什么时候 copy

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
4 [报告]
发表于 2012-12-17 17:07 |只看该作者
@moxies
你先吹吧。。

Google CopyOnWrite

至于楼主的
然后在子进程中 exec 另外一个程序,而这个程序只需要很少的内存,比如 1K,如此,很多的内存是不是没有得到充分的利用呢?

那是因为Exec后,继承自父进程的空间被简单丢弃了。进程页表被重新建立。没有这个问题。

此外,进程空间和进程实际分到的内存是两回事。

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-21 06:20:00
3 [报告]
发表于 2012-12-17 16:54 |只看该作者
@folklore 解答的信息量太少。

怎么能把fork的100m 变成1k ? 拷贝页表是怎么搞定的?

牛儿们,再不来,我就开始吹啦。

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
2 [报告]
发表于 2012-12-17 16:34 |只看该作者
copy on write.
只要Copy页表就行了。
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP