通俗的解釋,假定多方須要使用同一個資源時,沒有必要爲每一方都建立該資源的一個完整的副本,反而令多方共享這個資源,當某方須要修改資源的某處時,利用引用計數,把該處複製一個副本,再把跟新的內容寫入該副本中,從而節省建立多個完整副本時帶來的空間和時間上的開銷。html
說白了,就是把一塊數據拷貝出來修改,而後修改完了再覆蓋回去。好處:一、無中間狀態,防止斷電等,二、易於處理併發,三、修改時能夠只複製一部分出來修改,節約內存。linux
在Linux程序中,fork()會產生一個和父進程徹底相同的子進程,但子進程在此後多會exec系統調用,出於效率考慮,linux中引入了「寫時複製「技術,也就是隻有進程空間的各段的內容要發生變化時,纔會將父進程的內容複製一份給子進程。併發
在fork以後exec以前兩個進程用的是相同的物理空間(內存區),子進程的代碼段、數據段、堆棧都是指向父進程的物理空間,也就是說,二者的虛擬空間不一樣,但其對應的物理空間是同一個。當父子進程中有更改相應段的行爲發生時,再爲子進程相應的段分配物理空間,若是不是由於exec,內核會給子進程的數據段、堆棧段分配相應的物理空間(至此二者有各自的進程空間,互不影響),而代碼段繼續共享父進程的物理空間(二者的代碼徹底相同)。而若是是由於exec,因爲二者執行的代碼不一樣,子進程的代碼段也會分配單獨的物理空間。 post
詳細:url
https://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.html.net
https://blog.csdn.net/u012333003/article/details/25117457htm
Copy-on-write在對數據進行修改的時候,不會直接在原來的數據位置上進行操做,而是從新找個位置修改,這樣的好處是一旦系統忽然斷電,重啓以後不須要作Fsck。好處就是能保證數據的完整性,掉電的話容易恢復。blog