全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详谈Linux写时拷贝技术(copy-on-write)必看篇

COW技术初窥

在linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制”技术,也就是只有进程空间的各段的内容要发生变化时,才将父进程的内容复制一份给子进程。

那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢??

在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,其对应的物理空间是一个。当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间。如果不是因为exec,内核会给子进程的数据段、堆栈段分配相应的物理空间(至此两者都有各自的进程空间,互不影响),而代码段继续共享父进程的物理空间(两者的代码完全相同)。而如果是因为exec,由于两者执行的代码不同,子进程的代码段也会分配单独的物理空间。

在网上看到的还有个细节问题是:fork之后内核会将子进程排在队列的前面,以让子进程先执行,以免父进程执行导致写时复制,而后子进程执行exec系统调用,因无意义的复制而造成效率的下降。

COW详述

现在有一个父进程P1,这是一个主体,那么它是有灵魂也是有身体的。现在在其虚拟地址空间(有相应的数据结构表示)上有:正文段,数据段,堆,栈这四个部分,相应地,内核要为这四个部分分配给自的物理块。即正文段块、数据段块、堆块、栈块。至于如何分配,这是内核去做的事,在此不详述。

1. 现在P1用fork()函数为进程创建一个子进程P2

内核:

(1) 复制P1的正文段,数据段,堆,栈这四个部分,注意是其内容相同。

(2) 为这四个部分分配物理块,P2的:正文段(为P1的正文段的物理块,其实就是不为P2分配正文段块,让P2的正文段指向P1的正文段块),数据段(P2自己的数据段块,为其分配对应的块),堆(P2自己的堆块),栈(P2自己的栈块)。如下图所示,同左到右大的方向箭头表示复制内容:

 2. 写时复制技术

写时复制技术:内核只为新生成的子进程创建虚拟空间结构,它们复制于父进程的虚拟空间结构,但是不为这些段分配物理内存,它们共享父进程的物理空间,当父子进程中有更改相应的段的行为发生时,再为子进程相应的段分配物理空间。

3. vfork

vfork的做法更加简单粗暴,内核连子进程的虚拟地址空间也不创建了,直接共享了父进程的虚拟空间,当然了,这种做法就顺水推舟的共享了父进程的物理空间

总结

传统的fork()系统调用直接把所有的资源复制给新创建的进程。这种实现过于简单并且效率低下,因为它拷贝的数据也许并不共享,更糟的情况是,如果新进程打算立即执行一个新的映像,那么所有的拷贝将是无用功。

Linux的fork()使用写时拷贝(copy-on-write)页实现。写时拷贝是一种可以推迟甚至免除拷贝数据的技术。内核此时并不复制整个地址空间,而是让父进程和子进程共享一个拷贝。只有在需要写入的时候,数据才会复制,从而使各个进程拥有各自的拷贝。也就是说,资源的复制只有在需要写入的时候才进行,在此之前,只是以只读方式共享。这种技术使地址空间的页的拷贝被推迟到实际发生写入的时候。

在页根本不会被写入的情况下,举例来说,fork()之后立即调用exec(),它们就无需复制了,fork()的实际开销就是复制父进程的页表以及给子进程创建唯一的进程描述符。在一般情况下,进程创建后都会马上运行一个可执行的文件,这种优化可以避免拷贝大量根本不会使用的数据(地址空间常常包含数十兆的数据)。由于Unix强调进程快速执行的能力,所以这个优化是很重要的,注:Linux COW和exec没有必然联系

以上这篇详谈Linux写时拷贝技术(copy-on-write)必看篇就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# 写时拷贝(copy-on-write)  # linux采用scp命令拷贝文件到本地  # 拷贝本地文件到远程服务器的方法  # Linux使用scp命令进行文件远程拷贝详解  # Linux中拷贝 cp命令中拷贝所有的写法详解  # Virtualbox主机和虚拟机之间文件夹共享及双向拷贝(Windows<->Windo  # Windows<->Linux)  # linux拷贝命令之高级拷贝scp命令详解  # linux使用scp命令备份文件 scp拷贝文件  # 使用scp获取远程linux服务器上的文件 linux远程拷贝文件  # linux下如何实现快速拷贝大文件  # 自己的  # 是有  # 在此  # 中有  # 给大家  # 这四个  # 不为  # 完全相同  # 再为  # 的是  # 都是  # 是一个  # 这是  # 也就是说  # 也不  # 都有  # 是一种  # 是因为  # 也会  # 有个 


相关文章: 建站之星代理如何优化在线客服效率?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  建站之星图片链接生成指南:自助建站与智能设计教程  网站制作的步骤包括,正确网址格式怎么写?  北京企业网站设计制作公司,北京铁路集团官方网站?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何配置IIS站点权限与局域网访问?  网站制作网站,深圳做网站哪家比较好?  如何撰写建站申请书?关键要点有哪些?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  智能起名网站制作软件有哪些,制作logo的软件?  c# 在ASP.NET Core中管理和取消后台任务  如何在局域网内绑定自建网站域名?  如何通过宝塔面板实现本地网站访问?  如何通过IIS搭建网站并配置访问权限?  测试制作网站有哪些,测试性取向的权威测试或者网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  ppt制作免费网站有哪些,ppt模板免费下载网站?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  建站主机是否等同于虚拟主机?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  h5网站制作工具有哪些,h5页面制作工具有哪些?  图册素材网站设计制作软件,图册的导出方式有几种?  如何通过老薛主机一键快速建站?  香港服务器租用费用高吗?如何避免常见误区?  建站上传速度慢?如何优化加速网站加载效率?  北京专业网站制作设计师招聘,北京白云观官方网站?  如何注册花生壳免费域名并搭建个人网站?  制作公司内部网站有哪些,内网如何建网站?  内网网站制作软件,内网的网站如何发布到外网?  如何彻底卸载建站之星软件?  如何选择靠谱的建站公司加盟品牌?  已有域名如何免费搭建网站?  如何在IIS中配置站点IP、端口及主机头?  5种Android数据存储方式汇总  seo网站制作优化,网站SEO优化步骤有哪些?  如何选择高效便捷的WAP商城建站系统?  实例解析Array和String方法  建站之星北京办公室:智能建站系统与小程序生成方案解析  山东网站制作公司有哪些,山东大源集团官网?  如何批量查询域名的建站时间记录?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  如何在建站主机中优化服务器配置?  如何快速搭建高效简练网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。