操作系统fork是如何创建进程的(利用操作系统fork子进程拷贝当前内存以及写时复制来做落盘)

做落盘,为了保证时点性,最有效的方法就是在一瞬间把当前的进程的内存复制一份新的,对这份新的内存进行持久化,同时老的内存可以继续接收客户端的命令。这个想法本身思路是对的,但是存在效率和空间占用问题:

  • 复制内存,直接就是占用了两块内存
  • 虽然比复制磁盘快,但是总体还是一个IO操作

那有没有办法可以让这个“内存复制”更快呢?答案是有的,就是利用操作系统fork进程的时候的特性 - “内存一致”来达到

  • fork一个新的进程,会把原来进程的内存空间完全复制一份
  • 进程彼此之间的内存又是隔离的

操作系统fork是如何创建进程的(利用操作系统fork子进程拷贝当前内存以及写时复制来做落盘)(1)

同时Linux还利用了写时复制(Copy on Write)技术,在fork子进程的时候并没有立即对内存进行拷贝,仅仅拷贝了一份映射关系,让他们暂时指向同一个内存空间。而当进程对这块内存空间有写操作时,才会真正复制内存,而且是以为单位。

这样我们就做到了:

  • 利用操作系统fork进程的内存隔离来保证时点性
  • 利用写时复制来保证效率

又因为在持久化过程中,对内存的写操作往往很少,大多数都是不变的,这在使用COW的情况,效率会更加高

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页