Linux进程创建:fork()与写时拷贝揭秘
进程控制进程创建Linux创建进程通过fork()函数调用!在之前的学习已经提到了这个知识点父进程在主函数中调用fork函数此时os就在创建了一个子进程此时父子进程就开始并发调度分流运行fork函数返回 子进程返回0父进程返回子进程PID若子进程创建失败返回-11)我们知道进程 内核数据结构数据所以创建子进程就要为子进程分配对应的数据结构和数据2)将父进程的PCB、mm_struct、页表拷贝给子进程个别数据进行修改3)将子进程添加到系统进程列表中 并且可以将子进程添加到进程调度队列我们知道父子进程数据默认共享直到进程某一方开始对某个数据进程修改时OS会使用写时拷贝来保证进程的独立性我们知道进程具有独立性那一个进程的代码是另一款OS呢那么就可以在LinuxOS上运行其他的OS这并不会有影响因为进程就有独立性这就是内核级虚拟机的原理写时拷贝子进程因为拷贝了父进程的内核数据结果所以父子进程在默认情况下是冰箱数据和代码的父子进程的虚拟地址空间和页表都相同所以都指向同一块物理地址所以共享我们知道页表也有权限字段控制用户使用虚拟地址访问物理内存!我们知道代码段数据不能呗修改所以在页表权限部分设置代码区的映射访问权限设为只读状态所以当用户尝试通过虚拟地址修改代码区数据的时候OS不运行通过地址映射那么为什么图中数据区的映射权限也为只读当只有父进程一个时候数据区的映射权限是为读写的但是当创建子进程有了多个子进程的时候会父子进程的数据区映射访问权限都设为只读当父子进程其中一个进程尝试修改数据区数据OS会发现访问的数据是合法的虚拟地址和物理地址都有OS又通过mm_struct知道访问的是数据区的数据但是发现数据段是只读的OS就会报错但是这种报错并不是真的出错而是O检查到用户要讲一个只读的区域写入而且这个区域是数据区这个时候OS就会启动写时拷贝(COW)所以处于共享状态父子进程是通过让用户修改只读的数据区页表向OS报错从而进行写时拷贝机制所以查页表报错机制也有多种情况1、地址不存在2、缺页中断访问的物理内存块不存在要加载3、访问的物理内存块存在但是全是是只读的为什么要写时拷贝我们知道进程具有独立性那如果我们创建子进程的时候直接把代码和数据全部拷贝一份给子进程可以吗理论上是可以的但是要考虑现实问题拷贝全部的代码和数据拷贝的时间需要考虑吧再说了整个程序代码不可能被修改数据也可能不会全部被修改数据中也有只读的数据所以如果全部都拷贝必然会产生内存浪费所以写时拷贝是OS内最精细的内存管理操作对不修改的数据不进行拷贝只对修改的数据进行拷贝减少创建子进程的成本时间减少内存浪费fork常规用法一个父进程希望复制自己使父子进程同时执行不同的代码段。通过创建子进程让父子进程分流运行代码后面的部分实现父进程代码的一部分功能例如父进程等待客户端请求生成子进程来处理请求一个进程要执行一个不同的程序例如子进程从fork返回后调用exec函数其实我们平时调用的指令就是通过bash父进程创建出来的子进程来完成的功能fork调用失败的原因fork创建子进程失败进程 内核数据结构 数据所以要么就是OS创建内核数据结构创建失败PCB、虚拟地址空间、页表的物理地址申请失败了这些东西说白了就是数据结构对象开辟还是需要空间的要么就是加载数据到内存失败了这两者失败的原因指向同样的方向——内存空间不够了所以OS为了减少内存不足的情况OS一般会限制进程数量并且会限制用户调用进程的数量系统中有太多的进程实际用户的进程数超过了限制

相关新闻

Windows用户文件夹移动后出现两个文件夹的注册表原理与修复指南

Windows用户文件夹移动后出现两个文件夹的注册表原理与修复指南

