Linux内核之fork系统调用分析(二)
2018-09-05 00:43
633 查看
在此篇文章分析之前我们必须知道fork系统调用有返回值,返回值为0则是子进程,大于0为父进程。
贴上代码
通过上一篇的fork系统调用分析,我们知道fork具有拷贝功能,这段代码的作用是来分析父进程和子进程打印出来的值和地址有什么不同
我们可以看到结果是值不一样,但是地址却是一样的,值不一样是因为我们赋值了,所以拷贝的时候也变化了,但是地址还是一样,这不免让人疑惑?
内核分析:其实内核里面有一个逻辑内存又成虚拟内存,父进程指向虚拟内存访问到变量count,当拷贝的时候,子进程拷贝了父进程的虚拟内存,所以他们的地址是一样。当我们变量改变的时候,其实物理内存是改变了,但是是虚拟内存指向的变量,而我们在终端只能看到虚拟内存,并不能看到物理内存。(这种方式称为copy-on-write 写入时候才拷贝,访问的时候还是原来变量)为什么要有这种方式呢?有时候父进程太大,子进程又用得内存不多,原样拷贝父进程浪费太多内存,所以在写的时候才来分配内存。
阅读更多相关文章推荐
- 《第一篇 从linux 0.11系统初始化main.c的fork()函数调用分析内核源码》
- linux 2.6.11内核文件IO的系统调用实现分析--再续
- XNU内核案例(一)BSD系统调用fork的详细分析
- Linux内核分析4:扒开系统调用三层皮
- linux内核情景分析{中断 系统调用 内存}
- linux内核分析——扒开系统调用的三层皮
- 【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用
- Linux内核分析——扒开系统调用的三层皮(下)
- Linux0.11内核--系统调用机制分析
- 【Linux操作系统分析】Ubuntu12.04内核升级和添加系统调用
- linux 2.6.11内核文件IO的系统调用实现分析(read,write)(转载)
- Linux操作系统分析(4)- 更新内核与添加系统调用
- Linux操作系统分析(4)- 更新内核与添加系统调用
- linux内核中断、异常、系统调用的分析以及实践
- Linux操作系统分析(4)- 更新内核与添加系统调用
- linux内核文件IO的系统调用实现分析(open)
- Linux内核分析之四——系统调用的工作机制
- Linux内核分析课程4_Linux系统调用
- Linux 内核学习——系统调用(fork)
- Linux内核分析——系统调用(上)