您的位置:首页 > 运维架构 > Linux

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

2018-09-05 00:43 633 查看

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

贴上代码

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

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

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

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: