Copy-on-Write
**Copy-on-Write (COW)**๋ ํ๋ก์ธ์ค ์์ฑ(fork) ์์ ์ ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ธฐ์ ์ ๋๋ค. ์๊ตฌ ํ์ด์ง(Demand Paging)์ด ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐ ๋์์ด ๋๋ฏ์ด, COW๋ ํ์ด์ง ๊ณต์ ๋ฅผ ํตํด ํ๋ก์ธ์ค ์์ฑ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ต์ํํฉ๋๋ค.
๊ธฐ๋ณธ ์๋ฆฌ (Basic Principle)
fork() ํธ์ถ ์: ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ
fork()
์์คํ ํธ์ถ์ ํตํด ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ๋, ๋ถ๋ชจ์ ์์ ํ๋ก์ธ์ค๋ ํ์ด์ง๋ฅผ ๊ณต์ ํฉ๋๋ค.๊ณต์ ํ์ด์ง ์ค์ : ๊ณต์ ๋๋ ํ์ด์ง๋ค์ **๋ณต์ฌ ๋ฐฉ์ง(copy-on-write)**๋ก ํ์๋๋ฉฐ, ํ์ด์ง ํ ์ด๋ธ์์ **์ฝ๊ธฐ ์ ์ฉ(read-only)**์ผ๋ก ์ค์ ๋ฉ๋๋ค.
์ฐ๊ธฐ ๋ฐ์ ์ ๋ณต์ฌ: ๋ถ๋ชจ๋ ์์ ํ๋ก์ธ์ค ์ค ์ด๋ ํ๋๋ผ๋ ๊ณต์ ํ์ด์ง์ ์ฐ๊ธฐ(write)๋ฅผ ์๋ํ๋ฉด, ์ด์์ฒด์ ๋ ํด๋น ํ์ด์ง๋ฅผ ์ํ **์๋ก์ด ๋ณต์ฌ๋ณธ(copy)**์ ๋ง๋ค๊ณ ์ฐ๊ธฐ๋ฅผ ์๋ํ ํ๋ก์ธ์ค์๊ฒ ํ ๋นํฉ๋๋ค. ์ดํ ๋ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ธ ํ์ด์ง๋ฅผ ๊ฐ์ง๋๋ค.
COW์ ์ฅ์
์ค๋ฒํค๋ ๊ฐ์:
fork()
์์ ์ ๋ถ๋ชจ์ ์ฃผ์ ๊ณต๊ฐ ์ ์ฒด๋ฅผ ๋ณต์ฌํ๋ ๋์ , ํ์ด์ง ํ ์ด๋ธ ํญ๋ชฉ(ํ์ด์ง์ ๋ฌผ๋ฆฌ์ ์์น ํฌ์ธํฐ)๋ง ๋ณต์ฌํ๊ณ ํ์ด์ง๋ฅผ ๊ณต์ ํฉ๋๋ค. ์ด๋ก ์ธํด ํ๋ก์ธ์ค ์์ฑ ์๋๊ฐ ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.ํ์ํ ๋ณต์ฌ๋ง ์ํ: ๋๋ถ๋ถ์
fork()
ํธ์ถ ์ดํ ์์ ํ๋ก์ธ์ค๊ฐexec()
๋ฅผ ํธ์ถํ์ฌ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ๋ก๋ํ๊ธฐ ๋๋ฌธ์, ๋ถ๋ชจ์ ๋ชจ๋ ํ์ด์ง๋ฅผ ๋ณต์ฌํ๋ ๊ฒ์ ๋ญ๋น์ ๋๋ค. COW๋ ์ค์ ๋ก ์์ ๋๋ ํ์ด์ง์ ๋ํด์๋ง ๋ณต์ฌ๋ฅผ ์ํํฉ๋๋ค.
์ ๋ก ํ ์จ ๋๋งจ๋ (Zero-fill-on-demand)
COW์ ๊ด๋ จ๋ ์ค์ํ ๊ฐ๋ ์ ๋๋ค.
ํ ๋น ๋ฐฉ์: COW๋ ์๋ก์ด ํ์ด์ง๋ฅผ ํ ๋น๋ฐ์ ๋, ๊ทธ ๋ด์ฉ์ด ๋ชจ๋ 0์ผ๋ก ์ฑ์์ง๋๋ก ํ๋ ์ ๋ก ํ ์จ ๋๋งจ๋(zero-fill-on-demand) ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
๋ชฉ์ : ์๋ก์ด ํ์ด์ง๊ฐ ํ ๋น๋๊ธฐ ์ ์ 0์ผ๋ก ์ฑ์์ ธ์ผ๋ง, ํด๋น ํ์ด์ง๊ฐ ์ด์ ์ ์ฌ์ฉํ๋ ํ๋ก์ธ์ค์ ์ค๋๋ ๋ฐ์ดํฐ๊ฐ ์๋ก์ด ํ๋ก์ธ์ค์๊ฒ ๋ ธ์ถ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๊ตฌํ: ์ ํด(free) ํ๋ ์ ๋ฆฌ์คํธ์์ ํ ๋น๋ ํ์ด์ง๋ ์ฌ์ฉ๋๊ธฐ ์ ์ 0์ผ๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
์ค์ํ ์์ญ์ ์ด๊ธฐํ
์ด์์ฒด์ ๋ ์๋ก์ด ํ์ด์ง๊ฐ ์ค์ํ ์์ญ(swap space)์ ํ ๋น๋ ๋๋ 0์ผ๋ก ์ฑ์์ง๋๋ก ํฉ๋๋ค. ์ด๋ ๋ณด์ ๋ฐ ํ๋ผ์ด๋ฒ์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํ ์กฐ์น์ ๋๋ค.
Last updated