Se denomina gestión de memoria al acto de gestionar la memoria de un dispositivo informático. De forma simplificada se trata de proveer mecanismos para asignar secciones de memoria a los programas que las solicitan, y a la vez, liberar las secciones de memoria que ya no se utilizan para que estén disponibles para otros programas. El proceso de asignación de memoria a los programas que las solicitan es llamado por algunos "alocar" (del inglés "allocate" que significa asignar) pero la palabra "alocar" tiene otro significado para el diccionario de la lengua de la Real Academia Española. La gestión de la memoria principal de un ordenador es una tarea de suma importancia para el funcionamiento del mismo.
Organización de la memoria.
Organización lógica: Los programas a menudo están
organizados en modulos, algunos de los cuales pueden ser compartidos por
diferentes programas, algunos son de sólo-lectura y otros contienen datos que
se pueden modificar. 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.
Jerarquía de Memoria
Se conoce como jerarquía de memoria a la organización
piramidal de la memoria en niveles que tienen los ordenadores. Su objetivo es
conseguir el rendimiento de una memoria de gran velocidad al coste de una
memoria de baja velocidad, basándose en el principio de cercanía de
referencias.
Los puntos básicos relacionados con la memoria pueden
resumirse en:
• Cantidad
• Velocidad
• Coste
La cuestión de la cantidad es simple, cuanto más memoria
haya disponible, más podrá utilizarse. La velocidad óptima para la memoria es
la velocidad a la que el procesador puede trabajar, de modo que no haya tiempos
de espera entre cálculo y cálculo, utilizados para traer operandos o guardar
resultados. En suma, el coste de la memoria no debe ser excesivo, para que sea
factible construir un equipo accesible.
Como puede esperarse los tres factores compiten entre sí,
por lo que hay que encontrar un equilibrio. Las siguientes afirmaciones son
válidas:
• A menor tiempo de acceso mayor costo.
• A mayor capacidad menor coste por bit.
• A mayor capacidad menor velocidad.
Se busca entonces contar con capacidad suficiente de
memoria, con una velocidad que sirva para satisfacer la demanda de rendimiento
y con un coste que no sea excesivo. Gracias a un principio llamado cercanía de
referencias, es factible utilizar una mezcla de los distintos tipos y lograr un
rendimiento cercano al de la memoria más rápida.
Los niveles que componen la jerarquía de memoria
habitualmente son:
• Nivel 0: Registros
• Nivel 1: Memoria caché
• Nivel 2: Memoria principal
• Nivel 3: Memorias flash • Nivel 4: Disco duro (con el
mecanismo de memoria virtual)
• Nivel 5: Cintas magnéticas Consideradas las más lentas,
con mayor capacidad.
• Nivel 6: Redes (Actualmente se considera un nivel más de
la jerarquía de memorias)
Paginación
En sistemas operativos de computadoras, los sistemas de
paginación de memoria dividen los programas en pequeñas partes o páginas. Del
mismo modo, la memoria es dividida en trozos del mismo tamaño que las páginas
llamados marcos de página. De esta forma, la cantidad de memoria desperdiciada
por un proceso es el final de su última página, lo que minimiza la
fragmentación interna y evita la externa.
En un momento cualquiera, la memoria se encuentra
ocupada con páginas de diferentes procesos, mientras que algunos marcos están
disponibles para su uso. El sistema operativo mantiene una lista de estos
últimos marcos, y una tabla por cada proceso, donde consta en qué marco se
encuentra cada página del proceso. De esta forma, las páginas de un proceso
pueden no estar contiguamente ubicadas en memoria, y pueden intercalarse con
las páginas de otros procesos.
Segmentación
La segmentación es una técnica de gestión de memoria que
pretende acercarse más al punto de vista del usuario. Los programas se
desarrollan, generalmente, en torno a un núcleo central (principal) desde el
que se bifurca a otras partes (rutinas) o se accede a zonas de datos (tablas,
pilas, etc).
Desde este punto de vista, un programa es un conjunto de
componentes lógicos de tamaño variable o un conjunto de segmentos, es decir, el
espacio lógico de direcciones se considera como un conjunto de segmentos, cada
uno definido por un identificador, y consistente de un punto de inicio y el
tamaño asignado.1
La segmentación de un programa la realiza el compilador y en
ella cada dirección lógica se expresará mediante dos valores: Número de
segmento (s) y desplazamiento dentro del segmento (d).
Una de las implementaciones más obvias y directas de un
espacio de memoria segmentado es asignar un segmento distinto a cada una de las
secciones del espacio en memoria de un proceso.
La segmentación también ayuda a incrementar la modularidad
de un programa: Es muy común que las bibliotecas enlazadas dinámicamente estén
representadas en segmentos independientes.
Hardware de segmentación
Puesto que la memoria física se direcciona literalmente,
será necesario transformar cada dirección lógica (s,d) en una dirección real
(r). Esta conversión la realiza un dispositivo especial de hardware, la unidad
de gestión de memoria, consultando la tabla de segmentos correspondiente.
Rendimiento
Esta técnica permite reducir la fragmentación interna de la
memoria provocada por la paginación, ya que asigna a cada programa la cantidad
de memoria que requiere. La carga de un programa en memoria exige la búsqueda
de los huecos adecuados a sus segmentos, y puesto que éstos son de tamaño
variable, se ajustarán los más posibles a las necesidades, produciéndose huecos
pequeños. En este caso se produce fragmentación externa. La eficiencia de la
segmentación requiere, de igual forma que la paginación, el uso de memorias
caché para lograr unos tiempos de acceso adecuados. De igual forma que en la
paginación, se pueden compartir segmentos entre varios procesos.
Memoria virtual
La memoria virtual es una técnica de gestión de la memoria
que permite que el sistema operativo disponga, tanto para el software de
usuario como para sí mismo, de mayor cantidad de memoria que la disponible
físicamente. La mayoría de los ordenadores tienen cuatro tipos de memoria:
registros en la CPU, la memoria caché (tanto dentro como fuera del CPU), la
memoria RAM y el disco duro. En ese orden, van de menor capacidad y mayor
velocidad a mayor capacidad y menor velocidad.
Muchas aplicaciones requieren acceso a más información
(código y datos) que la que se puede mantener en memoria física. Esto es así
sobre todo cuando el sistema operativo permite múltiples procesos y
aplicaciones ejecutándose simultáneamente. Una solución al problema de
necesitar mayor cantidad de memoria de la que se posee consiste en que las
aplicaciones mantengan parte de su información en disco, moviéndola a la
memoria principal cuando sea necesario. Hay varias formas de hacer esto.
Una opción es que la aplicación misma sea responsable de
decidir qué información será guardada en cada sitio (segmentación), y de
traerla y llevarla. La desventaja de esto, además de la dificultad en el diseño
e implementación del programa, es que es muy probable que los intereses sobre
la memoria de dos o varios programas generen conflictos entre sí: cada
programador podría realizar su diseño teniendo en cuenta que es el único
programa ejecutándose en el sistema. La alternativa es usar memoria virtual,
donde la combinación entre hardware especial y el sistema operativo hace uso de
la memoria principal y la secundaria para hacer parecer que el ordenador tiene
mucha más memoria principal (RAM) que la que realmente posee. Este método es
invisible a los procesos. La cantidad de memoria máxima que se puede hacer ver
que hay tiene que ver con las características del procesador. Por ejemplo, en
un sistema de 32 bits, el máximo es 232, lo que da 4096 Megabytes (4
Gigabytes). Todo esto hace el trabajo del programador de aplicaciones mucho más
fácil, al poder ignorar completamente la necesidad de mover datos entre los
distintos espacios de memoria.
Aunque la memoria virtual podría estar implementada por el
software del sistema operativo, en la práctica casi siempre se usa una combinación
de hardware y software, dado el esfuerzo extra que implicaría para el
procesador.
No hay comentarios:
Publicar un comentario