Copy-On-Write (COW)

prana·2025년 1월 19일

데이터 복사를 지연시키고, 수정이 필요한 시점에만 복사를 발생시킨다.

1. 초기상태

  • 두 개체(프로세스나 데이터 객체 등)는 동일한 데이터를 공유한다.
  • 복사본을 만들지 않고, 동일한 메모리 영역 또는 데이터 블록을 참조한다.
  • 예시: 두 프로세스가 같은 파일을 열거나 같은 메모리 페이지를 참조하는 상태

2. 데이터 수정 시점

  • 수정하려는 시점에만 복사본을 만든다.

  • 하나의 프로세스나 데이터 객체가 데이터를 수정하려 할 때, 해당 데이터를 새로운 메모리 영역에 복사하고, 수정된 데이터를 그 복사본에 적용한다.

  • 원본 데이터는 변경되지 않는다.

    • 원본은 여전히 다른 프로세스나 객체가 참조할 수 있도록 유지된다.
  • 프로세스가 공유 메모리에서 데이터를 수정하려 할 때,
    새로운 메모리 페이지를 할당하고 그 페이지에서 수정이 이루어진다.
    원본 메모리는 그대로 두어 다른 프로세스가 계속 사용할 수 있다.

3. 복사본 사용

  • 수정된 데이터는 이제 복사본에서만 존재하며, 해당 데이터를 수정한 객체는 새로운 데이터를 참조한다.
  • 다른 객체나 프로세스는 여전히 원본 데이터를 참조하고 있다.
    • 즉, 수정이 필요한 객체만 변경된 데이터를 사용한다.

ex) 자식 프로세스가 부모 프로세스의 메모리를 복사하여 사용하고, 자식 프로세스가 그 데이터를 수정한 경우, 자식 프로세스만 수정된 데이터를 사용한다.

4. 변경 없는 상태에서는 복사 없음

  • 데이터가 수정되지 않으면 복사본이 생성되지 않고, 두 객체는 같은 데이터를 계속 참조한다.
  • 복사본이 생성되는 시점은 수정이 필요할 때만 발생

장점

  • 메모리 절약: 데이터가 수정되지 않으면 복사본을 만들지 않는다.
  • 빠른 복사: 실제 데이터 복사는 필요할 때만 이루어진다.
  • 성능 향상: 복사본을 만드는 시점을 지연시키기 때문에, 여러 프로세스가 데이터를 동시에 사용할 때 성능이 향상된다.

COW는 주로 가상화, 파일 시스템(ex: ZFS, Btrfs), 메모리 관리(ex: Linux의 fork()), 데이터베이스 등에서 효율적인 리소스 관리와 성능 최적화를 위해 사용된다.

0개의 댓글