Administración de La Memoria
Administración de La Memoria
memoria
Administración de la memoria
• Funciones y operaciones
• El único espacio de almacenamiento que el procesador puede utilizar
directamente, más allá de los registros (que si bien le son internos y
sumamente rápidos, son de capacidad demasiado limitada) es la memoria
física. Todas las arquitecturas de procesador tienen instrucciones para
interactuar con la memoria, pero ninguna lo tiene para hacerlo con medios
persistentes de almacenamiento, como las unidades de disco. Cabe
mencionar que cuando se encuentre en un texto referencia al
almacenamiento primario siempre se referirá a la memoria, mientras que el
almacenamiento secundario se refiere a los discos u otros medios de
almacenamiento persistente
Espacio de direccionamiento
• La memoria está estructurada como un arreglo direccionable de
bytes. Esto es, al solicitar el contenido de una dirección específica de
memoria, el hardware entregará un byte (8 bits), y no menos. Si se
requiere hacer una operación sobre bits específicos, se deberá
solicitar y almacenar bytes enteros. En algunas arquitecturas, el
tamaño de palabra es mayor.
Espacio de direccionamiento
• Un procesador que soporta un espacio de direccionamiento de 16
bits puede referirse directamente a hasta 216 bytes, esto es, hasta 65
536 bytes (64 KB). Estos procesadores fueron comunes en las décadas
de 1970 y 1980 — los más conocidos incluyen al Intel 8080 y 8085,
Zilog Z80, MOS 6502 y 6510, y Motorola 6800. Hay que recalcar que
estos procesadores son reconocidos como procesadores de 8 bits,
pero con espacio de direccionamiento de 16 bits. El procesador
empleado en las primeras PC, el Intel 8086, manejaba un
direccionamiento de 20 bits (hasta 1 024 KB), pero al ser una
arquitectura real de 16 bits requería del empleo de segmentación
para alcanzar toda su memoria.
Hardware: la unidad de manejo de memoria
(MMU)
• Con la introducción de sistemas multitarea, es decir, dos o más
programas ejecutandose, se vio la necesidad de tener más de un
programa cargado en memoria. Esto conlleva que el sistema
operativo junto con información del programa a ejecutar debe
resolver cómo ubicar los programas en la memoria física disponible.
• Luego ha sido necesario emplear más memoria de la que está
directamente disponible, con el propósito de ofrecer a los procesos
más espacio de lo que puede direccionar la arquitectura (hardware)
empleada. Por otro lado, la abstracción de un espacio virtualmente
ilimitado para realizar sus operaciones incluso cuando la memoria
real es mucho menor a la solicitada y, por último, la ilusión de tener
un bloque contiguo e ininterrumpido de memoria, cuando en realidad
puede haber alta fragmentación.
Hardware: la unidad de manejo de memoria
(MMU)
• Se explicará cómo la MMU cubre estas necesidades y qué
mecanismos emplea para lograrlo —y qué cuidados se deben
conservar, incluso como programadores de aplicaciones en lenguajes
de alto nivel, para aprovechar de la mejor manera estas funciones (y
evitar, por el contrario, que los programas se vuelvan lentos por no
manejar la memoria correctamente). La MMU es también la
encargada de verificar que un proceso no tenga acceso a leer o
modificar los datos de otro —si el sistema operativo tuviera que
verificar cada una de las instrucciones ejecutadas por un programa
para evitar errores en el acceso a la memoria, la penalización en
velocidad sería demasiado severa
La memoria caché
• Hay otro elemento en la actualidad que se asume como un hecho: la
memoria caché. Si bien su manejo es (casi) transparente para el
sistema operativo, es muy importante mantenerlo en mente.
Conforme el procesador avanza en la ejecución de las instrucciones
(aumentando el valor almacenado en el registro de conteo de
instrucción), se pro
El espacio en memoria de un proceso
• Cuando un sistema operativo inicia un proceso, no se limita a volcar el
archivo ejecutable a memoria, sino que tiene que proporcionar la
estructura para que éste vaya guardando la información de estado
relativa a su ejecución.
• Sección (o segmento) de texto Es el nombre que recibe la imagen en
memoria de las instrucciones a ser ejecutadas. Usualmente, la
sección de texto ocupa las direcciones más bajas del espacio en
memoria.
• Localidad temporal Es probable que un recurso que fue empleado
recientemente vuelva a emplearse en un futuro cercano.
• Localidad espacial La probabilidad de que un recurso aún no
requerido sea accesado es mucho mayor si fue requerido algún
recurso cercano.
• Localidad secuencial Un recurso, y muy particularmente la memoria,
tiende a ser requerido de forma secuencial.
• Sección de datos Espacio fijo preasignado para las variables globales y
datos inicializados (como las cadena de caracteres por ejemplo). Este
espacio es fijado en tiempo de compilación, y no puede cambiar (aunque
los datos que cargados allí sí cambian en el tiempo de vida del proceso).
• Espacio de libres Espacio de memoria que se emplea para la asignación
dinámica de memoria durante la ejecución del proceso. Este espacio se
ubica por encima de la sección de datos, y crece hacia arriba. Este espacio
es conocido en inglés como el Heap. Cuando el programa es escrito en
lenguajes que requieren manejo dinámico manual de la memoria (como C),
esta área es la que se maneja mediante las llamadas de la familia de malloc
y free. En lenguajes con gestión automática, esta área es monitoreada por
los recolectores de basura.
• Pila de llamadas Consiste en un espacio de memoria que se usa para
almacenar la secuencia de funciones que han sido llamadas dentro
del proceso, con sus parámetros, direcciones de retorno, variables
locales, etc. La pila ocupa la parte más alta del espacio en memoria, y
crece hacia abajo. En inglés, la pila de llamadas es denominada Stack.