首页 > 其他分享 >关于fork() 及写时拷贝实现

关于fork() 及写时拷贝实现

时间:2022-11-23 15:27:31浏览次数:64  
标签:fork 修改 物理地址 关于 进程 拷贝 页表

“不同的进程访问同样的逻辑地址而对应的物理地址不同,是由于各自页表的不同。
linux系统下每个进程都拥有自己的页表,父进程fork出新的子进程时,子进程拷贝一份父进程的页表,且父子进程将页表状态修改为写保护。当父进程或子进程发生写操作时将会发生缺页异常,缺页异常处理函数将会为子进程分配新的物理地址“

个人理解:每个进程都会有自己的页表(毋庸置疑),父进程fork出新的子进程时,子进程会拷贝一份父进程的页表,且父子进程将页表状态修改为写保护。注:二者页表里的虚拟空间地址是一样的(毕竟是拷贝)

父子进程都不需要对数据进行修改只是查看时:此时虽然各自都有一份页表,但页表中的虚拟地址映射到的是同一块物理地址,也就是说此时二者共享一块物理地址。

如图:

 

如果二者有需要对其中的数据进行修改时:系统要为 需要修改数据的进程 划分一块新的物理地址存储数据,也就是说此时二者可能页表中的虚拟地址相同,但映射到的已经不是同一块物理地址了。因为父子进程的数据应该是独立的,如果进程需要修改数据时没有单独为其分配物理地址就会发生覆盖。

如图(假使子进程需要修改num的值为112):

fork细节:一般来说,在fork之后是父进程先执行还是子进程先执行是不确定的。这取决于内核所使用的调度算法。如果要求父、子进程之间相互同步,则要求某种形式的进程间通信

总结:所以在使用fork在借用cow策略实现时,其实父子进程会共享数据段、代码段、堆,而栈是父子进程独有的.

在了解了以上所说的内容后,可以看一下下面这篇文章更加深入理解:

写时复制技术详解(COW) - 腾讯云开发者社区-腾讯云 (tencent.com)

标签:fork,修改,物理地址,关于,进程,拷贝,页表
From: https://www.cnblogs.com/balabalabubalabala/p/16917179.html

相关文章

  • 随想录(关于培训)
      目前,社会上的培训很多,有技能型的培训、有团队建设的培训,还有一些少儿培训、应试培训和领导力培训。当然,其中最扯的就是成功学培训,当然今天我们不说它。我们谈一谈关于......
  • 关于新手在使用git过程中的基本问题--前端开发篇
    1.首先git是什么?git学名叫做分布式版本控制系统。它能做啥呢?想一想,你在写项目的时候,尤其是大型的协作项目,往往一个项目会经过很多次修改才上线,在这个过程中,你会写项目1.0......
  • 关于若依框架后台数据库中午乱码 MySQL8.0 中文乱码
    --查看字符集编码设置为以下showVARIABLESlike'CHARACTER%'setcharacter_set_results=utf8mb4;character_set_client utf8mb4character_set_connection utf8......
  • 关于Spring注解的基础详解(补充上次并不清楚的内容)
    注解,需要在.xml文件里面加这么一句话:<context:component-scanbase-package=""/>(组件)Component注解主要用于接口的实现类里面,代替掉.xml文件里面的这句话:(主要作用:代替......
  • 关于echars在vue3中的使用
    根文件的配置<!--App.vue--><template><router-view></router-view></template><script>import*asechartsfrom'echarts'import{provide}from......
  • 关于字段设置为not null以及default为“xx”,然后不插入属性报错的问题
    首先看一下字段属性 这里,对“isDelete”字段设置了“notnull”,以及设置了默认值。按照预想,当我们插入null值时,数据库应该会为我们添加为“0”,事实上,系统会报错“‘is......
  • Linux创建进程为什么要用fork做为关键字
    众所周知,Linux创建进程程的时候要调用系统调用fork,fork翻译成中文为“分叉"的意思,真的理解创建进程的过程会发现,fork是很形象的。先看一段Linux创建进程的代码1intma......
  • 关于pathlib的iterdir返回的文件顺序问题
    默认情况下,从python的执行结果来看,iterdir的顺序仿佛是有序的,但是对于一些特殊场景,docker中等可能会出现返回的文件是无序的情况,因此我们需要去进行排序。下面是官网的描......
  • 关于编程学习的七点思索
    关于编程学习的七点思索作者:ChadPerrin翻译:PurpleEndurer,2010-12-22第2版分类:*nix,CodeWriting,编写代码,Databases,数据库,Macros,宏,Programming,编程标签:管理......
  • 黑苹果安装关于引导名词解释
    EFI分区:全称是EFISystemPartition(ESP),是一个使用FAT16或FAT32的系统引导物理分区,支持EFI模式的电脑需要从ESP分区启动系统,EFI固件可从ESP加载EFI启动程序或者应用。目前主......