Copy-on-write

Copy On Write란 말 그대로 작성시 이전의 내용을 Copy한다는 뜻이다. 1)

Linux(Unix)에서는 자식 프로세스(child process)를 생성(fork)하면 같은 메모리 공간을 공유하게 된다. 그런데 부모 프로세스가 데이터를 새로 넣거나, 수정하거나, 지우게 되면 같은 메모리 공간을 공유할 수 없게 된다. 이때 부모 프로세스는 해당 페이지를 복사한 다음 수정한다. 이것을 Copy-on-Write(COW)라고 한다.

만약 자식 프로세스가 없었다면 페이지를 복사하지 않고 바로 수정했을 것이다. 따라서 자식 프로세스가 생성되어 작업을 하는 동안 데이터 입력/수정/삭제가 발생하면 해당 메모리 페이지를 복사해야 되기 때문에 평소보다 더 많은 메모리가 필요해진다. 2)

부모 프로세스가 자식 프로세스를 생성(fork)한 직후 프로세스와 메모리 모습3)

부모 프로세스가 Page C의 데이터를 수정해야 하는 상황이 된다면, 자식 프로세스가 사용 중이므로 직접 변경이 불가능하다. 자식 프로세스가 작업을 끝낼 때까지 기다릴 수도 있지만 작업이 지체되므로, 우선 Page C를 복사(copy)한 다음 수정(write)한다.

이러한 작업은 메모리 혹은 저장공간을 배로 소비하게 된다. 대량으로 발생할 경우 컴퓨터의 자원이 빠르게 소모될 수 있다.

참고 https://en.wikipedia.org/wiki/Copy-on-write

3)
아래 그림은 "Operating System Concepts 9th edition(일명 공룡책)"을 참고했다.

역링크