Áreas de marshalling do CLFS
Um cliente CLFS (Common Log File System) acrescenta registros de log a uma área de marshalling na memória volátil e o CLFS grava periodicamente esses registros no armazenamento estável. Uma área de marshalling é uma coleção de buffers de E/S de log, cada um dos quais pode conter vários registros de log. Os buffers de E/S de log contêm registros que foram gravados recentemente em um fluxo (mas possivelmente não liberados para armazenamento estável), bem como registros que foram lidos recentemente do fluxo.
Você cria uma área de marshaling chamando ClfsCreateMarshallingArea. Nesse momento, você deve especificar o tamanho dos buffers de E/S de log que a área de marshaling usará e se esses buffers estarão no pool paginado ou não paginado. Todos os buffers de E/S de log em uma área de marshalling têm o mesmo tamanho e o CLFS garante que o tamanho seja um múltiplo do tamanho do setor na mídia de armazenamento estável subjacente. Ou seja, o CLFS usa o tamanho solicitado e o arredonda conforme necessário para tornar seus buffers de E/S compatíveis com a mídia de armazenamento estável.
O CLFS aloca e libera buffers de E/S de log conforme necessário, mas você tem a opção de definir o número máximo de buffers de E/S que podem ser alocados ao mesmo tempo. Você também tem a opção de fornecer suas próprias funções de alocação e desalocação de buffer.
Para especificar o número máximo de buffers de E/S de log que podem ser alocados ao mesmo tempo para gravar registros de log, defina o parâmetro cMaxWriteBuffers da função ClfsCreateMarshallingArea . Limitar o número de buffers afeta a frequência de liberações para o armazenamento estável; com menos buffers, os registros de log devem ser gravados no armazenamento estável com mais frequência. Se você não precisar controlar a frequência de liberação, defina cMaxWriteBuffers como INFINITE (definido em Winbase.h).
Para especificar o número máximo de buffers de E/S de log que podem ser alocados ao mesmo tempo para ler registros de log, defina o parâmetro cMaxReadBuffers da função ClfsCreateMarshallingArea . Se você não precisar controlar o número de buffers de leitura alocados, defina cMaxReadBuffers como INFINITE.
Se você quiser fazer sua própria alocação de memória para buffers de E/S de log, defina os parâmetros pfnAllocBuffer e pfnFreeBuffer da função ClfsCreateMarshallingArea para apontar para suas próprias funções de alocação e desalocação. Em seguida, o CLFS chamará suas funções para executar a alocação e a desalocação de memória reais sempre que precisar criar ou liberar buffers de E/S de log.
Em alguns casos, talvez você queira reservar espaço em uma área de marshalling com antecedência. Por exemplo, você pode saber que está prestes a gravar um conjunto de dez registros de log e quer ter certeza de que há espaço suficiente na área de marshaling para todo o conjunto. Para reservar espaço para os dez registros, crie uma matriz de dez elementos que contém os tamanhos dos registros e passe a matriz para a função ClfsReserveAndAppendLog no parâmetro rgcbReservation . ClfsReserveAndAppendLog é uma função de várias finalidades que reserva espaço em uma área de marshalling ou acrescenta registros de log a um fluxo ou faz essas duas coisas atomicamente. Ao definir os parâmetros adequadamente, você pode chamar ClfsReserveAndAppendLog para reservar espaço para uso futuro sem realmente acrescentar nenhum registro ao fluxo.