Linux寫時拷貝技術(copy-on-write)


1.傳統的fork()函數
創建一個子進程,子進程和父進程共享正文段,復制數據段,堆,棧到子進程
示意圖如下:

2.Linux的fork()函數-寫時復制(copy-on-write)
創建一個子進程,內核只為子進程創建虛擬空間,不分配物理內存,和父進程共享物理空間,
當父進程中有更改相應段的行為發生時,才為子進程分配物理空間。
示意圖如下:

3.vfork()函數
創建一個子進程,共享父進程的一切。
示意圖如下:

4.傳統fork與copy-on-write區別

傳統的fork函數直接把所有資源復制給新的進程,效率很低下。
寫時拷貝在需要寫入時,數據才會被復制,沒有數據寫入時,fork()的開銷實際只是復制父進程的頁表以及給子進程創建唯一的進程描述符。有數據要寫入前,會將將要改變的數據頁復制給子進程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM