En informática , la memoria persistente es cualquier método o aparato para almacenar eficientemente estructuras de datos de manera que se pueda seguir accediendo a ellas mediante instrucciones de memoria o API de memoria incluso después de que finalice 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, ya que hace hincapié en el estado del programa que existe fuera de la zona de fallo del proceso que lo creó. (Un proceso es un programa en ejecución. La zona de fallo de un proceso es el subconjunto del estado del programa que podría corromperse si el proceso continúa ejecutándose después de sufrir un fallo, por ejemplo, debido a un componente poco fiable del ordenador que ejecuta el programa).
El acceso eficiente, similar al de la memoria, es la característica definitoria de la memoria persistente. [ 2 ] Puede proporcionarse mediante instrucciones de memoria del microprocesador , como cargar y almacenar. También puede proporcionarse mediante API que implementan acciones de acceso directo a memoria remota (RDMA), como lectura RDMA y escritura RDMA. Otros métodos de baja latencia que permiten el acceso a los datos a nivel de byte también cumplen con este requisito.
Las capacidades de la memoria persistente van más allá de la inmutabilidad de los bits almacenados. Por ejemplo, la pérdida de metadatos clave, como las entradas de la tabla de páginas u otras estructuras que traducen direcciones virtuales a direcciones físicas, puede hacer que los bits duraderos dejen de ser 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 lectura de escritura no persistente
El problema de lectura de escritura no persistente se presenta en programas sin bloqueo en memoria persistente. Dado que las operaciones de comparación e intercambio (CAS) no almacenan los valores escritos en memoria persistente, los datos modificados pueden hacerse visibles para un observador concurrente mediante el protocolo de coherencia de caché antes de que un observador de fallos pueda detectarlos en memoria persistente. Si se produce un fallo de alimentación justo después de que la escritura se haga visible, pero aún no persistente, puede ocurrir el problema de lectura de escritura no persistente; es decir, una variable de datos modificada por una operación de comparación e intercambio puede hacerse visible para un observador concurrente antes que para un observador de fallos, lo que puede provocar inconsistencias.
Para ilustrar el problema: en una lista enlazada simple sin bloqueo, un hilo productor A puede insertar un nodo después del nodo cabeza . El puntero siguiente del nodo cabeza se cambia atómicamente (CAS) para apuntar al nuevo nodo A ; sin embargo, este CAS no se persiste. Luego, otro hilo productor B inserta un nodo después del nodo A , ya que el CAS del nodo A ya es visible para todos los hilos concurrentes. El CAS cambia atómicamente el puntero siguiente del nodo A para apuntar al nodo B , y este CAS se persiste. Si se produce un fallo de alimentación en este punto, la aplicación que utiliza la lista enlazada quedaría en un estado inconsistente, con la pérdida de ambos nodos, A y B , ya que el puntero siguiente del nodo cabeza al nodo A no se ha persistido. Dado que el nodo B se ha publicado pero no se puede acceder a él después de un reinicio, y es posible que se hayan persistido otros datos a los que se accede a través del nodo B o que dependen de él , 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 puede encontrarse en cualquier estructura de datos sin bloqueo donde pueda existir una brecha potencial entre la visibilidad concurrente y la persistente. Por ejemplo, un problema similar puede ocurrir con los búferes circulares persistentes . [ 4 ]
Véase también
- NOVA (sistema de archivos) o "memoria no volátil acelerada", un sistema de archivos de código abierto con estructura de registro para memoria persistente direccionable por bytes.
- Datos persistentes , información a la que se accede con poca frecuencia y que no es probable que se modifique.
- Estructuras de datos persistentes : una estructura de datos que siempre conserva su versión anterior cuando se modifica (es decir, es prácticamente inmutable).
- Phantom OS , un sistema operativo persistente
Referencias
- ↑ 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.
- ↑ P. Mehra y S. Fineberg, «Persistencia rápida y flexible: la solución ideal para la tolerancia a fallos, la escalabilidad y el rendimiento en 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-. doi: 10.1109/IPDPS.2004.1303232
- ↑ Wang, William; Diestelhorst, Stephan (17 de junio de 2019). «Persistent Atomics for Implementing Durable Lock-Free Data Structures for Non-Volatile Memory (Breve anuncio)» . 31.º Simposio 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.
- ↑ Wolczko, Mario (26 de abril de 2019). "Memoria no volátil y Java: Parte 2" . Medium .
Enlaces externos
- Programación de memoria persistente , una colección de recursos relacionados con la programación de memoria persistente.
- Contenedores y datos persistentes , LWN.net , 28 de mayo de 2015, por Josh Berkus
- Actualización asíncrona de DRAM (ADR) , SNIA , enero de 2014 (también aplicable a DRAM)
- Twizzler: Un sistema operativo para jerarquías de memoria de próxima generación , Informe técnico UCSC-SSRC-17-01 de la Universidad de California, Santa Cruz , 5 de diciembre de 2017, por Daniel Bittman, Matt Bryson, Yuanjiang Ni, Arjun Govindjee, Isaak Cherdak, Pankaj Mehra, Darrell DE Long y Ethan L. Miller
- Sistemas de archivos informáticos
- Marcos de persistencia