都说写时拷贝好,这玩意儿到底是什么原理?

前言

fork()函数干了啥?
fork() 用于创建一个新的进程。当你在程序中调用 fork() 函数时,操作系统会创建一个调用进程(称为“父进程”)的副本,即一个新的进程(称为“子进程”)。这个新进程几乎与原始进程相同,包括其代码、数据、环境和打开的文件描述符。

正文

什么是写时拷贝?
实现fork()的一种是将父进程的内容全部拷贝一次,就是父进程有啥我全都拷贝过来。很明显这种操作耗时,效率低下。
如果子进程只拷贝父进程的页目录表和页表(使用和父进程一样的地址映射,这样他俩就能访问相同的内容),并将页都设为只读,这样一来,当程序试图对页写时,再对这个页进行一次真正的拷贝。相当于是延缓了拷贝的时间,那这样的话效率就大大增加了啊!你想,是全部赋值快呢,还是只赋值目录表和页表快呢?下图进行了一个简单的说明:
都说写时拷贝好,这玩意儿到底是什么原理?_第1张图片
具体的代码就不在这里贴了,这里只是对原理上进行一个简单的说明,代码还涉及到了系统调用、中断处理、物理映射等内容,不再一一赘述。

你可能感兴趣的:(linux,写时拷贝)