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 del final del proceso que las creó o las modificó por última vez. [1]

La memoria persistente, que suele confundirse con la memoria de acceso aleatorio no volátil (NVRAM), está más estrechamente vinculada al concepto de persistencia, ya que pone é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 poco confiable utilizado en la computadora que ejecuta el programa).

El acceso eficiente, similar al de la memoria, es la característica definitoria de la memoria persistente. [2] Se puede proporcionar mediante instrucciones de memoria de microprocesador , como cargar y almacenar. También se puede proporcionar mediante API que implementan acciones de acceso directo a memoria remota (RDMA), como lectura RDMA y escritura RDMA. También califican otros métodos de baja latencia que permiten el acceso a los datos en bytes [ aclaración necesaria ] .

Las capacidades de la memoria persistente van más allá de la no volatilidad de los bits almacenados. Por ejemplo, la pérdida de metadatos clave, como las entradas de la tabla de páginas u otras construcciones que traducen direcciones virtuales a direcciones físicas, puede hacer que los bits duraderos no sean persistentes. En este sentido, la memoria persistente se asemeja 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 se puede utilizar para asociar nombres o identificadores con extensiones almacenadas y, como mínimo, proporcionan métodos de sistema de archivos que se pueden utilizar para nombrar y asignar dichas extensiones.

El problema de la lectura de escritura no persistente

El problema de lectura de escritura no persistente se encuentra en programas sin bloqueos 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 los datos modificados puedan ser observados por un observador de fallas en la memoria persistente. Si ocurre 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, una variable de datos que se modifica mediante una operación de comparación e intercambio puede hacerse visible para un observador concurrente antes que para un observador de fallas, lo que causa posibles inconsistencias de fallas.

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 se conserva. Luego, otro nodo se inserta por el productor thread Bdespués de node A, ya que el CAS para node Aya es visible para todos los subprocesos concurrentes. CAS cambia atómicamente el nextpuntero de node Aa para que apunte a node B, y este CAS se conserva. Si ocurre un corte de energía en este punto, la aplicación que usa la lista enlazada quedaría en un estado inconsistente, con ambos node Ay node Bperdidos, ya que el nextpuntero del headnodo a node Ano se ha conservado. Como node Bse ha publicado pero no se puede acceder después de un reinicio, y es posible que se hayan conservado otros datos a los que se accede a través de o que dependen de 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 o escritura no persistente no se limita a las listas enlazadas sin bloqueos, sino que puede encontrarse en cualquier estructura de datos sin bloqueos en la que 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]

Véase 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 fallos, la escalabilidad y el rendimiento en los almacenes de datos en línea", 18.° Simposio internacional de procesamiento paralelo y distribuido, 2004. Actas, Santa Fe, NM, EE. UU., 2004, págs. 206-207. 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 sin bloqueos para memoria no volátil (anuncio breve)". 31.° simposio de la ACM sobre paralelismo en algoritmos y arquitecturas . Association for Computing Machinery. págs. 309–311. doi :10.1145/3323165.3323166. ISBN . 9781450361842. S2CID  195064876 – vía Biblioteca Digital ACM.
  4. ^ Wolczko, Mario (26 de abril de 2019). "Memoria no volátil y Java: Parte 2". Medium .

Enlaces externos