viernes, 16 de abril de 2010

Administración de Memoria

Durante la evolución de la arquitectura de computadoras, la cantidad de memoria principal presente en las mismas se ha incrementado. Sin embargo, el tamaño de los programas ha aumentado más rápidamente que la memoria disponible, siendo en el dominio del hard x soft, el equivalente a afirmar una delantera del software respecto al hardware.
Con el advenimiento de los lenguajes de programación orientada a objetos (OOP) se tiene un claro ejemplo de la necesidad de eficientizar el manejo de memoria por sobre las otras características de un programa, siendo en esta filosofía más importante el concepto de polimorfismo o herencia que el de velocidad de ejecución.

Se distinguen los siguientes propósitos del sistema de administración de memoria:

Protección. Si varios programas comparten la memoria principal, se debería asegurar que el programa no sea capaz de cambiar las ubicaciones no pertenecientes a él. Aunque una acción de escritura puede tener efectos más graves que una de lectura, esta última tampoco debería estar permitida, para proporcionar algo de privacidad al programa. Dado que muchos lenguajes permiten el uso de punteros dinámicos y arreglos, la verificación sólo en tiempo de compilación no es suficiente, por lo que además se debe efectuar una verificación en tiempo de ejecución.

Compartimiento. Este objetivo parece contradecir al anterior, sin embargo a veces es necesario para los usuarios poder compartir y actualizar información (por ejemplo, en una base de datos) y, si se organiza la tarea de entrada a la misma, se puede evitar el tener varias copias de la rutina. Por supuesto que debe existir una protección contra cambios de esta rutina, permitiendo así el control del acceso a una porción compartida de memoria.

Reubicación. La técnica de multiprogramación requiere que varios programas ocupen la memoria al mismo tiempo. Sin embargo no se sabe con anticipación donde será cargado cada programa por lo que no es práctico usar direccionamiento absoluto de memoria.

Organización física. Debido al costo de una memoria principal rápida, ésta se usa en conjunto con una memoria secundaria mucho más lenta (y por con siguiente, barata) a fines de extender su capacidad, por ejemplo los dispositivos de almacenamiento magnéticos tales como los discos rígidos. Esta clasificación de la memoria hace necesario el control del flujo de la información entre esas dos clases de memoria. Éste control podrían realizarlo los programadores, lo que incrementaría el tiempo de desarrollo de una aplicación y se tendrían que resolver problemas muy complejos como saber de antemano donde y con cuanta memoria se dispone, información que no siempre posee el programador dada la reubicación dinámica. Por ello es más conveniente que esta tarea la realice el sistema, de manera transparente al usuario.

Organización lógica. Aunque la mayor parte de las memorias son organizadas linealmente con un direccionamiento secuencial, esto difícilmente concuerde con el camino seguido por el programa, debido al uso de procedimientos, funciones, subrutinas, arreglos, etc. Si la administración se hace a través de varias direcciones, cada estructura lógica podría considerarse una entidad independiente (segmento). Las ventajas serían que cada uno de los segmentos podrían ser cargados y compilados independientemente y se tendría acceso directo a cada uno de ellos.

No hay comentarios:

Publicar un comentario