Áreas de serialización de CLFS
Un cliente de Common Log File System (CLFS) anexa registros a un área de serialización en memoria volátil y CLFS escribe periódicamente esos registros en un almacenamiento estable. Un área de serialización es una colección de búferes de E/S de registro, cada uno de los cuales puede contener varias entradas de registro. Los búferes de E/S de registro contienen registros que se han escrito recientemente en una secuencia (pero posiblemente no se han vaciado en almacenamiento estable), así como registros que se han leído recientemente de la secuencia.
Para crear un área de serialización, llame a ClfsCreateMarshallingArea, en cuyo momento debe especificar el tamaño de los búferes de E/S de registro que usará el área de serialización y si esos búferes estarán en el grupo paginado o no paginado. Todos los búferes de E/S de registro de un área de serialización tienen el mismo tamaño y CLFS garantiza que el tamaño sea un múltiplo del tamaño del sector en el medio de almacenamiento estable subyacente. Es decir, CLFS toma el tamaño solicitado y lo redondea según sea necesario para que los búferes de E/S sean compatibles con el medio de almacenamiento estable.
CLFS asigna y libera los búferes de E/S de registro según sea necesario, pero tiene la opción de establecer el número máximo de búferes de E/S que se pueden asignar a la vez. También tiene la opción de proporcionar sus propias funciones de asignación y desasignación de búferes.
Para especificar el número máximo de búferes de E/S de registro que se pueden asignar al mismo tiempo para escribir registros de registro, establezca el parámetro cMaxWriteBuffers de la función ClfsCreateMarshallingArea . Limitar el número de búferes afecta a la frecuencia de vaciados al almacenamiento estable; con menos búferes, las entradas de registro deben escribirse en un almacenamiento estable con más frecuencia. Si no necesita controlar la frecuencia de vaciado, establezca cMaxWriteBuffers en INFINITE (definido en Winbase.h).
Para especificar el número máximo de búferes de E/S de registro que se pueden asignar al mismo tiempo para leer registros de registro, establezca el parámetro cMaxReadBuffers de la función ClfsCreateMarshallingArea . Si no necesita controlar el número de búferes de lectura asignados, establezca cMaxReadBuffers en INFINITE.
Si desea realizar su propia asignación de memoria para los búferes de E/S de registro, establezca los parámetros pfnAllocBuffer y pfnFreeBuffer de la función ClfsCreateMarshallingArea para que apunte a sus propias funciones de asignación y desasignación. A continuación, CLFS llamará a las funciones para realizar la asignación y desasignación de memoria real siempre que necesite crear o liberar búferes de E/S de registro.
En algunos casos, es posible que desee reservar espacio en un área de serialización con antelación. Por ejemplo, es posible que sepa que está a punto de escribir un conjunto de diez registros de registros y desea asegurarse de que hay suficiente espacio en el área de serialización para todo el conjunto. Para reservar espacio para los diez registros, cree una matriz de diez elementos que contenga los tamaños de los registros y, a continuación, pase la matriz a la función ClfsReserveAndAppendLog en el parámetro rgcbReservation . ClfsReserveAndAppendLog es una función multiuso que reserva espacio en un área de serialización o anexa registros a una secuencia o realiza ambas cosas de forma atómica. Al establecer los parámetros correctamente, puede llamar a ClfsReserveAndAppendLog para reservar espacio para su uso futuro sin anexar realmente ningún registro a la secuencia.