彻底理解 fork 之写时复制 《一》

2023-10-26

彻底理解 fork 之写时复制 《一》


一直以来都对操作系统都比较感兴趣,这篇文章呢就主要研究一下当我们调用fork系统掉用所用到的写时复制技术(copy-on-write)。

下图是fork系列函数的调用过程

在这里插入图片描述

<摘自网络 侵删>


写时复制,其实在很多地方都会用到,我们先来看看关于字符串使用写时复制的例子吧。

	写时拷贝故名思意:是在写的时候(即改变字符串的时候)才会真正的开辟空间拷贝(深拷贝),如果只是对数据的读时,只会对数据进行浅拷贝。
	写时拷贝:引用计数器的浅拷贝,又称延时拷贝
	:写时拷贝技术是通过"引用计数"实现的,在分配空间的时候多分配4个字节,用来记录有多少个指针指向块空间,当有新的指针指向这块空间时,引用计数加一,当要释放这块空间时,引用计数减一(假装释放),直到引用计数减为0时才真的释放掉这块空间。当有的指针要改变这块空间的值时,再为这个指针分配自己的空间(注意这时引用计数的变化,旧的空间的引用计数减一,新分配的空间引用计数加一)。

基于此 我们来再看看调用 fork 时需要使用的写时复制技术吧!

其实这块比较有意思,系统需要处理的事情太多,处理任务一般都采用最懒惰的策略,在网上也看了几个证明写时复制的例子,但感觉并不严谨,并不能来证明。比如这个高票回答

#include<stdio.h>
#include<string.h>
#
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

