tmpfs (abreviatura de Temporary File System ) es un paradigma de almacenamiento de archivos temporales implementado en muchos sistemas operativos tipo Unix . Su objetivo es que parezca un sistema de archivos montado , pero los datos se almacenan en una memoria volátil en lugar de en un dispositivo de almacenamiento persistente.
La idea detrás de tmpfs es similar en concepto a un disco RAM , en el sentido de que ambos proporcionan un sistema de archivos almacenado en memoria volátil; sin embargo, las implementaciones son diferentes. Mientras que tmpfs se implementa en la capa del sistema de archivos lógico , un disco RAM se implementa en la capa del sistema de archivos físico . En otras palabras, un disco RAM es un dispositivo de bloque virtual con un sistema de archivos normal ejecutándose sobre él, mientras que tmpfs es un sistema de archivos virtual sin ningún dispositivo de bloque subyacente.
Todo lo que se almacena en tmpfs es temporal en el sentido de que no se crearán archivos directamente en un almacenamiento no volátil, como un disco duro (aunque el espacio de intercambio se utiliza como almacenamiento de respaldo de acuerdo con la política de reemplazo de páginas del sistema operativo). Al reiniciar , se perderá todo lo que se encuentre en tmpfs.
La memoria utilizada por tmpfs crece y se reduce para acomodar los archivos que contiene.
Muchas distribuciones de Unix habilitan y utilizan tmpfs de forma predeterminada para la rama /tmp del sistema de archivos o para la memoria compartida . Esto se puede observar con df como en este ejemplo:
Tamaño del sistema de archivos utilizado Disponibilidad Uso % Montado enarchivo tmpfs256M688K256M1%/tmp
Algunas distribuciones de Linux (por ejemplo, Debian ) no tienen un tmpfs montado en /tmp de manera predeterminada; en este caso, los archivos bajo /tmp se almacenarán en el mismo sistema de archivos que / .
Y en casi todas las distribuciones de Linux, se monta un tmpfs en /run/ o /var/run/ para almacenar archivos temporales de tiempo de ejecución, como archivos PID y sockets de dominio Unix .
Existen varias variantes independientes del concepto tmpfs. Una de las primeras fue desarrollada por Sun Microsystems para SunOS, y otros sistemas operativos como BSD y Linux proporcionaron las suyas propias.
SunOS 4 incluye lo que probablemente sea la implementación más temprana de tmpfs; apareció por primera vez en SunOS 4.0 a fines de 1987, junto con una nueva gestión del espacio de direcciones ortogonales que permitía mapear en memoria cualquier objeto. [1] [2]
El directorio /tmp de Solaris se convirtió en un sistema de archivos tmpfs de manera predeterminada a partir de Solaris 2.1, [3] lanzado en diciembre de 1992. [4] La salida del comando df de Solaris mostrará swap como el almacenamiento en segundo plano para cualquier volumen tmpfs:
#df-k Capacidad disponible utilizada en kbytes del sistema de archivos Montado en intercambio 601592 0 601592 0% /tmp/prueba
El kernel de Linux soporta tmpfs desde la versión 2.4 (4 de enero de 2001). [5] El tmpfs de Linux (antes conocido como shm fs ) [6] se basa en el código ramfs utilizado durante el arranque y también utiliza la caché de páginas , pero, a diferencia de ramfs, admite el intercambio de páginas menos utilizadas para intercambiar espacio, así como el tamaño del sistema de archivos y los límites de inodo para evitar situaciones de falta de memoria (por defecto, la mitad de la RAM física y la mitad del número de páginas de RAM, respectivamente). [7]
4.2BSD introdujo MFS, [8] un sistema de archivos basado en memoria implementado mediante la aplicación del sistema de archivos de disco FFS existente a una región de memoria virtual.
tmpfs, un sistema de archivos de memoria implementado utilizando estructuras de datos en memoria convencionales para mejorar el rendimiento de MFS, se fusionó con el árbol de fuentes oficial de NetBSD el 10 de septiembre de 2005; [9] está disponible en versiones 4.0 y posteriores.
FreeBSD ha portado la implementación de NetBSD, donde está disponible en versiones 7.0 y posteriores. [10]
DragonFly BSD también ha portado la implementación de NetBSD, donde está disponible en 2.5.1 y versiones posteriores.
OpenBSD también adaptó la implementación de tmpfs de NetBSD, iniciada inicialmente por Pedro Martelletto y mejorada por muchos otros. Se habilitó en compilaciones a partir del 17 de diciembre de 2013. [11] La primera versión de OpenBSD con tmpfs incluido fue la 5.5. [12] OpenBSD 6.0 deshabilitó tmpfs debido a la falta de mantenimiento.
En Microsoft Windows , la creación de archivos utilizando el indicador FILE_ATTRIBUTE_TEMPORARY hará que los sistemas de archivos eviten volver a escribir datos en el almacenamiento no volátil si hay suficiente memoria caché disponible. [13]
Debido a las velocidades más altas de la RAM en comparación con el almacenamiento en disco, tmpfs permite que la memoria caché sea mucho más rápida cuando se almacena en una sola, lo que genera un sistema general más eficiente, aunque los sistemas operativos con una memoria caché de páginas obtendrán menos beneficios, ya que las páginas de archivos utilizados recientemente permanecerán en la memoria si hay suficiente memoria libre. Dado que la RAM se borra al reiniciar, tmpfs evita que los sistemas se llenen demasiado sin necesidad de que el usuario elimine manualmente los archivos temporales. Además, almacenar archivos en la RAM evita que los discos se llenen demasiado rápido y extiende la vida útil del almacenamiento basado en flash al reducir la cantidad de escrituras.
En sistemas sin espacio de intercambio , o donde el espacio de intercambio se está agotando, tmpfs puede consumir grandes cantidades de memoria.
Si los archivos de caché se almacenan en tmpfs, los programas perderán sus datos en caché durante los reinicios.