1. 问题场景:一个看似简单却令人困惑的“合并”现象 你有没有遇到过这样的场景?在Windows系统里,为了整理磁盘空间,或者纯粹是个人习惯,想把“桌面”或者“文档”文件夹从默认的C盘挪到D盘。这个操作听起来再简单不过了…

2026/8/20 17:56:32 阅读更多 →
监控视角非机动车违规交通行为检测摩托车自行车违章行为检测数据集VOC+YOLO格式5861张9类别

监控视角非机动车违规交通行为检测摩托车自行车违章行为检测数据集VOC+YOLO格式5861张9类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5861 标注数量(xml文件个数):5861 标注数量(txt文件个数):5861 …

2026/8/21 20:11:57 阅读更多 →
LizzieYzy围棋AI分析助手:三步打造你的职业级围棋教练

LizzieYzy围棋AI分析助手:三步打造你的职业级围棋教练

LizzieYzy围棋AI分析助手:三步打造你的职业级围棋教练 【免费下载链接】lizzieyzy LizzieYzy - GUI for Game of Go 项目地址: https://gitcode.com/gh_mirrors/li/lizzieyzy 你是否曾经在复盘围棋对局时感到迷茫?面对复杂的棋局变化,…

2026/8/21 7:33:01 阅读更多 →

最新新闻

基于ComfyUI与MiniMax H3的AI影视创作工作流部署与应用指南

基于ComfyUI与MiniMax H3的AI影视创作工作流部署与应用指南

这次我们来看一个专门为 AI 影视剧创作设计的 ComfyUI 工作流项目。它围绕 MiniMax H3 模型,整合了从提示词工程、工作流编排到加速优化的完整流程。如果你正在寻找一套能直接上手、覆盖影视级内容生成、并且支持本地部署的解决方案,这个项目值得重点关注…

2026/8/22 20:04:57 阅读更多 →
Tomcat+Nginx集群实战:从反向代理到HTTPS的完整部署指南

Tomcat+Nginx集群实战:从反向代理到HTTPS的完整部署指南

1. 项目概述:从竞赛题到生产级架构的深度拆解看到“2022国赛26”这个标题,很多参加过相关技能竞赛的朋友可能会心一笑。这指的是一道经典的运维与Web服务部署综合题,其核心是要求选手在一个模拟的生产环境中,协同部署Tomcat应用服…

2026/8/22 20:04:57 阅读更多 →
Linux DNS主从架构与RNDC远程管理实战部署指南

Linux DNS主从架构与RNDC远程管理实战部署指南

1. 项目概述与核心价值最近在整理服务器运维的笔记,翻到了前两年国赛里一个关于Linux DNS服务的经典题目。题目要求是搭建一个具备主从同步功能,并且集成了RNDC远程管理功能的DNS服务器集群。这个场景非常贴近生产环境,很多中小企业的内部域名…

2026/8/22 20:04:57 阅读更多 →
LLM多智能体系统可靠性测试:故障注入框架MAS-FIRE的设计与实践

LLM多智能体系统可靠性测试:故障注入框架MAS-FIRE的设计与实践

1. 项目概述:为什么我们需要一个针对LLM智能体的“故障注入”工具?最近几个月,我几乎把所有业余时间都泡在了基于大语言模型(LLM)的多智能体系统(Multi-Agent Systems, MAS)上。从简单的客服对话…

2026/8/22 20:04:57 阅读更多 →
Grok AI编程工具本地部署与集成实践指南

Grok AI编程工具本地部署与集成实践指南

这次我们来看一个近期在开发者社区和AI圈子里讨论度很高的项目:Grok。这个名字你可能在多个地方见过,比如作为某个AI聊天机器人的名字,或者出现在一些代码生成工具的上下文中。根据网络上的讨论,Grok 4.6 已经上线,而 …

2026/8/22 20:04:57 阅读更多 →
免费网盘直链下载工具教程:从八大网盘获取直链并对接 IDM、Aria2 的完整指南

免费网盘直链下载工具教程:从八大网盘获取直链并对接 IDM、Aria2 的完整指南

免费网盘直链下载工具教程:从八大网盘获取直链并对接 IDM、Aria2 的完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 …

2026/8/22 20:03:57 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →