광고


Copy-on-Write (COW) 시스템



Copy-on-Write를 직역해 보면 "write 할 때 copy 하라" 정도가 되겠다.
즉 쓰기(수정)이 발생하면 복사를 하라라는 것인데, 일반적인 개발자들이
사용하기 보다 시스템 함수 수준에서 제공되거나 OS와 같은 고급 소프트웨어를
구현할 때 내부적으로 적용하는 최적화 기법이다.

이 기법의 기본적인 발상은 특정 자원을 공유하는 복수개의 요청자가 데이터를
참조하는 비율 >>> 수정하는 비율에 착안한 것이다.

예를 들어 어떠한 데이터 테이블을 참조하는 쓰레드가 3개 있다고 가정해보자.
쓰레드 A, B, C는 테이블의 포인터를 가지고 있다.
이 때 쓰레드 C가 테이블의 일부 데이터를 수정하려 하면, 포인터로 참조만 하고 있던
쓰레드 C에게 데이터 테이블을 복사 후 변경하게 하는 것이 COW 이다.

즉, 대개의 공유 상황에서 변경이 이뤄져야 하는 경우 한해서
데이터를 복사하고, 복사된 데이터에 국한적으로 변경이 발생하게 함으로써
최대한 메모리를 절약할 수 있게 된다.

주로 virtual memery 관리나 MMU, calloc() 등 시스템(커널에 관련된) 곳에서
사용되고 있으나 그 외 부분에서도 심심치 않게 COW가 적용된 것을 볼 수 있다.

STL의 string 클래스는 특별히 COW 구현을 지원하도록 구현되어 있다.


덧글

댓글 입력 영역