当前位置: 首页 > news >正文

对内核fork进程中写时复制的理解记录

前言

文章写于学习Redis时对aof后台重写中写时复制的疑问

一、感到不理解的歧义

在部分技术文档中(以小林的文章为例),对写时复制后的内存权限存在如歧义:
!在这里插入图片描述

二、正确技术表述

根据Linux内核实现(5.15+版本),写时复制的内存权限变化应表述为:
"在fork()创建子进程后,父子进程通过共享只读页表项指向同一物理页。当任一进程尝试写入时,CPU的MMU单元会触发缺页异常。内核处理程序将执行以下操作:

  1. 分配新物理页并复制原始内容
  2. 仅修改当前进程的页表项,将其指向新物理页并标记为可写
  3. 保持其他共享进程的页表项不变,仍指向原物理页且保持只读属性"

附:概念关系图

进程A写操作
    │
    ▼
触发缺页异常 ──┐
    │          │
    ▼          │
内核分配新物理页 <──┘
    │
    ▼
更新进程A页表项:
   - 指向新物理页
   - 标记为可写
    │
    └── 进程B页表项保持不变:
         - 仍指向原物理页
         - 保持只读属性
http://www.dtcms.com/a/98619.html

相关文章:

  • Servlet注解与使用模板方法设计模式优化oa项目
  • 简单了解一下Unity的MaterialPropertyBlock
  • C++进阶——封装哈希表实现unordered_map/set
  • 基于飞腾/龙芯+盛科CTC7132全国产交换机解决方案
  • MySQL数据库和表的操作之SQL语句
  • dom0运行android_kernel: do_serror of panic----failed to stop secondary CPUs 0
  • Java学习------源码解析之StringBuilder
  • C++笔记-string(中)
  • Keil编译生成的axf文件的介绍
  • 38.C++哈希3(哈希表底层模拟实现 - 开散列拉链法和哈希桶)
  • 异常与捕获
  • Android7 Input(二)Linux 驱动层输入事件管理
  • Protobuf 的快速使用(二)
  • SVTAV1函数分析-svt_av1_cost_coeffs_txb
  • (二)创建实例
  • 人工智能之数学基础:实对称矩阵
  • AI大模型最新发布[update@202503]
  • [Vue2]v-model用于表单
  • fio磁盘测试工具使用笔记
  • Appium中元素定位的注意点
  • springboot-Spring Boot DevTools工具的使用
  • VSCODE npm: 因为在此系统上禁止运行脚本。有关详细信息,请参阅 ...
  • 浏览器 ➔ 服务器or服务器 ➔ 浏览器:
  • 第二卷:海盐城血战(37-72回)正反人物群像
  • 第一篇:系统分析师首篇
  • DFS飞机降落
  • 《HelloGitHub》第 108 期
  • AUTOSAR_StbM_详解
  • 浅谈Thread类及常见方法与线程的状态(多线程编程篇2)
  • fetch`的语法规则及常见用法