彻底理解 fork 之写时复制 《一》
一直以来都对操作系统都比较感兴趣,这篇文章呢就主要研究一下当我们调用fork系统掉用所用到的写时复制技术(copy-on-write)。
下图是fork系列函数的调用过程
<摘自网络 侵删>
写时复制,其实在很多地方都会用到,我们先来看看关于字符串使用写时复制的例子吧。
写时拷贝故名思意:是在写的时候(即改变字符串的时候)才会真正的开辟空间拷贝(深拷贝),如果只是对数据的读时,只会对数据进行浅拷贝。
写时拷贝:引用计数器的浅拷贝,又称延时拷贝
:写时拷贝技术是通过"引用计数"实现的,在分配空间的时候多分配4个字节,用来记录有多少个指针指向块空间,当有新的指针指向这块空间时,引用计数加一,当要释放这块空间时,引用计数减一(假装释放),直到引用计数减为0时才真的释放掉这块空间。当有的指针要改变这块空间的值时,再为这个指针分配自己的空间(注意这时引用计数的变化,旧的空间的引用计数减一,新分配的空间引用计数加一)。
基于此 我们来再看看调用 fork 时需要使用的写时复制技术吧!
其实这块比较有意思,系统需要处理的事情太多,处理任务一般都采用最懒惰的策略,在网上也看了几个证明写时复制的例子,但感觉并不严谨,并不能来证明。比如这个高票回答
#include<stdio.h>
#include<string.h>
#