彻底理解 fork 之写时复制 《一》 的相关文章

  • 操作系统学习(九)进程通信

    一 知识总览 二 定义 进程通信是指进程之间的信息交换 每个进程都拥有自己的内存空间 是相互独立的 这样在每个进程执行时 才不会被其他进程所干扰 三 进程通信的方式 1 共享存储 1 两个进程对共享区的访问必须是互斥的 即在同一时间内 只允
  • Client-Server问题

    1 实验内容与要求 需要创建客户Client和服务器Server两个进程 它们通过管道进行通信 Client进程派生3个生产者线程 一个管道线程 共享一个20个slots的缓冲区 每个生产者线程随机产生一个数据 打印出来自己的id 进程 线
  • chatgpt赋能python:Python写一个抽奖程序:从随机数生成到实现

    Python写一个抽奖程序 从随机数生成到实现 Python是当今最热门的编程语言之一 无论是开发网站 进行数据分析 实现机器学习 还是进行游戏开发 Python都可以胜任 在本文中 我们将介绍如何使用Python编写一个简单的抽奖程序 程
  • office2013 excel 打开时提示excel词典xllex.dll文件丢失或损坏

    今天打开Excel时 发现报错 xllex dll文件丢失或损坏 我用的是office2013 网上找了好多都是2007的dll文件 导入不了 于是乎重装office 问题解决 但还是把xllex dll烤出来做个备份吧 参考下面步骤即可
  • Windows 添加永久静态路由

    route add p 10 10 0 0 mask 255 255 0 0 10 10 6 1 p 参数 p 即 persistent 的意思 p 表示将路由表项永久加入系统注册表
  • LWIP在STM32上的移植

    本文做记录摘抄 加上自己的体会 文章标题 STM32使用LWIP实现DHCP客户端 http www cnblogs com dengxiaojun p 4379545 html 该文章介绍了几点 LWIP源码的内容 关键点 1 inclu
  • Linux系统如何看目录属于哪个磁盘分区

    Linux是先有目录 再有磁盘分区 df h 目录 例如 没有挂载磁盘的目录 显示在系统盘 root iZ2ze57v3n0zma46zqiq8nZ sh 1 5 5 df h alidata Filesystem Size Used Av
  • Elasticsearch 日志

    下载并安装 Filebeat 首次使用 Filebeat 请参阅入门指南 复制代码片段 curl L O https artifacts elastic co downloads beats filebeat filebeat 7 2 0
  • [架构之路-185]-《软考-系统分析师》-3-操作系统基本原理 - 文件索引表

    目录 一 文件的索引块 二 索引分配表 三 索引表的链接方案 四 多层索引 五 混合索引分配 一 文件的索引块 存放在目录中的文件 并非是文件的真实内容 目录中记录了文件的索引块是几号磁盘块 文件对应的索引表是存放在指定的磁盘块中的 二 索
  • chatgpt赋能python:Python金额计算

    Python金额计算 Python是一种高级编程语言 因其易于阅读 简单 灵活和易于学习而广受欢迎 它还具有强大的数学和计算功能 因此 它是一种非常流行的用于金额计算的工具 在本文中 将介绍如何使用Python进行金额计算 包括不同的货币格
  • 使用inet_ntop转换IPv6地址时在macOS和linux上的行为不一样

    下面这段python代码在macOS和linux时运行的结果是不同的 import socket ip socket inet pton socket AF INET6 1 2 3 0 5 6 7 8 print socket inet n
  • chatgpt赋能python:用Python对图片进行分类

    用Python对图片进行分类 在如今的数字时代 图片分类是一个越来越常见的任务 特别是在搜索引擎优化中 图片分类可以让搜索引擎更容易地找到特定类型的图片 并在相关的搜索中以更高的排名显示它们 在本文中 我们将介绍如何使用Python来分类图
  • 由于回车符引起的shell错误

    今天弟弟写shell时出现一个错误 源代码如下 zip r 1 2 执行时出现错误 我也写了相同的语句 发现是可以执行的 把两个文件对比一看 差别在于 出错shell 正确shell 在linux下的回车是 n 在win下面的回车是 r n
  • 如何快速构建CMBD系统-glpi

    脚本后续更新及迭代将由kkitDeploy项目代替 https github com luckman666 kkitdeploy server 请大家持续关注kkitDeploy 一 CMBD系统构建步骤 起初 开发这套CMBD系统是为了帮
  • 反斜杠“\”与斜杠“/” 的区别

    与 的区别为 用途不同 系统不同 网址不同 一 用途不同 1 只能用来表示目录 2 技能作为除法符号或者间隔符号使用 也能用来表示目录 二 系统不同 1 用作目录时 适用于windows系统 2 用作目录时 适用于unix系统 也可用于wi
  • gdb attach 进程调试

    gdb调试正在运行的进程 GDB可以对正在执行的程序进行调度 它允许开发人员中断程序 并查看其状态 之后还能让这个程序正常地继续执行 gdb attach xxxxx xxxxx为利用ps命令获得的子进程process
  • 使用ShellJS提升你的开发效率(一)

    Shelljs Unix shell commands for Node js Shelljs是Node js下的脚本语言解析器 具有丰富且强大的底层操作 Windows Linux OS X 权限 Shelljs本质就是基于node的一层
  • 《OSPF和IS-IS详解》一1.7 独立且平等

    本节书摘来自异步社区 OSPF和IS IS详解 一书中的第1章 第1 7节 作者 美 Jeff Doyle 更多章节内容可以访问云栖社区 异步社区 公众号查看 1 7 独立且平等 OSPF和IS IS详解与TCP IP相比 OSI协议对各国
  • 在一个线程池中,通常无法直接访问和检查单个线程的状态,因为线程池是由多个线程组成的,并且线程的执行情况可能会动态变化

    在一个线程池中 通常无法直接访问和检查单个线程的状态 因为线程池是由多个线程组成的 并且线程的执行情况可能会动态变化 然而 你可以通过一些方法来间接地查看线程是否在运行 一种常见的方法是为线程池中的每个线程设置一个标志或状态变量 用于表示线
  • 300万的人才缺口,为什么网络安全成为2024中职春招最热门的专业

    前言 随着互联网的普及和信息技术的飞速发展 网络安全问题日益凸显 网络安全产业也因此迎来了前所未有的发展机遇 根据 2023年中国网络安全产业人才发展报告 显示 我国网络安全产业人才市场供需失衡 实战型人才短缺尤为突出 在这样的背景下 中职

