专栏首页以Java架构赢天下写时复制技术(详解版)

写时复制技术(详解版)

我们知道了一个进程如何采用请求调页,仅调入包括第一条指令的页面,从而能够很 快开始执行。然而,通过系统调用 fork() 的进程创建最初可以通过使用类似于页面共享的技术,绕过请求调页的需要。这种技术提供了快速的进程创建,并最小化必须分配给新创建进程的新页面的数量。

回想一下,系统调用 fork() 创建了父进程的一个复制,以作为子进程。传统上,fork() 为子进程创建一个父进程地址空间的副本,复制属于父进程的页面。然而,考虑到许多子进程在创建之后立即调用系统调用 exec(),父进程地址空间的复制可能没有必要。

因此,可以采用一种称为写时复制的技术,它通过允许父进程和子进程最初共享相同的页面来工作。这些共享页面标记为写时复制,这意味着如果任何一个进程写入共享页面,那么就创建共享页面的副本。

进程1修改页面C前后

图 1 进程 1 修改页面 C 前后

写时复制如图 1 所示,图中分别反映了修改页面 C 的前与后。

例如,假设子进程试图修改包含部分堆栈的页面,并且设置为写时复制。操作系统会创建这个页面的副本,将其映射到子进程的地址空间。然后,子进程会修改复制的页面,而不是属于父进程的页面。显然,当使用写时复制技术时,仅复制任何一进程修改的页面,所有未修改的页面可以由父进程和子进程共享。

还要注意,只有可以修改的页面才需要标记为写时复制。不能修改的页面(包含可执行代码的页面)可以由父进程和子进程共享。写时复制是一种常用技术,为许多操作系统所采用,包括Windows XP、Linux 和 Solaris。

当确定采用写时复制来复制页面时,重要的是注意空闲页面的分配位置。许多操作系统为这类请求提供了一个空闲的页面池。当进程的堆栈或堆要扩展时或有写时复制页面需要管理时,通常分配这些空闲页面。操作系统分配这些页面通常采用称为按需填零的技术。按需填零页面在需要分配之前先填零,因此清除了以前的内容。

UNIX 的多个版本(包括 Solaris 和 Linux)提供了系统调用 fork() 的变种,即 vfork()(虚拟内存fork(virtual memory fork)),vfork() 的操作不同于写时复制的fork()。

采用 vfork(),父进程被挂起,子进程使用父进程的地址空间。因为 vfork() 不采用写时复制,如果子进程修改父地址空间的任何页面,那么这些修改过的页面对于恢复的父进程是可见的。因此,应谨慎使用 vfork(),以确保子进程不会修改父进程的地址空间。当子进程在创建后立即调用 exec() 时,可使用 vfork()。因为没有复制页面,vfork() 是一个非常有效的进程创建方法,有时用于实现 UNIX 命令外壳接口。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 长文预警!Spring源码之IoC容器的基本实现

    Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年...

    用户5546570
  • SpringBoot+MyBatis+Spring 技术整合实现商品模块的CRUD操作

    写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下! GitHub地...

    用户5546570
  • 面试:Spring Boot项目怎么用AOP

    将通用的逻辑用AOP技术实现可以极大的简化程序的编写,例如验签、鉴权等。Spring的声明式事务也是通过AOP技术实现的。 Spring的AOP技术主要有4个...

    用户5546570
  • vue-router2路由参数注意问题

    1、vue 路由 如果传递 params 定义路由的时候是 /路由名称:id 获取的时候  this.$route.params.id 最后形如 /路由...

    蓓蕾心晴
  • Java面试系列6

    清明即事 帝里重清明, 人心自愁思。 车声上路合, 柳色东城翠。 花落草齐生, 莺飞蝶双戏。 空堂坐相忆, 酌茗聊代醉。 1.String是最基本的数据类型吗...

    Java帮帮
  • 谷歌Chrome 77测试版即将发布:新的定制欢迎页和谷歌助理功能

    Chrome 77引入了一种欢迎体验,比第一次安装浏览器后的单页浏览略长。它首先邀请你在Omnibox下的主要谷歌应用程序中添加书签,“让Chrome成为你自己...

    德顺
  • Vulnhub渗透测试:DC-1

    Vulnhub是一个特别好的渗透测试实战网站,提供了许多带有漏洞的渗透测试虚拟机下载。 新手入门DC-1:下载地址

    ly0n
  • 微信小程序开发教程!博卡君第二弹【微信小程序项目结构以及配置】

    前面我们转了博卡君通宵吐血赶稿的微信小程序开发教程,当时只更新了两章,现在接着发布第三章:微信小程序项目结构以及配置,第四章:微信小程序首页面开发,以下是微信小...

    ytkah
  • 404页面对SEO的影响

    当你打开某一个网站的内页页面不存在,提示页面不存在或者连接错误,该页面上可以访问到网站的其他页面,这样的页面称之为404页面。

    无邪Z
  • Confluence 6 修改导航显示选项 原

    https://www.cwiki.us/display/CONF6ZH/Configure+the+Sidebar

    HoneyMoose

扫码关注云+社区

领取腾讯云代金券