컴퓨터의 한정된 자원을 서로 다른 두 개의 프로세스가 공유할 때 유용하게 쓸 수 있다.
프로세스 2개가 있다고 해보자 private object는 공유 객체와 똑같은 방법으로 만들어지고, 두 개의 프로세스가 한 개의 사적 객체를 서로 다른 자신의 가상 메모리 영역으로 매핑하지만 객체의 동일한 사본을 공유하는 경우를 보여줌, area struct는 copy-on-write로 표시됨.
두 프로세스가 모두 자신의 사적 영역에 쓰려고 하지 않는 한, 이들은 물리 메모리에 단 한 개의 객체 사본을 계속 공유한다.
하지만 한 프로세스가 사적 영역 내의 일부 페이지에 쓰려고 하는 순간 쓰기 작업은 보호 오류를 유발한다 이때 오류 핸들러가 보호 예외가 발생한 것을 알고 새로운 물리 페이지에 새로운 사본을 만들고 , 페이지 테이블에도 새로운 사본을 가리키도록 하며 그 후에 이 페이지에 대한 쓰기 허가를 복원한다. Copy on write는 마지막까지 사적 객체 내에서 페이지를 복사하는 것을 지연시켜 물리 메모리를 효율적으로 사용함
싱글 스레드에서는 이 과정이 한 번에 이뤄질 수 없기 때문에 mutex를 사용하여 critical point에서 문제가 생기지 않게 해 준다.
위의 내용을 바탕으로 execve 함수가 어떻게 새로운 프로세스를 자신의 독립된 가상 주소 공간에 만드는지에 대해서 살펴보면 좋을 것 같다.
'컴퓨터 시스템 이야기' 카테고리의 다른 글
Exceptional control flow (0) | 2021.09.22 |
---|---|
네트워크 프로그래밍 (수정중) (0) | 2021.09.17 |
Memory system (0) | 2021.09.15 |
Chapter 1 컴퓨터 시스템으로의 여행(1.8 ~ 끝) (2) | 2021.08.22 |
Chapter 1 컴퓨터 시스템으로의 여행(1.5 캐시가 중요하다~1.7.4 파일) (0) | 2021.08.19 |