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/8 10:14:14 阅读更多 →
监控视角非机动车违规交通行为检测摩托车自行车违章行为检测数据集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/8 10:14:14 阅读更多 →
LizzieYzy围棋AI分析助手:三步打造你的职业级围棋教练

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

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

2026/8/8 10:14:14 阅读更多 →

最新新闻

3步安全迁移:终极艾尔登法环存档角色转移解决方案

3步安全迁移:终极艾尔登法环存档角色转移解决方案

3步安全迁移:终极艾尔登法环存档角色转移解决方案 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 你是否曾在《艾尔登法环》中投入数百小时培养角色,却因游戏版本更新而无法继续冒险&a…

2026/8/8 11:14:59 阅读更多 →
Xournal++:揭秘跨平台数字笔记软件的五大颠覆性功能

Xournal++:揭秘跨平台数字笔记软件的五大颠覆性功能

Xournal:揭秘跨平台数字笔记软件的五大颠覆性功能 【免费下载链接】xournalpp Xournal is a handwriting notetaking software with PDF annotation support. Written in C with GTK3, supporting Linux (e.g. Ubuntu, Debian, Arch, SUSE), macOS and Windows 10. …

2026/8/8 11:14:59 阅读更多 →
Xournal++:你的数字笔记革命,让创意自由流淌

Xournal++:你的数字笔记革命,让创意自由流淌

Xournal:你的数字笔记革命,让创意自由流淌 【免费下载链接】xournalpp Xournal is a handwriting notetaking software with PDF annotation support. Written in C with GTK3, supporting Linux (e.g. Ubuntu, Debian, Arch, SUSE), macOS and Windows …

2026/8/8 11:14:59 阅读更多 →
KMS智能激活终极指南:5分钟免费激活Windows和Office的完整教程

KMS智能激活终极指南:5分钟免费激活Windows和Office的完整教程

KMS智能激活终极指南:5分钟免费激活Windows和Office的完整教程 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗?Office突然变成只读模式让你…

2026/8/8 11:14:58 阅读更多 →
终极跨平台流媒体下载解决方案:N_m3u8DL-RE深度解析与实战指南

终极跨平台流媒体下载解决方案:N_m3u8DL-RE深度解析与实战指南

终极跨平台流媒体下载解决方案:N_m3u8DL-RE深度解析与实战指南 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8…

2026/8/8 11:14:58 阅读更多 →
Deepin Linux下配置富士施乐M115b打印机驱动:CUPS与foo2zjs实战指南

Deepin Linux下配置富士施乐M115b打印机驱动:CUPS与foo2zjs实战指南

1. 项目缘起:当国产Linux遇上老牌打印机最近在把家里的老笔记本换成Deepin Linux,图的就是它界面漂亮、对中文友好,用起来跟Windows差不多顺手。一切都挺顺利,直到我需要打印一份文件,麻烦就来了。我手头这台富士施乐D…

2026/8/8 11:13:58 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/7 23:54:54 阅读更多 →
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/7 17:02:36 阅读更多 →