资讯
论坛
词条
众包
招聘
商城
下载
问答
博客
工程师家园
帮助
搜索
登录
立即注册
一牛网论坛
一流研发工程师学习交流分享电子技术的论坛!
工作时间
周一到周五 9:00-11:30 13:30-19:30
热线电话
19168984579
论坛客服
QQ:
2064607811
微信:
19168984579
商城客服
QQ:
1911822682
微信:
18924675756
手机|智能终端
MTK/联发科
高通平台
紫光展锐
瑞芯微RK
全志平台
SigmaStar/Mstar
海思平台
匠芯创
联咏科技
珠海海奇
国科微
翱捷ASR平台
其它平台
维修论坛
通讯|射频技术
射频技术
5G技术
天线技术论坛
红外技术论坛
美格智能
移远通信
鼎桥通信
瑞识科技
射频IC库
卫星通讯&定位
蓝牙
wifi
NB-IoT
通讯技术
微波&雷达技术
NFC
USB技术论坛
RFID
ZigBee
Lora
433
对讲技术
有线通讯与控制
通讯协议
开元通讯
激光
嵌入式
鸿蒙OS论坛
Freescale论坛
xmos
开阳半导体
基合半导体
平头哥半导体
富士康半导体
紫光同创
暖芯迦
Marvell
树莓派
翼辉OS论坛
UCOS技术论坛
VxWorks论坛
君正论坛
瑞昱论坛
亿智论坛
齐感论坛
Amlogic论坛
龙芯论坛
FlyThings
炬芯论坛
nxp论坛
乐鑫论坛
OpenWRT
arm开发
linux
keil技术论坛
FPGA
DSP
LVGL
PLC
Python
乐升半导体
其他
单片机
ST技术论坛
IC设计
兆易创新/GD单片机
PWM技术论坛
Arduino技术论坛
伟诠电子
国民技术
芯科|silicon labs
英飞凌|Infineon
51单片机
新唐单片机
TI技术论坛
赛元微单片机
单片机C语言
ATMEL单片机
西门子单片机
华大单片机
Intel单片机
Freescale单片机
Thomson单片机
ADI单片机
Microchip单片机
武汉新芯
瑞盟
单片机基础
航顺单片机
CPLD
灵动微单片机
美信技术论坛
人工智能AI论坛
自动驾驶
元宇宙
神经网络
NLP
机器学习
算法
智能机器人
AR/VR
NVIDIA|英伟达
版块导航
forumnav
论坛
一牛网电子研发工程师交流论坛
芯片词条
MTK/高通/海思/瑞芯微/全志/展讯/射频/蓝牙/单片机/WIFI/电源/晶晨/瑞昱等系列芯片
开发板/模块
MTK/海思/全志/瑞芯微/蓝牙/高通等系列开发板/核心板
摄像头
摄像头模块
问答
整合一牛网论坛所有电子工程师开发问题
直播预告
屏/TP
原厂合作入口
机械防抖摄像头
18-30倍可变焦模组
5G相关方案定制
T31/T40方案定制
全志方案定制
展讯4G/5G方案定制
Ai硬件方案
PD超级快充方案
MTK4G/5G方案
wifi/cpe相关方案
RK相关方案
摄像头和测温模块
FPGA高清视频方案
高通方案
显示屏方案
AMLOGIC相关方案
高精度定位模组
联咏相关方案
一牛网
»
论坛
›
嵌入式
›
linux
›
Linux写时拷贝技术(copy-on-write)
查看:
1108
|
回复:
0
[linux技术资料]
Linux写时拷贝技术(copy-on-write)
miaossaiche
当前离线
积分
30
miaossaiche
已绑定手机
发表于 2019-5-11 20:56:51
|
显示全部楼层
|
阅读模式
来自
香港
技术初窥:在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。
那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢?
在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,但其对应的物理空间是同一个。当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间,如果不是因为exec,内核会给子进程的数据段、堆栈段分配相应的物理空间(至此两者有各自的进程空间,互不影响),而代码段继续共享父进程的物理空间(两者的代码完全相同)。
而如果是因为exec,由于两者执行的代码不同,子进程的代码段也会分配单独的物理空间。在网上看到还有个细节问题就是,fork之后内核会通过将子进程放在队列的前面,以让子进程先执行,以免父进程执行导致写时复制,而后子进程执行exec系统调用,因无意义的复制而造成效率的下降。
COW详述:现在有一个父进程P1,这是一个主体,那么它是有灵魂也就身体的。现在在其虚拟地址空间(有相应的数据结构表示)上有:正文段,数据段,堆,栈这四个部分,相应的,内核要为这四个部分分配各自的物理块。即:正文段块,数据段块,堆块,栈块。至于如何分配,这是内核去做的事,在此不详述。
1. 现在P1用fork()函数为进程创建一个子进程P2,内核:
(1)复制P1的正文段,数据段,堆,栈这四个部分,注意是其内容相同。
(2)为这四个部分分配物理块,P2的:正文段->PI的正文段的物理块,其实就是不为P2分配正文段块,让P2的正文段指向P1的正文段块,数据段->P2自己的数据段块(为其分配对应的块),堆->P2自己的堆块,栈->P2自己的栈块。如下图所示:同左到右大的方向箭头表示复制内容。
2. 写时复制技术:内核只为新生成的子进程创建虚拟空间结构,它们来复制于父进程的虚拟究竟结构,但是不为这些段分配物理内存,它们共享父进程的物理空间,当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间。
3. vfork():这个做法更加火爆,内核连子进程的虚拟地址空间结构也不创建了,直接共享了父进程的虚拟空间,当然了,这种做法就顺水推舟的共享了父进程的物理空间通过以上的分析,相信大家对进程有个深入的认识,它是怎么一层层体现出自己来的,进程是一个主体,那么它就有灵魂与身体,系统必须为实现它创建相应的实体, 灵魂实体与物理实体。这两者在系统中都有相应的数据结构表示,物理实体更是体现了它的物理意义。以下援引LKD传统的fork()系统调用直接把所有的资源复制给新创建的进程。
这种实现过于简单并且效率低下,因为它拷贝的数据也许并不共享,更糟的情况是,如果新进程打算立即执行一个新的映像,那么所有的拷贝都将前功尽弃。Linux的fork()使用写时拷贝(copy-on-write)页实现。写时拷贝是一种可以推迟甚至免除拷贝数据的技术。内核此时并不复制整个进程地址空间,而是让父进程和子进程共享同一个拷贝。只有在需要写入的时候,数据才会被复制,从而使各个进程拥有各自的拷贝。
也就是说,资源的复制只有在需要写入的时候才进行,在此之前,只是以只读方式共享。这种技术使地址空间上的页的拷贝被推迟到实际发生写入的时候。在页根本不会被写入的情况下—举例来说,fork()后立即调用exec()—它们就无需复制了。fork()的实际开销就是复制父进程的页表以及给子进程创建惟一的进程描述符。在一般情况下,进程创建后都会马上运行一个可执行的文件,这种优化可以避免拷贝大量根本就不会被使用的数据(地址空间里常常包含数十兆的数据)。由于Unix强调进程快速执行的能力,所以这个优化是很重要的。这里补充一点:Linux COW与exec没有必然联系PS:实际上COW技术不仅仅在Linux进程上有应用,其他例如C++的String在有的IDE环境下也支持COW技术,即例如:string str1 = "hello world";
string str2 = str1;
之后执行代码:str1[1]='q';
str2[1]='w';
在开始的两个语句后,str1和str2存放数据的地址是一样的,而在修改内容后,str1的地址发生了变化,而str2的地址还是原来的,这就是C++中的COW技术的应用,不过VS2005似乎已经不支持COW。
技术词条:
Linux
点击查看更多芯片型号
相关帖子
•
Linux设备驱动程序(第三版)
•
linux驱动开发入门与实践 (郑强)--完整版
•
Mtk Ft5206 touch 驱动
•
Spreadtrum_Linux_Android入门
•
展讯智能开发笔记分享:Ubuntu系统安装注意几个地方
•
展讯智能开发笔记分享:Android:为什么new不会删除out?
•
展讯智能开发笔记分享:Ubuntu内存命令
•
展讯智能开发笔记分享:编译系统详细说明
•
展讯智能开发笔记分享:Linux系统文件权限的详解说明
•
展讯智能开发笔记分享:虚拟机上Ubuntu系统的ADB连接
回复
举报
返回列表
发布新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
使用Markdown编辑器编辑
使用富文本编辑器编辑
回帖后跳转到最后一页
关于我们
关于我们
加入我们
新闻动态
联系我们
服务支持
官方商城
隐私声明
常见问题
论坛总则
合作/建议
TEL: 19168984579
工作时间:
周一到周五 9:00-11:30 13:30-19:30
扫一扫关注公众号
扫一扫打开小程序
Copyright © 2013-2024
一牛网
版权所有
All Rights Reserved.
帮助中心
|
隐私声明
|
联系我们
|
手机版
|
粤ICP备13053961号
|
营业执照
|
EDI证
发布新帖
我的帖子
110520000元
项目累计金额
3911个
对接项目数量
接项目
发需求
最新回复
oppo硬改+驱动生成器+视频教程资料分享
oppo硬改+驱动+生成器+教程,高通工具下载
RockChip camera驱动参考手册,瑞芯微芯片资料
XS5018A(ISP)+cmos,模拟高清摄像头经典方案分
联咏NT98562/NT98566 SDK工具包下载
国科微GK6780V300高性能8K120 超高清多媒体SOC Datasheet
最新热帖
MTK/联发科MT6877(天玑900)MTK5G芯片规格书/datasheet
QXDM 4 破解版下载
RK3588S数据手册Datasheet、Tablet Demo原理图&PCB
紫光展锐Simba_R8.22.2953工具下载
Rockchip RK3588 TRM资料, Rock5B和官方Toybrick-RK3588x原理图
UNISOC UDX710 1.35GHz Cortex-A55内核嵌入式5G通信处理器datasheet
热门博客
更多
DAC8228FPZ
DAC8222 双通道12位双缓冲乘法CMOS D/A转换器
DAC8426AR/883C 特性
QPA2640T 20-40 GHz 8瓦GaN放大器
QPB0220N 2-18 GHz宽带GaN SSPA 中文资料规格书PDF数据手册引脚图图片价格参数功能特
KMFN60012M-B21规格书
登录
注册
手机|智能终端
(6)
MTK/联发科
(1)
MTK硬件
MTK软件
MTK工具
高通平台
高通硬件
高通软件
高通工具
紫光展锐
RDA平台
硬件资料
软件资料
工具下载
瑞芯微RK
(2)
全志平台
(1)
全志A系列
全志D系列
全志B系列
全志F系列
全志H系列
全志R系列
全志V系列
全志T系列
全志VR系列
全志工具
全志X系列
SigmaStar/Mstar
海思平台
匠芯创
联咏科技
SoC
显示驱动
珠海海奇
国科微
翱捷ASR平台
其它平台
其它平台软件
其它平台硬件
维修论坛
(2)
手机刷机包
苹果APPLE
三星SAMSUNG
其他品牌
维修经验交流
通讯|射频技术
(0)
射频技术
5G技术
5G技术分享
5G应用/产品
5G规划/政策
天线技术论坛
红外技术论坛
美格智能
移远通信
鼎桥通信
瑞识科技
射频IC库
卫星通讯&定位
蓝牙
NORDIC技术论坛
上海博通
盛芯微
恒玄科技
汇顶科技|GOODIX
其他
富芮坤|FREQCHIP
伦茨科技
wifi
NB-IoT
通讯技术
微波&雷达技术
NFC
USB技术论坛
RFID
ZigBee
Lora
433
对讲技术
有线通讯与控制
通讯协议
开元通讯
激光
嵌入式
(0)
鸿蒙OS论坛
Freescale论坛
xmos
开阳半导体
基合半导体
平头哥半导体
富士康半导体
紫光同创
暖芯迦
Marvell
树莓派
翼辉OS论坛
UCOS技术论坛
VxWorks论坛
君正论坛
瑞昱论坛
亿智论坛
齐感论坛
Amlogic论坛
龙芯论坛
FlyThings
炬芯论坛
nxp论坛
乐鑫论坛
OpenWRT
arm开发
linux
keil技术论坛
FPGA
DSP
LVGL
PLC
Python
乐升半导体
其他
单片机
(0)
ST技术论坛
意法半导体STM
意法半导体STL
ST意法半导体
IC设计
兆易创新/GD单片机
PWM技术论坛
Arduino技术论坛
伟诠电子
国民技术
芯科|silicon labs
英飞凌|Infineon
51单片机
新唐单片机
TI技术论坛
赛元微单片机
单片机C语言
ATMEL单片机
ATmega8系列
ATmega16系列
AVR系列
AT系列
西门子单片机
华大单片机
Intel单片机
Freescale单片机
Thomson单片机
ADI单片机
Microchip单片机
武汉新芯
瑞盟
单片机基础
航顺单片机
CPLD
灵动微单片机
美信技术论坛
人工智能AI论坛
(0)
自动驾驶
元宇宙
神经网络
NLP
机器学习
算法
智能机器人
AR/VR
NVIDIA|英伟达
显示屏|触摸屏
(1)
Quanta|广达
SVA|上广电
BOE|京东方
AUO|友达光电
SAMSUNG|三星电子
CMO|奇美电子
gooddisplay|大连佳显
newvision|新相微电子
analogix|硅谷数模
sharp|夏普
lnnoLux|群创光电
天马
Eink|元太科技
GOODiX|汇顶科技
Sitronix|矽创电子
ILItek|奕力科技
LG
Atmel
永嘉微电
HOLTEK|合泰
视涯技术
格科微
SOLOMON SYSTECH
RENESAS|瑞萨
Himax|奇景光电
FocalTech|敦泰
JDI
旭曜科技
墨水屏
龙讯
联阳
Capstone|瑞奇达
Algoltek安格
显示控制
段码|点阵
其他
(1)
物联网应用
(0)
医疗电子
智能家居
无人机专区
智能产品
智能车专区
智能硬件
智能软件
工业设计
其他
Camera|视频技术
(0)
Camera摄像头
镁光Camera
扫描头
视频技术
格科微Camera
OV Camera
Sony Camera
安森美Camera
东芝Camera
原相Camera
三星Camera
思比科Camera
DB/东部Camera
SET Camera
富瀚微Camera
思特威Camera
鸿图微Camera
晶相 Camera
BYD/比亚迪Camera
美信Camera
现代Camera
松翰Camera
奇景Camera
NEXTCHIP
传感器论坛
(0)
光敏传感器
气敏传感器
力敏传感器
热敏传感器
磁敏传感器
湿敏传感器
声敏传感器
距离传感器
图像传感器
其他传感器
电源|电池|充电技术
(0)
芯达茂微电子
力芯微
恒率科技
智芯微电子
森利威尔
POE技术
开关电源技术
BMS
电池技术
充电技术
LDO DC-DC
电平转换IC库
移动电源技术
其他电源技术
元器件|物料库
(0)
Memory|存储芯片
连接器/接插件
长江连接器
其他
二/三极管
集成电路(IC)
加密&解密ic
LED二极管
晶体&振荡器
晶体管
其他元器件
其它规格书
阻容感库
TOMIISHI
电阻/电感
LED驱动IC
音频IC
安耐科
宏晶微
台湾鑫创
汇顶
上海智浦欣
顺芯
胜翼
瑞盟
普瑞
AKM|旭化成微
艾为电子
欧胜微
YAMAHA|雅马哈
耐福
凌云科技
音频IC库
移动应用开发
(0)
Android应用开发
Android源码
Android资料
开源&组件&框架
Android视频教程
android开发
Framework
IOS开发交流
iOS经验问答
iOS视频教程
iOS资料下载
Swift开发
php论坛
Java
保护器件
(0)
雷卯电子
电路保护器件
仪器|仪表|实验设备
(0)
安捷伦
安立/Anritsu
横河
TEK/泰克
星河亮点
罗德与施瓦茨
是德
advantest/爱德万
福禄克/Fluke
柯卡美能达
艾法斯
中承科技
其他品牌
PCB论坛
(0)
EDA软件与应用
PADS|Powerpcb
Allegro|OrCAD
Mentor|其它EDA
Altium|Protel
genesis|cam论坛
EDA软件下载
DFx经验交流
3D PCB
专业评审
学员专区
PCB技术资源区
原理图|SCH
PCB作品文件
Layout设计指南
EDA技术论坛
参考设计
制作工艺
PCB生产工艺
FPC专区
SMT专区
绿色无铅
夹具模具
生产设备
基础知识
(0)
硬件基础知识
软件基础知识
区块链技术
EMI|EMC|仿真
ESD
EMI
EMC
EMI器件库
活动与公告
(0)
公告专区
活动专区
灌水专区
一牛开源
(0)
新移开源
悬赏互助
—
—
—
展
开
版
块
导
航
在本版发帖
搜索
扫一扫添加微信客服
QQ客服
返回顶部
快速回复
返回顶部
返回列表