4.2.29 · HinglishOperating Systems

Copy-on-write

1,838 words8 min readRead in English

4.2.29 · Coding › Operating Systems


Copy-on-write HAI KYA?

OS memory mein copying ki "unit" page hoti hai (typically ). Trigger mechanism ek page fault hai jo read-only mark page par write karne se hota hai.

Yahan milta hai yeh:

  • fork() — child parent ka address space share karta hai jab tak koi write na kare.
  • mmap(... MAP_PRIVATE) — file pages shared rehte hain jab tak write na ho.
  • Filesystems (ZFS, Btrfs) aur VM memory mein snapshots.

YEH EXIST KYUN KARTA HAI? (kaunsi problem solve karta hai)

Do fayde:

  1. Speed: fork() ban jaata hai table setup ke liye, data copy ke liye nahi.
  2. Memory: pages shared (deduplicated) rehte hain jab tak koi write na kare — bahut achha jab kai processes read-only code/data share karte hain.

HOW karta hai yeh kaam, step by step?

Jab ek process duplicate hoti hai (e.g. fork()):

  1. Child ko apne page tables milte hain, lekin har entry same physical frames point karti hai jo parent ke hain.
  2. Saare shared writable pages dono page tables mein read-only mark ho jaate hain, aur internally COW flag ho jaate hain.
  3. OS har physical frame ka reference count track karta hai: kitne mappings usse share kar rahe hain.
  4. Reading? Theek hai — read-only reads allow karta hai. Koi fault nahi, koi copy nahi.
  5. COW page par write karna → CPU page fault raise karta hai (read-only page par write).
  6. Fault handler check karta hai: "Kya yeh COW page hai?" Haan →
    • Ek naya frame allocate karo, purani page ka content usmein copy karo.
    • Writer ka PTE naye frame ki taraf point karo, use writable mark karo, purane frame ka refcount kam karo.
    • Agar purana refcount tak girta hai, toh remaining owner ka page phir se writable banaya ja sakta hai (use COW rakhne ki zarurat nahi).
  7. Faulting instruction dobara execute karo; ab write private copy par hoti hai.
Figure — Copy-on-write

Common mistakes


Recall Feynman: 12 saal ke bacche ko samjhao

Tum aur tumhara dost dono ek hi comic padhna chahte ho. Do comics khareedne ki jagah, tum ek ek share karte ho. Rule yeh hai: koi usmein kuch nahi likha. Jis waqt tum kisi character par moochh banana chahte ho, tum copier par bhaago, sirf woh page copy karo, apni copy par moochh banao, aur shared comic ko apne dost ke liye saaf chod do. Tumne poori comic kabhi copy nahi ki — sirf woh ek page jo change karna tha. Yehi copy-on-write hai: share karo jab tak change na karo, phir sirf changed part copy karo.


Active recall

Copy-on-write kya hai?
Ek technique jisme multiple consumers data ki ek read-only physical copy share karte hain; pehla write sirf affected page ki copy trigger karta hai, jiske baad writer ke paas private copy hoti hai.
OS-level COW mein copying ki unit kya hoti hai?
Ek memory page (typically 4 KB).
COW write ko kaunsa hardware mechanism detect karta hai?
Ek page fault, jo isliye raise hota hai kyunki shared page read-only mark hoti hai.
fork() COW kyun use karta hai?
Pura address space eagerly copy karna bekar hai (aksar turant exec() se phek diya jaata hai); COW shuruaat mein kuch copy nahi karta aur sirf woh pages duplicate karta hai jo actually likhe jaate hain.
Fork ke baad, shared pages read-only kaun mark karta hai — child ya dono?
Dono parent aur child, taaki jo bhi pehle likhe woh copy trigger kare.
COW time cost formula kya hai?
, jahan =pages, =written pages, =table-entry cost, =page-copy cost.
COW eager copying se worse kab hota hai?
Jab lagbhag har page likha jata hai (), kyunki table setup + saari copies + per-page fault overhead pay karna padta hai.
COW mein reference count kya track karta hai?
Kitne mappings abhi ek diye gaye physical frame ko share kar rahe hain.
COW page copy hone ke baad aur refcount 1 hone par kya hota hai?
Remaining owner ka page phir se writable banaya ja sakta hai (ab COW nahi), toh aage ke writes fault nahi karte.
Kya shared pages sirf read karne wali process kabhi copy trigger karti hai?
Nahi — read-only pages par reads allowed hain, toh koi fault aur koi copy nahi hoti.

Connections

  • fork() system call — COW ka primary user.
  • Page tables and PTE flags — read-only / COW bits yahan rehte hain.
  • Page faults — woh trap jo copy trigger karta hai.
  • Virtual memory — COW ek virtual-memory optimization hai.
  • Demand paging — sibling "lazy" technique (access par load vs write par copy).
  • mmap and MAP_PRIVATE — file-backed COW.
  • Reference counting — yeh jaanne ke liye use hota hai ki sharing kab khatam hoti hai.
  • Snapshots in filesystems (ZFS/Btrfs) — block level par COW.

Concept Map

shares

copies unit

delays

triggers

handled by

updates

tracks

used by

avoids

gives

no fault

Copy-on-write

Single physical copy read-only

Page 4KB

Copy only on write

Write attempt

Page fault

Fault handler copies page

Writer PTE to new frame

Per-frame reference count

fork child shares parent space

fork then exec waste

Speed and memory savings

Read access