개요
💡 프로세스의 메모리 공간을 공유하는 기술 중 하나
주로 프로세스 복제 시에 사용되는 메모리 관리 방법 -- 여러 프로세스가 동일한 메모리 페이지를 읽을 때는 공유 -- 쓰기가 필요한 경우에만 실제로 해당 페이지를 복사
그래서 각각의 프로세스가 독립적인 페이지를 가질 수 있도록 함.
왜 필요한가?
- fork()를 해서 만든 자식 프로세스가 있다고 치자.
- 부모와 같은 페이지를 가지고 있다.
- 이렇게 만든 주소 공간을
exec()로 바로 써버림 - 복사해온 주소 공간은 전부 쓸모 없어져 버림
그래서, 부모의 페이지를 다 복사해오지 않고, 쓰기가 필요한 경우에만 복사본 페이지를 만든다.
다양한 운영체제에서 이러한 방식을 채택하고 있다.
실제 예시
여러 유닉스 변종에서는 vfork()라는 시스템 콜 함수를 지원.
vfork()를 실행하면 쓰기 시 복사 측면에서 fork()와 다르게 동작한다.
- 자식 프로세스에게 복제본을 안 만들어 줌
- 자식 프로세스는 부모 프로세스의 공간을 그대로 사용한다.
- 변경된 페이지가 부모 프로세스에 그대로 보임
그래서, vfork()를 사용할 때는 자식이 부모 페이지에 변경을 가하지 않도록 해야 한다.
이걸 만든 이유도, 자식이 만들어지자 마자 바로 exec()를 하는 경우를 위한 것.
- shell 구현에도 사용한다.