열렬히.뛰기

3. 쓰기 시 복사

운영체제 > part 4 : 메모리 관리 > 공룡책 10장 : 가상 메모리 > 3. 쓰기 시 복사

개요

💡 프로세스의 메모리 공간을 공유하는 기술 중 하나

  • 주로 프로세스 복제 시에 사용되는 메모리 관리 방법 -- 여러 프로세스가 동일한 메모리 페이지를 읽을 때는 공유 -- 쓰기가 필요한 경우에만 실제로 해당 페이지를 복사

  • 그래서 각각의 프로세스가 독립적인 페이지를 가질 수 있도록 함.

왜 필요한가?

  1. fork()를 해서 만든 자식 프로세스가 있다고 치자.
    • 부모와 같은 페이지를 가지고 있다.
  2. 이렇게 만든 주소 공간을 exec()로 바로 써버림
  3. 복사해온 주소 공간은 전부 쓸모 없어져 버림

그래서, 부모의 페이지를 다 복사해오지 않고, 쓰기가 필요한 경우에만 복사본 페이지를 만든다.

다양한 운영체제에서 이러한 방식을 채택하고 있다.

실제 예시

여러 유닉스 변종에서는 vfork()라는 시스템 콜 함수를 지원.

vfork()를 실행하면 쓰기 시 복사 측면에서 fork()와 다르게 동작한다.

  1. 자식 프로세스에게 복제본을 안 만들어 줌
  2. 자식 프로세스는 부모 프로세스의 공간을 그대로 사용한다.
  3. 변경된 페이지가 부모 프로세스에 그대로 보임

그래서, vfork()를 사용할 때는 자식이 부모 페이지에 변경을 가하지 않도록 해야 한다.

이걸 만든 이유도, 자식이 만들어지자 마자 바로 exec()를 하는 경우를 위한 것.

  • shell 구현에도 사용한다.