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

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

前言

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

一、感到不理解的歧义

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

二、正确技术表述

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

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

附:概念关系图

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

http://www.kler.cn/a/614309.html

相关文章:

  • 【Linux笔记】进程间通信——匿名管道||进程池
  • 智能仪表板DevExpress Dashboard v24.2新版亮点:支持.NET 9
  • 管理Visual Studio配置文件(使用Azure DevOps开发,免费GIT托管)
  • OpenAI API - 快速入门开发
  • 使用Python的pytesseract进行网站模拟登录的脚本,主要针对古诗文网(gushiwen.cn)的登录功能。
  • 图论问题集合
  • 加载MiniLM-L12-v2模型及知识库,调用Deepseek进行问答
  • 【Hysteria】部署+测试
  • 虚拟机docker配置ES
  • Docker:ERROR [internal] load metadata for docker.io/library/java:8-alpine问题解决
  • UDS故障码(DTC)SAE格式和HEX相互转换公式
  • B3647 【模板】Floyd
  • ubuntu 安装mysql
  • 【计算机网络】网络原理
  • 智能路由系统-信息泄露漏洞挖掘
  • 第30周Java分布式入门 ThreadLocal
  • Tomcat深度解析:Java Web服务的核心引擎
  • Qwen-0.5b linux部署
  • sql注入语句学习
  • Scala总结(二)