stringtranslate.com

Memoria persistente

En informática , la memoria persistente es cualquier método o aparato para almacenar eficientemente estructuras de datos de modo que se pueda seguir accediendo a ellas mediante instrucciones de memoria o API de memoria incluso después de finalizar el proceso que las creó o modificó por última vez. [1]

A menudo confundida con la memoria de acceso aleatorio no volátil (NVRAM), la memoria persistente está más estrechamente vinculada al concepto de persistencia en su énfasis en el estado del programa que existe fuera de la zona de falla del proceso que lo creó. (Un proceso es un programa en ejecución. La zona de falla de un proceso es ese subconjunto del estado del programa que podría corromperse si el proceso continúa ejecutándose después de incurrir en una falla, por ejemplo, debido a un componente no confiable utilizado en la computadora que ejecuta el programa. .)

El acceso eficiente, similar a la memoria, es la característica definitoria de la memoria persistente. [2] Se puede proporcionar mediante instrucciones de la memoria del microprocesador , como cargar y almacenar. También se puede proporcionar mediante API que implementan acciones de acceso remoto directo a memoria (RDMA), como lectura y escritura de RDMA. Otros métodos de baja latencia que permiten el acceso byte-grain [ se necesita aclaración ] a los datos también califican.

Las capacidades de la memoria persistente se extienden más allá de la no volatilidad de los bits almacenados. Por ejemplo, la pérdida de metadatos clave, como entradas de tablas de páginas u otras construcciones que traducen direcciones virtuales en direcciones físicas, puede hacer que los bits duraderos no sean persistentes. En este sentido, la memoria persistente se parece a formas más abstractas de almacenamiento informático, como los sistemas de archivos . De hecho, casi todas las tecnologías de memoria persistente existentes implementan al menos un sistema de archivos básico que puede usarse para asociar nombres o identificadores con extensiones almacenadas y, como mínimo, proporcionan métodos de sistema de archivos que pueden usarse para nombrar y asignar dichas extensiones.

El problema de la lectura de la escritura no persistente

El problema de lectura de escritura no persistente se encuentra en programas sin bloqueo en memoria persistente. Como las operaciones de comparación e intercambio (CAS) no conservan los valores escritos en la memoria persistente, los datos modificados pueden hacerse visibles mediante el protocolo de coherencia de caché para un observador concurrente antes de que un observador de fallas pueda observar los datos modificados en la memoria persistente. . Si se produce un corte de energía justo después de que la escritura se haga visible pero aún no sea persistente, puede ocurrir el problema de lectura de escritura no persistente, es decir, se puede generar una variable de datos que se modifica mediante una operación de comparación e intercambio. visible para un observador concurrente antes que un observador del accidente, causando posibles inconsistencias en el accidente.

Para ilustrar el problema: para una lista libre de bloqueos enlazada individualmente, un productor puede insertar un nodo thread Adespués del headnodo, el nextpuntero del nodo principal se cambia atómicamente (CAS) para apuntar al nuevo node A, sin embargo, este CAS no es persistió. Luego, el productor inserta otro nodo thread Bdespués node A, ya que CAS node Aya es visible para todos los subprocesos simultáneos. CAS cambia atómicamente el nextpuntero de node Apara que apunte a node By este CAS persiste. Si ocurre un corte de energía en este punto, la aplicación que usa la lista vinculada quedaría en un estado inconsistente, con ambos node Ay node Bse perdería, ya que el nextpuntero del headnodo a node Ano ha persistido. Como node Bse publicó pero no se puede acceder a ellos después de reiniciar, y es posible que se hayan conservado otros datos a los que se accede a través de , o que dependen de él node B, todos los accesos posteriores a dichos datos no serán posibles, lo que provocará la pérdida de datos. [3]

El problema de lectura de escritura no persistente no se limita a las listas enlazadas sin bloqueo, sino que se puede encontrar en cualquier estructura de datos sin bloqueo donde pueda existir una brecha potencial entre la visibilidad concurrente y la visibilidad persistente. Por ejemplo, puede ocurrir un problema similar con los buffers circulares persistentes . [4]

Ver también

Referencias

  1. ^ Satish M. Thatte. 1986. Memoria persistente: una arquitectura de almacenamiento para sistemas de bases de datos orientados a objetos. En Actas del taller internacional de 1986 sobre sistemas de bases de datos orientados a objetos (OODS '86). IEEE Computer Society Press, Los Alamitos, CA, EE. UU., 148-159.
  2. ^ P. Mehra y S. Fineberg, "Persistencia rápida y flexible: la poción mágica para la tolerancia a fallas, la escalabilidad y el rendimiento en los almacenes de datos en línea", 18º Simposio internacional de procesamiento distribuido y paralelo, 2004. Actas, Santa Fe, NM, EE.UU., 2004, págs. 206-. doi: 10.1109/IPDPS.2004.1303232
  3. ^ Wang, William; Diestelhorst, Stephan (17 de junio de 2019). "Atómica persistente para implementar estructuras de datos duraderas y sin bloqueos para memoria no volátil (breve anuncio)". El 31º Simposio ACM sobre paralelismo en algoritmos y arquitecturas . Asociación para Maquinaria de Computación. págs. 309–311. doi :10.1145/3323165.3323166. ISBN 9781450361842. S2CID  195064876 - a través de la biblioteca digital ACM.
  4. ^ Wolczko, Mario (26 de abril de 2019). "Memoria no volátil y Java: parte 2". Medio .

enlaces externos