- Espacio de intercambio
-
Espacio de intercambio
En informática, el espacio de intercambio es una zona del disco (un fichero o partición) que se usa para guardar las imágenes de los procesos que no han de mantenerse en memoria física. A este espacio se le suele llamar swap, del inglés "intercambiar".
Contenido
Descripción
La mayoría de los sistemas operativos modernos poseen un mecanismo llamado memoria virtual, que permite hacer creer a los programas que tienen más memoria que la disponible realmente; por ejemplo, 4 Gb en un ordenador de 32 bits. Como en realidad no se tiene físicamente toda esa memoria, algunos procesos no podrán ser ubicados en la memoria RAM.
En este caso es cuando es útil el espacio de intercambio: el sistema operativo puede buscar un proceso poco activo, y moverlo al área de intercambio (el disco duro) y de esa forma liberar la memoria principal para cargar otros procesos. Mientras no haga falta, el proceso extraído de memoria puede quedarse en el disco, ya que ahí no gasta memoria física. Cuando sea necesario, el sistema vuelve a hacer un intercambio, pasándolo del disco a memoria RAM. Es un proceso lento (comparado con usar sólo la memoria RAM), pero permite dar la impresión de que hay más memoria disponible.
Implementación
En realidad, puede ser que no toda la imagen del proceso se lleve al disco. De esta forma, se mantienen algunas partes en memoria principal, mientras que otras permanecen en el almacenamiento secundario.
Si los algoritmos utilizados en el intercambio de páginas están mal diseñados o hay poca memoria disponible, se puede dar un problema conocido como hiperpaginación, o en inglés thrashing. Los síntomas son un atasco y sobrecarga en el sistema, y la causa es que los procesos continuamente están siendo pasados de memoria física a área de intercambio (porque hace falta memoria para correr otro proceso) y luego otra vez a memoria (porque han de ejecutarse).
Posibles ubicaciones
En los sistemas operativos se puede usar como área de intercambio un fichero o una partición (los dos son en realidad parte de un disco duro o almacenamiento secundario).
Fichero de intercambio
Un fichero en blanco puede prepararse para ser usado como área de intercambio. Esto tiene una gran ventaja:
- es fácil de crear, borrar, ampliar o reducir, según se crea necesario (a diferencia de una partición)
Pero también alguna desventaja:
- le afecta la fragmentación, ya que se encuentra dentro de un sistema de ficheros
El problema de la fragmentación no es grave, ya que el espacio de intercambio no siempre es accedido de forma secuencial, sino directa (en oposición a la secuencial).
Partición de intercambio
También se puede dedicar una partición entera del disco duro (o el disco completo) como área de intercambio. Ventajas:
- se puede conseguir mejor rendimiento si se coloca la partición en la zona más rápida del disco, que es al principio (los cilindros exteriores del disco, por donde pasan más datos a cada vuelta; fuente: [1])
- no hay problemas de fragmentación
- no hay que usar ningún sistema de ficheros en concreto
Tiene pocas desventajas:
- crear una partición es un proceso algo difícil; de todas formas, si se elige bien el tamaño de la partición, no hará falta ningún cambio en el futuro
- la partición siempre ocupará el mismo espacio, aunque no se esté usando al 100%
Otros dispositivos
Las tarjetas de vídeo incluyen una memoria, que en los modelos actuales puede ser de cientos de megabytes; además, es muy rápida, y no se está usando siempre.
Por eso no es extraño que ya se haya intentado usar esta memoria como dispositivo de intercambio (y como almacenamiento genérico). En GNU/Linux se puede hacer esto mediante MTD ("Memory Technology Device"): véase [2] (en inglés) para un tutorial que explica cómo usar la memoria de una tarjeta nVidia.
También se ha hecho con la memoria de una tarjeta de sonido, usando un controlador específico que la convierte en un dispositivo de bloque. Más información en [3] y [4] (de 2000, en inglés).
Uso en sistemas operativos
Cada sistema operativo gestiona la memoria virtual de forma distinta; por tanto el intercambio depende de la implementación de los algoritmos de intercambio.
En Windows
Microsoft Windows usa un fichero de intercambio desde su versión 3.1 (1992), la primera en usar memoria virtual. Lo implementa mediante un fichero situado en el directorio raíz (C:\) o en el de sistema (C:\WINDOWS\), y tiene por nombre:
- 386SPART.PAR en Windows 3.1
- WIN386.SWP en Windows 3.11, 95 y 98
- pagefile.sys en Windows NT y sucesores
Este fichero tiene un tamaño variable (depende de la configuración) y no debe ser movido o borrado.
Configuración
Desde el panel de control "sistema", luego en "opciones avanzadas", rendimiento y luego en la opcion "configuración" se puede configurar el tamaño del fichero de paginación usado por Windows.(windows XP) En Windows 95, la opción está en Panel de control - Sistema - Rendimiento - Memoria virtual.
Hay una opción para establecer un tamaño fijo para el fichero, pero no es recomendable, porque a veces (cuando se acaba la memoria física y un programa necesita más) hace falta aumentar el tamaño del fichero de intercambio, y si no se puede, no habrá memoria extra para los programas. Si los programas (o el propio Windows) no pueden conseguir la memoria que necesitan, probablemente den fallos extraños.
Se puede controlar el tamaño mínimo y el máximo para el fichero. Mientras que aumentar mucho el máximo no hará que funcione mejor, aumentar el mínimo sí que puede ayudar en sistemas que tengan poca memoria RAM.
En GNU/Linux
En GNU/Linux se suele usar con una partición de intercambio, aunque también permite usar ficheros de intercambio.
Se pueden asignar varios dispositivos de intercambio, incluso de diferentes tipos, y asignar a cada uno una prioridad. Si la prioridad es la misma en varios, las páginas de memoria se distribuirán como en un RAID de nivel 0. Esto permite que los dispositivos de swap se usen en paralelo, cosa que puede aumentar la eficacia, sobre todo si están en discos independientes.
Programas
Para crear un área de intercambio, se usa la orden
mkswap nombre
, dondenombre
puede ser un fichero o la ruta a un dispositivo de disco (por ejemplo /dev/hda1). Esto prepara el dispositivo y le pone la cabecera apropiada.Si lo que se está usando es un fichero swap, el contenido puede ser cualquiera (se destruirá), y lo que importa es el tamaño. Pero además,
mkswap
tiene un requisito especial: el fichero no ha de tener agujeros. Quiere decir que los bytes del fichero han de estar realmente en el disco. Esto no pasa siempre: si se usa cp /dev/zero nuevo, el sistema de ficheros probablemente vea que se trata de un fichero disperso (tiene regiones muy grandes todas con nulos), y no lo grabará realmente en el disco. Al usar algo como dd if=/dev/zero of=nuevo bs=1024 count=65536 se le fuerza a que escriba todos los bloques, sin agujeros.El dispositivo de intercambio se activa con la orden
swapon nombre
y se desactiva conswapoff nombre
. En el fichero/proc/swaps
se muestra una lista de los dispositivos de intercambio activos, y en/etc/fstab
se suelen añadir las particiones swap que se activan al inicio del sistema.Con el programa
free
se puede ver, además de cuánta RAM queda libre, el tamaño total de las áreas de intercambio, cuán de llenas están, y cuánta memoria (RAM) se está usando como caché.¿Hace falta swap?
La memoria de intercambio sirve como RAM adicional. Entonces, en un ordenador que ya tenga mucha memoria RAM, ¿hace falta swap?
Aunque puede funcionar bien sin tener ningún área de intercambio, es muy recomendable crearla. La razón es que siempre es bueno quitar de la memoria los procesos poco usados, ya que eso permite usar la RAM para otras tareas, como por ejemplo la memoria caché de las operaciones de entrada/salida, como el acceso al disco.
Un ejemplo: supongamos que un usuario abre en un programa una imagen muy grande, que le consume el 80% de la memoria RAM, y después, sin cerrarla, se pone a hacer varias búsquedas de ficheros por su disco duro. Si no se puede llevar a disco ese proceso grande, quiere decir que ha de mantenerse en memoria física; por tanto, las búsquedas sólo tendrán menos del 20% de la memoria RAM para hacer de caché, y por eso serán poco eficientes. Con swap, se podría llevar a disco el proceso grande (o al menos una parte), hacer esas búsquedas usando toda la RAM como caché, y luego restaurar el proceso, si hace falta.
Hay algunos procesos que, debido a la función que realizan, están poco activos, y puede ser recomendable que estén en el área de intercambio para liberar un poco la memoria RAM. Por ejemplo, un servidor SSH (mecanismo de control remoto del ordenador) tiene que estar siempre activo para atender las posibles peticiones, pero sólo empezará a trabajar de verdad cuando un usuario se conecte.
Véase una discusión más larga (en inglés) sobre si es necesaria o no la swap: Is swap necessary?
Tamaño del espacio de intercambio
Ésta es una discusión típica entre los administradores de sistemas, y una duda común que sale durante la instalación de un sistema Linux (o cualquier UNIX).
Hay una regla muy conocida que dice que "la swap ha de ser el doble de la memoria RAM instalada", pero esto ya no es válido hoy en día. Esta regla funcionaba bien antes, cuando siempre se compraba menos RAM de la que realmente se necesitaba, porque era muy cara. Tener 3 veces más memoria que la física iba bien para la mayoría de usuarios. Pero en un ordenador nuevo que tenga 1 Gb de RAM, no será necesario gastar 2 Gb en una partición de swap, porque probablemente no se usará.
La regla habitual usada para decidir el tamaño del área de intercambio es "pensar en cuánto querrías tener y en cuánto tienes, y poner como swap la diferencia". Por ejemplo, si un usuario necesita abrir ficheros de hasta 700 Mb, pero sólo tiene 256 Mb de RAM, entonces lo que le falta (aprox. 500 Mb) se ha de poner como swap, como mínimo. Más swap puede ir bien, pero no será muy usada.
Si el ordenador ha de soportar mucha carga, la partición ha de ser mínimamente grande; se recomienda algo más de 128 Mb (en [5] hay más ejemplos sobre esto).
Enlaces externos
- [6], [7]: qué es, y creación de ficheros de intercambio en Linux
- Maximizar el intercambio (Gentoo): importancia de la partición de swap
- Guía de Debian: recomendaciones para el particionado, y tamaño de la swap
- Apuntes de teoría: memoria virtual, fallos de página, hiperpaginación
- Configurar Swap: Ajustar el uso de swap para linux
Categoría: Sistemas operativos
Wikimedia foundation. 2010.