# Gestión de memoria

La gestión de memoria o administración de memoria es el acto de gestionar la memoria de un dispositivo informático. El proceso de asignación de memoria a los programas que la solicitan.
Los sistemas de memoria virtual separan las direcciones de memoria utilizadas por un proceso de las direcciones físicas reales, permitiendo la separación de procesos e incrementando la cantidad efectiva de memoria de acceso aleatorio utilizando la paginación. La calidad de la gestión de la memoria es crucial para las prestaciones del sistema.
El recolector de basura es la asignación y liberación automática de los recursos de memoria para un programa. La implementación suele ser a nivel del lenguaje de programación en contraposición a la gestión manual de memoria, que asigna y libera los recursos de memoria de una computadora de forma explícita.
La administración de memoria se refiere a los distintos métodos y operaciones que se encargan de obtener la máxima utilidad de la memoria, organizando los procesos y programas que se ejecutan de manera tal que se aproveche de la mejor manera posible el espacio disponible.
Para poder lograrlo, la operación principal que realiza es trasladar la información que deberá ser ejecutada por la unidad central de procesamiento o procesador, a la memoria principal. Actualmente esta administración se conoce como memoria virtual, porque no es la memoria física del procesador sino una memoria virtual que la representa. Entre algunas ventajas, esta memoria permite que el sistema cuente con una memoria más extensa teniendo la misma memoria real, por lo que esta se puede utilizar de manera más eficiente. Y por supuesto, que los programas que son utilizados no ocupen lugar innecesario.
Las técnicas que existen para la carga de programas en la memoria son: partición fija, que es la división de la memoria libre en varias partes (de igual o distinto tamaño) y la partición dinámica, que son las particiones de la memoria en tamaños que pueden ser variables, según la cantidad de memoria que necesita cada proceso.
Entre las principales operaciones que desarrolla la administración de memoria se encuentran la reubicación, que consiste en trasladar procesos activos dentro y fuera de la memoria principal para maximizar la utilización del procesador; la protección, mecanismos que protegen los procesos que se ejecutan de interferencias de otros procesos; uso compartido de códigos y datos, con lo que el mecanismo de protección permite que ciertos procesos de un mismo programa que comparten una tarea tengan memoria en común.

## Requisitos

Los sistemas de gestión de memoria de sistemas operativos multitarea normalmente tratan con las siguientes tareas.

### Reasignación

En los sistemas con memoria virtual, los programas durante su ejecución pueden salir por un tiempo de la memoria y luego regresar, de modo que no pueden colocarse en el lugar que ocupaban previamente. Por ello debe ser posible que residan en diferentes partes de la memoria en diferentes momentos. Así, la gestión de memoria en el sistema operativo debe ser capaz de trasladar los programas en memoria y manejar referencias a la memoria y las direcciones en el código del programa para que siempre apunten a la ubicación correcta. La unidad de gestión de memoria virtual también debe hacer frente a la concurrencia.

### Protección

Los procesos no deberían poder referenciar la memoria de otros procesos sin permiso, para evitarlo existe la protección de memoria, que evita que código malicioso o erróneo de un programa interfiera con la operación de otros programas en ejecución.

### Memoria compartida

Aunque la memoria utilizada por diferentes procesos suele estar protegida, algunos procesos puede que sí tengan que compartir información y, para ello, han de acceder la misma sección de memoria. La memoria compartida es una de las técnicas más rápidas para posibilitar la comunicación entre procesos.

### Organización lógica

Los programas a menudo están organizados en módulos, algunos de los cuales pueden ser compartidos por diferentes programas, algunos son de solo-lectura y otros contienen datos que se pueden modificar. Se escriben y se compilan independientemente. La gestión de memoria es responsable de manejar esta organización lógica, que se contrapone al espacio de direcciones físicas lineales. Una forma de lograrlo es mediante la segmentación de memoria.

### Organización física

La memoria suele dividirse en un almacenamiento primario de alta velocidad y uno secundario de menor velocidad. La gestión de memoria del sistema operativo se ocupa de trasladar la información entre estos dos niveles de memoria.

## Gestión de memoria en DOS

Además de la gestión estándar de memoria, la barrera de los 640 KB de MS-DOS y los sistemas compatibles dieron lugar al desarrollo de programas conocidos como gestores de memoria cuando las memorias principales de las PC comenzaron a ser mayores que 640 KB a finales de los años 1980. Estos desplazan porciones del sistema operativo fuera de su localización tradicional para incrementar la cantidad de memoria convencional o semiconvencional disponible para otras aplicaciones. El EMM386, es un ejemplo, fue parte de la instalación estándar de las últimas versiones de DOS, así como el QEMM. Estos permitieron el uso de memoria más allá de la barrera de los 640 KB, donde la memoria solía estar reservada a la memoria de acceso aleatorio, y memorias superiores.

## Notas y referencias

* ↑ La Asignación de memoria es llamada por algunos "alocar" (del inglés allocate que significa "asignar"), pero la palabra tiene otro significado para el Diccionario de la lengua española de la Real Academia Española.

## Bibliografía

* Ciriaco García de Celis (1994). «Capítulo VIII: La gestión de memoria del DOS». El universo digital del IBM PC, AT y PS/2 (4ª edición). Facultad de Ciencias de Valladolid: Grupo Universitario de Informática.
* Wilson, P.R.; Johnstone, M.S.; Neely, M.; Boles, D. (1995). «Dynamic Storage Allocation: A Survey and Critical Review». Memory Management: International Workshop, Iwmm'95, Kinross, Uk, September 27–29, 1995: Proceedings (en inglés) (Springer). ISBN 978-3-540-60368-9. Consultado el 6 de enero de 2008.
* Berger, E.D.; Zorn, B.G.; McKinley, K.S. (2001). «Composing high-performance memory allocators». ACM SIGPLAN Notices (en inglés) 36 (5): 114-124. doi:10.1145/381694.
* Berger, E.D.; Zorn, B.G.; McKinley, K.S. (2002). «Reconsidering custom memory allocation». Proceedings of the 17th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (en inglés). ACM Press New York, NY, USA. pp. 1-12. La referencia utiliza el parámetro obsoleto |coauthors= (ayuda)