본문 바로가기

컴퓨터 시스템 이야기

copy on write

컴퓨터의 한정된 자원을 서로 다른 두 개의 프로세스가 공유할 때 유용하게 쓸 수 있다.

프로세스 2개가 있다고 해보자 private object는 공유 객체와 똑같은 방법으로 만들어지고, 개의 프로세스가 개의 사적 객체를 서로 다른 자신의 가상 메모리 영역으로 매핑하지만 객체의 동일한 사본을 공유하는 경우를 보여줌,  area struct copy-on-write 표시됨.

프로세스가 모두 자신의 사적 영역에 쓰려고 하지 않는 , 이들은 물리 메모리에 개의 객체 사본을 계속 공유한다.

private 객체의 사본을 만든 모습

하지만 프로세스가 사적 영역 내의 일부 페이지에 쓰려고 하는 순간 쓰기 작업은 보호 오류를 유발한다 이때 오류 핸들러가 보호 예외가 발생한 것을 알고 새로운 물리 페이지에 새로운 사본을 만들고 , 페이지 테이블에도 새로운 사본을 가리키도록 하며 후에 이 페이지에 대한 쓰기 허가를 복원한다. Copy on write는 마지막까지 사적 객체 내에서 페이지를 복사하는 것을 지연시켜 물리 메모리를 효율적으로 사용함

싱글 스레드에서는 이 과정이 한 번에 이뤄질 수 없기 때문에 mutex를 사용하여 critical point에서 문제가 생기지 않게 해 준다. 

위의 내용을 바탕으로 execve 함수가 어떻게 새로운 프로세스를 자신의 독립된 가상 주소 공간에 만드는지에 대해서 살펴보면 좋을 것 같다.