Linux内核之fork系统调用分析(二)

本文详细解析了fork系统调用的实现原理,包括其拷贝机制及copy-on-write技术的应用,解释了父进程与子进程间内存地址相同但实际内容可能不同的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在此篇文章分析之前我们必须知道fork系统调用有返回值,返回值为0则是子进程,大于0为父进程。

贴上代码

通过上一篇的fork系统调用分析,我们知道fork具有拷贝功能,这段代码的作用是来分析父进程和子进程打印出来的值和地址有什么不同

我们可以看到结果是值不一样,但是地址却是一样的,值不一样是因为我们赋值了,所以拷贝的时候也变化了,但是地址还是一样,这不免让人疑惑?

内核分析:其实内核里面有一个逻辑内存又成虚拟内存,父进程指向虚拟内存访问到变量count,当拷贝的时候,子进程拷贝了父进程的虚拟内存,所以他们的地址是一样。当我们变量改变的时候,其实物理内存是改变了,但是是虚拟内存指向的变量,而我们在终端只能看到虚拟内存,并不能看到物理内存。(这种方式称为copy-on-write 写入时候才拷贝,访问的时候还是原来变量)为什么要有这种方式呢?有时候父进程太大,子进程又用得内存不多,原样拷贝父进程浪费太多内存,所以在写的时候才来分配内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值