Memory 写时复制:父子修改页面后的状态如何?

Memory 写时复制:父子修改页面后的状态如何?,memory,fork,virtual-memory,copy-on-write,page-tables,Memory,Fork,Virtual Memory,Copy On Write,Page Tables,当你分叉一个进程时,在Begging,父亲和儿子共享同一个内存页。但是,如果其中一个在该页面上写入,则会复制该页面,以便第一个页面不受此更改的影响。这大致上就是所谓的书面复制 我的问题是:如果我们fork()一个进程,然后孩子修改页面会发生什么:页面重复一次,但是之后,父亲也修改页面。这一页又重复了吗?父亲“知道”那是唯一已经复制的儿子吗 提前感谢您的帮助。有n个进程可以访问写入页上的副本,其中有n个进程≥ 2.如果一个进程写入,该页将被复制并成为该进程的正常页。原始页面现在仅共享n-1次;如果

当你分叉一个进程时,在Begging,父亲和儿子共享同一个内存页。但是,如果其中一个在该页面上写入,则会复制该页面,以便第一个页面不受此更改的影响。这大致上就是所谓的书面复制

我的问题是:如果我们fork()一个进程,然后孩子修改页面会发生什么:页面重复一次,但是之后,父亲也修改页面。这一页又重复了吗?父亲“知道”那是唯一已经复制的儿子吗


提前感谢您的帮助。

有n个进程可以访问写入页上的副本,其中有n个进程≥ 2.如果一个进程写入,该页将被复制并成为该进程的正常页。原始页面现在仅共享n-1次;如果n=1,则它也将成为正常页面。复印两份是没有意义的

(可能过于简化的通用性——即它的工作原理)

父母养育孩子

Parent process has Virtual Page 10 as readonly physical page 1000.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readonly physical page 1001.
父级写入虚拟页面10。 触发保护故障。 操作系统检测到它是写入页上的副本 将物理页1000复制到1002 将引用计数递减到物理页1000 重新启动指令

Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readonly physical page 1001.
Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readwrite physical page 1003.
Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readwrite physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readwrite physical page 1003.
子项写入虚拟页11 触发保护故障。 操作系统检测到它是写入页上的副本 将物理页1001复制到1003 将引用计数递减到物理页1001 重新启动指令

Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readonly physical page 1001.
Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readwrite physical page 1003.
Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readwrite physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readwrite physical page 1003.
父级写入虚拟页11 触发保护故障。 操作系统检测到它是写入页上的副本,并且引用计数为1。 操作系统将页面更改为读写 重新启动指令

Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readonly physical page 1001.
Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readonly physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readwrite physical page 1003.
Parent process has Virtual Page 10 as readwrite physical page 1002.
Parent process has Virtual Page 11 as readwrite physical page 1001.
Child process has Virtual Page 10 as readonly physical page 1000.
Child process has Virtual Page 11 as readwrite physical page 1003.