【问题标题】:Copy-On-Write : What status after father and son modify the page?Copy-On-Write : 父子修改页面后是什么状态?
【发布时间】:2015-04-14 10:36:37
【问题描述】:

当你fork一个进程时,在开始时,父子共享同一个内存页。但是,如果其中一个人在此页面上书写,它会被复制,以便第一个不受此更改的影响。这大致就是所谓的 Copy-on-Write。

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

提前感谢您的帮助。

【问题讨论】:

    标签: memory fork virtual-memory copy-on-write page-tables


    【解决方案1】:

    (通用有过度简化的风险——即它是如何工作的)

    Parent process has Virtual Page 10 as readwrite physical page 1000.
    Parent process has Virtual Page 11 as readwrite physical page 1001.
    

    父叉子。

    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.
    

    子级写入虚拟页面 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 readwrite physical page 1003.
    

    父级写入虚拟页面 11 触发保护故障。 操作系统检测到它是写入页面上的副本,并且引用计数为 1。 操作系统将页面更改为读写 重启指令

    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.
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-04
        • 2014-05-22
        • 2015-04-15
        • 1970-01-01
        • 1970-01-01
        • 2021-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多