Compartir a través de


Almacenamiento estable clFS

Al escribir un registro en una secuencia del Sistema de archivos de registro común (CLFS), el registro se coloca en un bloque de E/S de registro (en un área de serialización) en memoria volátil. Periódicamente, CLFS vacía los bloques de E/S de registro del área de serialización en almacenamiento estable, como un disco. En el dispositivo de almacenamiento estable, el registro consta de un conjunto de contenedores, cada uno de los cuales es una extensión contigua en el medio físico. Una colección de contenedores que forma el almacenamiento estable de una secuencia se denomina registro o registro físico.

En la ilustración siguiente se muestra un contenedor.

diagrama que ilustra contenedores, bloques y registros.

En la ilustración anterior se muestra un contenedor que contiene tres bloques de E/S de registro. El primer bloque de E/S de registro contiene tres registros, el segundo contiene cinco registros y el tercero contiene dos registros. Como sugiere la ilustración, el principio de cada bloque de E/S de registro siempre se alinea con el principio de un sector en el medio de almacenamiento estable. Tenga en cuenta que los bloques de E/S de registro en el almacenamiento estable varían en tamaño.

CLFS usa un conjunto de tres números para buscar un registro en un registro.

  • El identificador de contenedor identifica el contenedor que contiene el registro.

  • El desplazamiento del bloque proporciona el desplazamiento de bytes, dentro del contenedor, del principio del bloque de E/S de registro que contiene el registro.

  • El número de secuencia de registro identifica el registro dentro del bloque de E/S de registro.

El número de secuencia de registro (LSN) de un registro CLFS contiene realmente esos tres fragmentos de información: identificador de contenedor, desplazamiento de bloque y número de secuencia de registro. Sin embargo, los LSN proporcionados a los clientes de registro contienen identificadores de contenedor lógicos que CLFS deben asignar a identificadores de contenedor físicos antes de acceder a los registros en el almacenamiento estable.

CLFS usa identificadores de contenedor lógicos para proporcionar a los clientes la vista de que los registros se escriben en una secuencia continua de contenedores, cuando, de hecho, se reciclan los contenedores físicos.

Supongamos que un registro tiene tres contenedores y un único cliente escribe registros CLFS en el registro. En el escenario siguiente se muestra cómo se puede reciclar un contenedor.

  1. El cliente escribe suficientes registros para rellenar los tres contenedores.

  2. El cliente establece la base de registro (llamando a ClfsAdvanceLogBase o ClfsWriteRestartArea). en uno de los registros del contenedor 2. Al hacerlo, el cliente dice que ya no necesita los registros del contenedor 1.

  3. El cliente escribe otro registro en el registro y devuelve el LSN del registro recién escrito. El identificador de contenedor lógico de ese LSN es 4. Cuando los registros se vacían en un almacenamiento estable, los registros que ve el cliente en el contenedor lógico 4 irán al contenedor físico 1.

En la ilustración siguiente se muestra el escenario; muestra cómo se asigna la secuencia de cliente de contenedores lógicos a contenedores físicos en el almacenamiento estable.

diagrama que ilustra los contenedores lógicos y físicos.

El identificador de contenedor lógico, el desplazamiento de bloque y el número de secuencia de registro se almacenan en un LSN de forma que los LSN de una secuencia determinada siempre forman una secuencia estrictamente creciente. Es decir, el LSN (con el identificador de contenedor lógico) de un registro escrito en una secuencia siempre es mayor que los LSN de los registros de registro escritos anteriormente en esa misma secuencia. Los LSN, a continuación, sirven de doble propósito: 1) proporcionan a los clientes de una secuencia ordenada una secuencia ordenada de identificadores de registro y 2) proporcionan a CLFS la ubicación de los registros en el almacenamiento estable.

Dado el LSN de un registro, puede extraer el identificador de contenedor lógico, el desplazamiento del bloque y el número de secuencia de registro llamando a las siguientes funciones.

ClfsLsnContainer

ClfsLsnBlockOffset

ClfsLsnRecordSequence

El identificador de contenedor lógico es un número de 32 bits, por lo que hay 2^32 posibles identificadores de contenedor lógicos y están en el intervalo 0x0 a través de 0xFFFFFFFF. Una secuencia puede tener como máximo contenedores lógicos de 2^32.

El desplazamiento de bloque se almacena en 23 bits del LSN, pero ClfsLsnBlockOffset devuelve un número de 32 bits alineado con el tamaño del sector del medio de almacenamiento estable. El desplazamiento del bloque siempre es un múltiplo de 512. Además, el desplazamiento del bloque se alinea con el tamaño del sector del medio de almacenamiento estable. Por ejemplo, si el tamaño del sector es de 1024 bytes, el desplazamiento del bloque será un múltiplo de 1024.

El número de secuencia de registro es un número de 9 bits, por lo que hay 2^9 (512) números de secuencia de registro posibles y están en el intervalo 0x0 a través de 0x1FF. Un bloque de E/S de registro puede tener como máximo 512 registros.