Manejo de Memoria

La unidad de manejo de memoria o unidad de gestión de memoria (de sus siglas en inglés: Memory Management Unit) es un dispositivo de Hardware formado por un grupo de circuitos integrados, responsable del manejo de los accesos a la memoria por parte de la Unidad de Procesamiento Central (CPU).

Entre las funciones de este dispositivo se encuentran la traducción de las direcciones virtuales a direcciones físicas (ver Sistema de Memoria Virtual), la protección de la memoria, el control de caché y, en arquitecturas de computadoras más simples (especialmente en sistemas de 8 bits), Bank switching.

La forma más fácil de almacenar el contenido de una variable en memoria en tiempo de ejecución es en memoria estática o permanente a lo largo de toda la ejecución del programa.

Para que un objeto pueda ser almacenado en memoria estática su tamaño (número de bytes necesarios para su almacenamiento) ha de ser conocido en tiempo de compilación, como consecuencia de esta condición no podrán almacenarse en memoria estática:

* Los objetos correspondientes a procedimientos o funciones recursivas, ya que en tiempo de compilación no se sabe el número de variables que serán necesarias.

* Las estructuras dinámicas de datos tales como listas, árboles, etc. ya que el número de elementos que las forman no es conocido hasta que el programa se ejecuta.
El manejo de memoria consiste en:
•    Subdividir la memoria para acomodar varios procesos
•    La memoria necesita ser asignada eficientemente para tener la mayor cantidad de procesos posibles en memoria.
Requisitos para el manejo de memoria
Relocalización
•    el programador no sabe en que parte de la memoria se cargará el programa cuando se ejecute.
•    mientras se ejecuta el programa, puede salir a disco y regresar a memoria principal en una posición diferente
•    las referencias a memoria deben traducirse en el código a la dirección de memoria física.
Protección
•    los procesos no deben poder referenciar posiciones de memoria en otro proceso sin permiso.
•    es imposible checar direcciones en programas ya que el programa podría moverse en memoria deben checarse durante la ejecución.
Compartición
•    permitir que varios procesos acceden la misma porción de memoria mejor.
•    permitir a cada proceso (persona) accesar la misma copia del programa en vez de que tengan su propia copia separada.
Organización lógica
•    los programas están escritos en módulos
•    diferentes grados de protección dados a diferentes módulos (solo lectura, solo ejecución)
•     compartir módulos

En los lenguajes que permiten la existencia de subprogramas, y siempre que todos los objetos de estos subprogramas puedan almacenarse estáticamente se aloja en la memoria estática un registro de activación correspondiente a cada uno de los subprogramas.