Gestión y Organización de la Memoria en Tiempo de Ejecución
Clasificado en Informática
Escrito el en
español con un tamaño de 2,74 KB
Organización de la memoria en tiempo de ejecución
La organización de la memoria depende del tipo de lenguaje (declarativos, imperativos), del compilador y del sistema operativo.
Estructura general de los lenguajes imperativos
Al ejecutar un programa, el cargador del sistema operativo asigna la cantidad de memoria necesaria y carga el código a ejecutar (almacenado en un fichero) en la zona de código.
El sistema operativo debe detectar la posible colisión entre el montón (heap) y la pila (stack). En estos casos, puede abortar el programa o aumentar la cantidad de memoria asignada.
En sistemas con paginación de memoria, el esquema anterior puede estar troceado y disperso entre la memoria real del sistema y la memoria virtual. Toda referencia a una posición de memoria dentro del código debe ser relativa a la posición asignada al proceso por el sistema operativo.
Zona de código
Contiene las instrucciones del programa a ejecutar, escritas en código máquina; es decir, la traducción a código máquina de todos los procedimientos y funciones del programa.
El tamaño del código y su contenido se calculan en tiempo de compilación. El fichero ejecutable contiene todo este código, además de información relativa al tamaño de los diferentes bloques de memoria necesitados. Esta información es utilizada para cargar el programa en memoria para su ejecución. El código se considera un bloque compacto.
Algunos compiladores, por el contrario, fragmentan el código en solapas (overlays) cuando la memoria disponible es menor que el tamaño del programa. Las solapas son secciones de código que se cargan en memoria de manera independiente. El compilador debe decidir cómo agrupar las funciones en solapas de manera que no se realicen demasiadas cargas de código a lo largo de la ejecución.
Memoria estática
El compilador asigna una posición de memoria fija a cada variable que se utilice en el programa. Almacena las constantes y variables globales del programa. La asignación de memoria se realiza en tiempo de compilación de forma consecutiva, teniendo en cuenta el tamaño de la variable a asignar. La dirección asociada a cada variable es constante y relativa al comienzo del segmento de datos (DS).
Compiladores basados exclusivamente en memoria estática:
- No pueden manejar funciones recursivas.
- Cada función tiene asignado un registro de activación que contiene los parámetros, variables locales y variables temporales de la función.
- La memoria estática contiene las variables globales y la secuencia de registros de activación de cada función.