随机推荐

  • 广电大数据用户画像及营销推荐策略(二)——Python实现

    本次大数据项目数据及分析均做脱敏化和保密化 主要分享思路体系 全程用Python实现 数据和代码均不提供 如有建议欢迎讨论 2 数据准备 由于数据中用户收视行为信息数据记录很大 如果对数据不进行分类处理 对所有记录直接采用推荐系统进行推荐
  • 强大的pyquery解析器详解

    在本文中博主将介绍pyquery的知识点 如果你认为BeautifulSoup这个CSS选择器不是那么强大 来认识一下pyquery的强大吧 个人认为BeautifulSoup是一个比较的老的库 已经很久没有更新了 但是现在市面上大多都是B
  • Mac OS X のキーボードショートカット

    概要 記事 Mac OS X 一般的 紹介 使 上 組 合 同時 押 Mac OS X 機能 呼 出 操作 利用 修飾 文字 同時 押 現在選択 範囲 貼 付 command 刻印 C 同時 押 操作 command C 呼 修飾 多数 組
  • Linux LVM 管理测试

    理论基础可参考 https linux cn article 12670 1 html 测试中使用loop设备模拟硬盘 测试添加 扩容 移除等操作 初始化脚本 创建并挂在4个loop设备 模拟4块硬盘 for i in 1 5 do dd
  • DR-CAN的动态系统建模与分析学习笔记(9)一阶系统的频率响应_低通滤波器-Matlab/Simulink分析

    1 2 截止频率的推导 截止频率 当保持输入信号的幅度不变 改变频率使输出信号降至最大值的0 707倍 此时的即为截止频率 它是用来说明频率特性指标的一个特殊频率 3 低通滤波器 积分的拉氏变换是1 s 所以
  • 【Kubernetes系列】工作负载资源之DaemonSet

    文章目录 概述 前提条件 DaemonSet配置 创建 DaemonSet 必需字段 Pod 模板 Pod 选择算符 仅在某些节点上运行 Pod 调度Daemon Pods 通过默认调度器调度 污点和容忍度 与 Daemon Pods 通信
  • 第一章 数据库架构发展历程

    1 架构1 0 单机单库 一个简单的小型网站或者应用背后的架构可以非常简单 数据存储只需要一个mysql instance就能满足数据读取和写入要求 这里忽略数据备份的实例 处于这个阶段的系统 一般会把所有信息存到一个Mysql insta
  • PAT

    1045 快速排序 25分 著名的快速排序算法里有一个经典的划分过程 我们通常采用某种方法取一个元素作为主元 通过交换 把比主元小的元素放到它的左边 比主元大的元素放到它的右边 给定划分后的 N 个互不相同的正整数的排列 请问有多少个元素可
  • H - Unloaded Die

    H Unloaded Diehttps vjudge csgrandeur cn problem Gym 101652U题意 给一个筛子 六个面1 2 3 4 5 6 输入每个面的概率 求更改某个数使期望等于3 5 同时使数据变化尽可能小
  • unity Input.GetTouch

    触摸交互案例 Input GetTouch 0 deltaPosition 获取触摸滑动增量 float num Input GetTouch 0 deltaPosition y 0 003f 使用y值增量例子 其他 单指点击 using
  • Eclipse + Struts2.x+Spring2.x+Dwr3.x

    我了解过官网关于 dwr3 的介绍后 发现它介绍的配置 dwr 的方法不是与 spring 结合的 也就是说每次进行 dwr 访问 系统都会重新 new 一个 service 来异步处理我们的请求 这对于简单的功能是没什么问题的 但如果涉及
  • 事务的理解

    事务是恢复和 并发控制的基本单位 事务应该具有4个属性 原子性 一致性 隔离性 持久性 这四个属性通常称为 ACID特性 原子性 atomicity 一个事务是一个不可分割的工作单位 事务中包括的诸操作要么都做 要么都不做 一致性 cons
  • Git同时push到Gitee和Github仓库 与 Github对密码认证的支持于2021年8月13日被删除

    目录 Git同时push到Gitee和Github仓库 Github对密码认证的支持于2021年8月13日被删除 Git同时push到Gitee和Github仓库 修改 git confit 文件 如下 然后就可以一条push命令让Gite
  • ROI Pooling和ROI Align、ROI Warp解析

    文中很多内容来源于其他博客 较为详细 有需要可直接按目录跳选到自己需要的部分 目录 简单介绍 实验比较 ROI理解 ROI Pooling ROI Pooling理解 ROI Pooling example ROI Pooling局限性 R
  • list 列表单(多)选(uni-app)

  • 解决vue中v-model绑定的变量赋值给了另一个变量后,两个变量同时改变

    先来看一下问题背景 我们要做一个 搜索 分页 的功能 使用vue 我们将分页控件绑定了点击事件 点击后提交v model绑定的formData表单 但是我们忽略了一个问题 就是当输入的信息改变的情况下 不点击搜索 直接点击分页控件 提交的将
  • redis安装

    Redis安装说明 大多数企业都是基于Linux服务器来部署项目 而且Redis官方也没有提供Windows版本的安装包 因此课程中我们会基于Linux系统来安装Redis 此处选择的Linux版本为CentOS 7 Redis的官方网站地
  • 6、【创业必备企业架构,可开发任意项目】SpringCloud大型企业分布式微服务云架构源码之MySQL 删除数据库

    MySQL 删除数据库 使用普通用户登陆 MySQL 服务器 你可能需要特定的权限来创建或者删除 MySQL 数据库 所以我们这边使用 root 用户登录 root 用户拥有最高权限 在删除数据库过程中 务必要十分谨慎 因为在执行删除命令后
  • Excel VBA:文件选择——Application.FileDialog

    FileDialog 对象 提供文件对话框 其功能与 Microsoft Office 应用程序中标准的 打开 和 保存 对话框类似 说明 使用 FileDialog 属性返回一个 FileDialog 对象 FileDialog 属性位于
  • 彻底理解 fork 之写时复制 《一》

    彻底理解 fork 之写时复制 一 一直以来都对操作系统都比较感兴趣 这篇文章呢就主要研究一下当我们调用fork系统掉用所用到的写时复制技术 copy on write 下图是fork系列函数的调用过程 lt 摘自网络 侵删 gt 写时复制