Algunas notas sobre gestión de RAM y multitarea en sistemas operativos

Disclaimer: escribo este post probablemente sin demasiados conocimientos técnicos, dado que todavía no he estudiado formalmente este tema. Todo lo que comentaré se basará únicamente en experiencia y en lecturas varias que he hecho. Si alguno de vosotros tiene alguna corrección ruego que la exponga en los comentarios, pero con el enlace pertinente para poder aprender yo.

Es más que habitual que leamos «mi sistema va lento porque está usando mucha memoria RAM». Desmontemos algunos mitos y puntualicemos: lo dicho antes se aplica sólo si tienes realmente poca RAM. Y pido perdón anticipadamente por el tocho.

De la memoria virtual y su utilidad

Aquellos que alguna vez hayan instalado un sistema Linux habrán visto, en el instalador, algo relativo a una partición SWAP. Ese es el área que este sistema operativo dedica a la memoria virtual. ¿Y qué es la memoria virtual? Un área en la memoria secundaria (disco duro, habitualmente) donde se almacenan las imágenes de los procesos (o partes de ellas) que no caben o que no deben estar en la memoria RAM. Esto implica que si un sistema (entendiendo «sistema» como «ordenador + el software que ejecuta») no dispone de suficiente memoria RAM (real, física o como queramos considerarla), una parte de lo que se supone que iría en ella acabará en la memoria virtual, más lenta que la RAM. Y la operación de mover datos entre memoria RAM y memoria virtual ocupa mucho tiempo.

Hasta aquí vamos bien, imagino. Si el sistema tiene muy poca memoria RAM se produce lo que se llama hiperpaginación: procesos que se transfieren a la memoria virtual porque otro necesita estar en la memoria RAM para ejecutarse, pero que luego vuelven a la memoria RAM porque necesitan ejecutarse, pasando el anterior a la memoria virtual. Así ad infinitum. Aquí la razón por la que sistemas con poca RAM funcionan realmente mal (y una de las razones por las que los sistemas operativos o las aplicaciones tienen requisitos mínimos: para evitar que se sufra demasiado este fenómeno). Windows XP con 128 o 256MB de RAM daba un poco de vergüenza ajena. Windows Vista con 1GB también.

Del consumo de RAM de muchos sistemas operativos

Que levante la mano el que no ha oído o utilizado este argumento alguna vez: «el ordenador va lento, tengo un 80% de la RAM ocupada». MEEEEC. Error. El sistema va lento porque probablemente haya procesos ocupando muchos recursos (CPU, entrada/salida, disco, red) y se esté saturando. No es problema de la RAM: si lo fuera, estaría totalmente llena y produciéndose, precisamente, hiperpaginación (lo que además utiliza mucho tiempo al mover datos entre RAM y memoria secundaria).

Vamos a establecer que utilizamos Windows 7. Abramos el Administrador de Tareas, pestaña «Rendimiento». En el apartado de «Memoria Física» veremos cuatro valores: Total, En caché, Disponible, Libre. Y veremos que «Libre» tendrá siempre un valor muy reducido. Algo llamado «prefetching» hace que, al iniciar el sistema operativo, se carguen también (de manera asíncrona) algunos archivos y programas de uso frecuente en la memoria RAM. Así, cuando queramos iniciarlos, tardarán menos: ya se encuentran en la memoria RAM, ergo no hay que guardarlos allí. También se almacena una caché de los programas recientemente cerrados: si ejecuto, por ejemplo, Word, y lo cierro, la siguiente vez que intente abrirlo tardará menos (siempre que no se haya eliminado esa caché, algo que hace el sistema operativo por su cuenta cuando otro programa necesita RAM).

Todo sistema operativo moderno tiende a utilizar la totalidad de la RAM disponible en el sistema. Cuando el administrador de tareas dice que se consume o que está ocupado, digamos, el 80% de RAM, está diciendo que, en ese momento, de nuestros 4GB de RAM está asignado en memoria física el 80% para uso de programas (que ejecutemos nosotros o que ejecute el sistema operativo). El resto se sigue utilizando para caché y no se contabiliza dentro de ese 80% (de hecho aparece como «Disponible»). Y, si se está utilizando la práctica totalidad de la RAM, el resto pasa a la memoria virtual.

De la multitarea en sistemas operativos

Bien. Tenemos ocupado el 80% de RAM. Vemos que nuestro sistema va lento. Cerramos aplicaciones. Vemos que se ocupa menos RAM (hay verdaderos monstruos que usamos a diario: actualmente estoy ejecutando muchos procesos de Chrome que llegan a alcanzar los 200MB de RAM cada uno) y que nuestro sistema se acelera. Bien. ¿Significa eso que tener poca RAM utilizada hace que nuestro sistema operativo funcione más rápido? Jamás: como ya he dicho, los sistemas operativos tienden a utilizar toda la memoria RAM con la que cuenta el sistema. Cerrar aplicaciones permite que la RAM que utilizan esté disponible para otros procesos, sí, pero no estábamos ocupando toda la memoria RAM, por lo que liberarla no hará que lo que tengamos abierto funcione más rápido (esto ocurre cuando llegamos al 100% y entra en juego la memoria virtual).

Si ocurre esto, básicamente, es porque cerramos aplicaciones que ocupan la CPU, que puede dedicarse más en exclusiva a otras. En ambientes multitarea es algo habitual. De hecho, si el problema fuera la falta de RAM, la lentitud sería por hiperpaginación, y la memoria aparecería utilizada a porcentajes altísimos. Yo tengo ocupada la memoria al 80% actualmente y no estoy utilizando apenas el archivo de paginación (muy pocos errores de página; para más información, leer sobre la paginación de memoria). La mera falta de RAM disponible no es causa de la lentitud.

Aunque hay que tener en cuenta ciertos modos de multitarea como el de Windows Phone 7 o el de Windows 8 (en su modo Modern UI): en esos sistemas solo se ejecuta activamente lo que se ve, y ciertos procesos en segundo plano, pero no todas las aplicaciones. En Windows Phone 7 la CPU ejecuta en casi exclusiva la aplicación que estamos viendo, dedicando un porcentaje mínimo de ciclos a servicios en segundo plano (sincronización de e-mail, actualización de live tiles…). En Android, no obstante, se ejecutan en segundo plano todas las aplicaciones activas, y es cuando el sistema necesita RAM cuando estas aplicaciones se cierran (se ocupa de todo el sistema operativo). El sistema se acelera cuando cerramos aplicaciones, sí, pero no por el mero hecho de liberar RAM (esto es más algo colateral). Se acelera porque estamos cerrando tareas que se estaban ejecutando y que estaban compitiendo por el control de la CPU.

Imagen por materod.