martes, 3 de julio de 2012

Administración de Memoria


La memoria es uno de los recursos vitales del sistema que debe ser cuidadosamente gestionado. A todo programador le gustaría poder contar con una memoria infinitamente grande, infinitamente rápida y que fuese además no volátil, esto es, que no perdiese su contenido en ausencia de energía eléctrica. Pero al no poder contar con algunas de estas características han surgido técnicas y algoritmos capaces de administrar de una forma óptima la memoria de nuestra computadora.

El modulo del sistema operativo que se encarga de la gestión de la memoria es el administrador de la memoria.

La administración de memoria se refiere a los distintos métodos y operaciones que se encargan de obtener la máxima utilidad de la memoria, organizando los procesos y programas que se ejecutan de manera tal que se aproveche de la mejor manera posible el espacio disponible.

Memoria Real.
La memoria real o principal, es aquella memoria de un computador, donde se encuentra el código de instrucciones y los datos del programa, que se esta ejecutando.

La estructura de la memoria principal se ha cambiada en la historia de las computadoras. Desde los años 1980 es prevalentemente una unidad dividida en celdas que se identifican mediante una dirección. Está formada por bloques de circuitos integrados o chips capaces de almacenar, retener o "memorizar" información digital, es decir, valores binarios; a dichos bloques tiene acceso el microprocesador de la computadora.

La memoria principal se comunica con el procesador mediante el bus de direcciones. El ancho de este bus determina la capacidad que posea el procesador para el direccionamiento en memoria.

La memoria principal es el núcleo del sub-sistema de memoria de una computadora, y posee una menor capacidad de almacenamiento que la memoria secundaria, pero una velocidad superior.

El administrador de memoria asigna esta a un proceso que la solicita y se la retira cuando acaba o cuando el proceso esta temporalmente inactivo para dejar espacio a otros procesos y su labor consiste en llevar un registro de qué partes de la memoria se están utilizando y qué partes no, con el fin de asignar espacio a los procesos cuando estos hagan requerimientos, liberarlo cuando terminen, así como administrar el intercambio entre la memoria principal y el disco, en el caso en que esta no pueda albergar a todos los procesos. También facilita los mecanismos de protección para que un proceso no invada el espacio de otros procesos.


Memoria Auxiliar.
La memoria auxiliar (memoria secundaria, almacenamiento secundario o memoria externa) es el conjunto de dispositivos y medios de almacenamiento, que conforman el sub-sistema de memoria de una computadora, junto a la memoria principal.
El proceso de transferencia de datos a un equipo de cómputo se le llama "procedimiento de lectura". El proceso de transferencia de datos desde la computadora hacia el almacenamiento se denomina "procedimiento de escritura".

Características del almacenamiento secundario:

• Capacidad de almacenamiento grande.
• No se pierde información a falta de alimentación.
• Altas velocidades de transferencia de información.
• Siempre es independiente del CPU y de la memoria primaria. Debido a esto, los dispositivos de almacenamiento secundario, también son conocidos como, Dispositivos de Almacenamiento Externo.

Tipos de almacenamiento:

• Almacenamiento magnético. (Disco duro, cinta magnética)
• Almacenamiento óptico. (CD-ROM, DVD, Blu Ray)
• Almacenamiento magneto-óptico (híbrido, Disco magneto-opticos)
• Almacenamiento electrónico o de estado sólido (Memoria Flash)

Memoria Virtual.
Es una técnica de administración de la memoria real que permite al sistema operativo brindarle el software de usuario y a sí mismo un espacio de direcciones mayor que la memoria real.

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 tiene que ver con las características del procesador. Por ejemplo, en un sistema de 32 bits, el máximo es 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.