CLFS 마샬링 영역
CLFS(Common Log File System) 클라이언트는 휘발성 메모리의 마샬링 영역에 로그 레코드를 추가하고, CLFS는 주기적으로 해당 레코드를 안정적인 스토리지에 씁니다. 마샬링 영역은 각각 여러 로그 레코드를 보유할 수 있는 로그 I/O 버퍼의 컬렉션입니다. 로그 I/O 버퍼에는 최근에 스트림에 기록되었지만 안정적인 스토리지로 플러시되지 않은 레코드와 최근에 스트림에서 읽은 레코드가 저장됩니다.
ClfsCreateMarshallingArea를 호출하여 마샬링 영역을 만듭니다. 이때 마샬링 영역에서 사용할 로그 I/O 버퍼의 크기와 해당 버퍼가 페이징 풀에 있는지 아니면 페이징되지 않은 풀에 있는지를 지정해야 합니다. 마샬링 영역의 모든 로그 I/O 버퍼는 크기가 동일하며 CLFS는 크기가 기본 안정적인 스토리지 매체의 섹터 크기의 배수인지 확인합니다. 즉, CLFS는 요청된 크기를 가져와 I/O 버퍼를 안정적인 스토리지 매체와 호환되도록 필요에 따라 반올림합니다.
CLFS는 필요에 따라 로그 I/O 버퍼를 할당하고 해제하지만 한 번에 할당할 수 있는 최대 I/O 버퍼 수를 설정할 수 있습니다. 또한 사용자 고유의 버퍼 할당 및 할당 취소 함수를 제공할 수도 있습니다.
로그 레코드를 작성하기 위해 한 번에 할당할 수 있는 최대 로그 I/O 버퍼 수를 지정하려면 ClfsCreateMarshallingArea 함수의 cMaxWriteBuffers 매개 변수를 설정합니다. 버퍼 수를 제한하면 안정적인 스토리지에 대한 플러시 빈도에 영향을 줍니다. 버퍼 수가 적으므로 로그 레코드를 안정적인 스토리지에 더 자주 기록해야 합니다. 플러시 빈도를 제어할 필요가 없는 경우 cMaxWriteBuffers 를 INFINITE(Winbase.h에 정의됨)로 설정합니다.
로그 레코드를 읽기 위해 한 번에 할당할 수 있는 최대 로그 I/O 버퍼 수를 지정하려면 ClfsCreateMarshallingArea 함수의 cMaxReadBuffers 매개 변수를 설정합니다. 할당된 읽기 버퍼 수를 제어할 필요가 없는 경우 cMaxReadBuffers 를 INFINITE로 설정합니다.
로그 I/O 버퍼에 대해 고유한 메모리 할당을 수행하려면 ClfsCreateMarshallingArea 함수의 pfnAllocBuffer 및 pfnFreeBuffer 매개 변수를 설정하여 고유한 할당 및 할당 취소 함수를 가리킵니다. 그런 다음, CLFS는 로그 I/O 버퍼를 만들거나 해제해야 할 때마다 함수를 호출하여 실제 메모리 할당 및 할당 취소를 수행합니다.
경우에 따라 미리 마샬링 영역에 공간을 예약할 수 있습니다. 예를 들어 10개의 로그 레코드 집합을 작성하려고 한다는 것을 알고 전체 집합에 대한 마샬링 영역에 충분한 공간이 있는지 확인하려고 할 수 있습니다. 10개의 레코드에 대한 공간을 예약하려면 레코드 크기를 포함하는 10개 요소 배열을 만든 다음, rgcbReservation 매개 변수의 ClfsReserveAndAppendLog 함수에 배열을 전달합니다. ClfsReserveAndAppendLog 는 마샬링 영역에 공간을 예약하거나 스트림에 로그 레코드를 추가하거나 이러한 두 작업을 원자 단위로 수행하는 다목적 함수입니다. 매개 변수를 적절하게 설정하면 ClfsReserveAndAppendLog 를 호출하여 스트림에 레코드를 실제로 추가하지 않고 나중에 사용할 공간을 예약할 수 있습니다.