꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

시스템 프로그래밍

프로세스 관리 - 프로세스 생성 속도 향상 (copy on write)

gold_dragon 2021. 5. 6. 16:05

리눅스 프로세스는 각각의 프로세스마다 4GB 가상 메모리를 할당합니다. Kernel Space가 3GB~4GB로 잡히며, 이영역에 커널 이미지가 들어갑니다. 0GB~3GB는 User Space영역으로써 사용자 실행 이미지가 들어갑니다. text, data, heap, stack이 User Space 영역에 들어갑니다.

 

커널에 할당된 가상 메모리는 프로세스간 공유가 가능합니다.

 

위 아이디어를 갖고 copy on write에 대해서 알아보겠습니다.

각 프로세스마다 가상 메모리는 4GB입니다. fork() 시스템 콜을 호출하면 4GB를 복사하게 됩니다. 새로운 프로세스 공간을 생성한 후, 기존 프로세스 공간을 복사합니다. 결과적으로 프로세스 생성 시간이 오래걸립니다. 이를 줄이기 위한 방법으로 copy on write가 있습니다.

copy on write

자식 프로세스 생성 시, 읽기만 할 경우 부모 프로세스 페이지를 우선 사용합니다. 업데이트를 할 때에는 이때 페이지를 복사하고 분리합니다.

 

결과적으로 프로세스 생성 시간을 줄일 수 있습니다. 새로 생성된 프로세스에 새롭게 할당되어야 하는 페이지 수도 최소화할 수 있다는 장점이 있습니다.