카테고리 없음

Fork 과정 = 부모 프로세스의 주소 공간·자원 등을 거의 그대로 복사한 자식 프로세스를 만드는 것 250523

mezzanineX 2025. 5. 23. 15:55

q1: Fork 과정 = 부모 프로세스의 주소 공간·자원 등을 거의 그대로 복사한 자식 프로세스를 만드는 것

a1:

“Fork” 과정이란 유닉스 계열 운영체제에서 프로세스를 복제하는 시스템 콜(fork())을 호출하여, 부모 프로세스의 주소 공간·자원 등을 거의 그대로 복사한 자식 프로세스를 만드는 것을 말합니다. 스냅샷 생성 도구는 일관된 시점의 데이터를 읽어들이기 위해 다음과 같은 흐름으로 동작합니다:
1. Fork 호출
스냅샷 생성 시점에 운영체제에 fork()를 요청하여 “부모” 프로세스(실제 I/O 처리를 담당하는 프로세스)와 동일한 “자식” 프로세스를 한 번 더 만들어 냅니다.

pid_t pid = fork();
if (pid == 0) {
    // 자식 프로세스: 스냅샷을 생성하는 코드 실행
} else {
    // 부모 프로세스: 기존 작업을 계속 수행
}


2. Copy-on-Write(COW)
실제로는 메모리를 즉시 복제하지 않고, 부모·자식이 같은 물리 페이지를 ‘공유’하다가 어느 한쪽이 해당 페이지를 수정(write)할 때 그제야 페이지를 복제하여 독립적으로 유지합니다.
• 이 원리 덕분에 복제 시점에는 전체 메모리를 통째로 복사하지 않으므로 성능·메모리 측면에서 이점을 얻을 수 있습니다.
• 하지만 공유 중인 페이지가 수정될 때마다 복제본이 생성되므로, 수정(또는 GC 등으로 인한 재배치)이 빈번하면 메모리 사용량이 일시적으로 급증합니다.
3. 스냅샷 처리
자식 프로세스는 자신의 고정된 뷰(view)로 블록 장치나 파일시스템의 메타데이터를 읽어 스냅샷 이미지를 만듭니다. 이 과정이 끝나면 자식 프로세스는 종료되고, 자식이 점유했던 메모리·자원은 운영체제가 회수합니다.



왜 메모리 사용량이 증가하는가?
• 프로세스 복제 시점에 부모·자식 모두 같은 메모리 공간을 점유하는 것처럼 보이기 때문입니다.
• 그 후 Copy-on-Write로 인해, 두 프로세스 중 어느 한쪽이 페이지를 수정할 때마다 물리 메모리가 추가로 할당됩니다.
• 특히 스냅샷 생성 도중에 I/O 버퍼나 내부 캐시가 갱신되면 대량의 페이지 복제가 발생하여 메모리 사용량이 일시적으로 크게 늘어날 수 있습니다.

즉, 스냅샷 툴이 “일관된 시점”을 확보하기 위해 fork를 쓰고, 그 결과로 COW 메커니즘에 따라 메모리가 잠깐 더 필요하게 되는 것입니다.

반응형