운영체제

[OS/운영체제] 가상 메모리 (Virtual Memory) - (2)

4Legs 2020. 11. 14. 22:57

COW (Copy-on-Write)

지금까지는 프로세스가 어떻게 요구 페이징 시스템에서 시작하는지에 대해 알아보았다. 하지만, fork()를 통해 생성되는 프로세스들은 이러한 요구 페이징 과정을 페이지 공유와 유사한 방법을 통해 건너뛸 수 있다. 이를 통해 프로세스의 빠른 생성과 생성된 프로세스에게 할당되어야 하는 새 페이지들의 수를 최소화할 수 있다.

프로세스 1이 페이지 C를 수정하기 전
프로세스 1이 페이지 C를 수정한 후

우리는 앞에서 fork()를 통해 생성된 자식 프로세스는 부모 프로세스의 복사본이라고 했다. 일반적으로 fork()는 부모 프로세스의 주소 공간을 복사해 자식 프로세스를 생성하고, 이는 페이지에 대해서도 동일하다.

하지만 자식 프로세스가 생성된 이후 즉시 exec() 시스템 콜을 발생시키면 이러한 복사 과정은 필요 없는 과정이 된다. 대신 우리는 부모와 자식 프로세스 모두 초기에는 같은 페이지를 공유하도록 허용하는 COW(Copy-on-Write)이라는 기법을 사용할 수 있다.

공유되는 페이지는 Copy-on-Write로 표시되며, 만약 공유되는 페이지에 데이터를 쓴다면 이 때 공유 페이지의 복사본을 생성한다.

vfork() (Virtual memory fork) : Copy-on-Write 방식을 사용하지 않는 fork()이다. 부모 프로세스는 중단되고, 자식 프로세스가 부모 프로세스 주소공간을 사용한다.

 

 

 

 

※ 본 게시글은 『Operating System Concepts』 를 참고하여 작성되었습니다.