viernes, 27 de marzo de 2009

Gestion de Memoria

Memoria

La memoria es uno de los principales recursos de la computadora, la cual debe de administrarse con mucho cuidado. Aunque actualmente la mayoría de los sistemas de cómputo cuentan con una alta capacidad de memoria, de igual manera las aplicaciones actuales tienen también altos requerimientos de memoria, lo que sigue generando escasez de memoria en los sistemas multitarea y/o multiusuario.La parte del sistema operativo que administra la memoria se llama administrador de memoria y su labor consiste en llevar un registro de las partes de memoria que se estén utilizando y aquellas que no, con el fin de asignar espacio en memoria a los procesos cuando éstos la necesiten y liberándola cuando terminen, así como administrar el intercambio entre la memoria principal y el disco en los casos en los que la memoria principal no le pueda dar capacidad a todos los procesos que tienen necesidad de ella.
Jerarquía de la memoria

Los programas y datos necesitan estar en la memoria principal para ser ejecutados, o para poder ser referenciados. Los programas o datos que no se necesitan de inmediato pueden guardarse en la memoria secundaria hasta que se necesiten, y en ese momento se transfieren a la memoria principal para ser ejecutados o referenciados. Los soportes de memoria secundaria, como cintas o discos, son en general menos caros que la memoria principal, y su capacidad es mucho mayor. Normalmente, es mucho más rápido el acceso a la memoria principal que a la secundaria.
En los sistemas con varios niveles de memoria hay muchas transferencias constantes de programas y datos entre los distintos niveles. Estas transferencias consumen recursos del sistema, como tiempo de la CPU, que de otro modo podrían utilizarse provechosamente.


Tipos de Memoria

La memoria real o principal
Es donde son ejecutados los programas y procesos de una computadora y es el espacio real que existe en memoria para que se ejecuten los procesos. Por lo general esta memoria es de mayor costo que la memoria secundaria, pero el acceso a la información contenida en ella es de más rápido acceso. Solo la memoria cache es más rápida que la principal, pero su costo es a su vez mayor.

Memoria virtual
El termino memoria virtual se asocia a dos conceptos que normalmente a parecen unidos:
el uso de almacenamiento secundario para ofrecer al conjunto de las aplicaciones la ilusión de tener mas memoria RAM de la que realmente hay en el sistema. Esta ilusión de existe tanto a nivel del sistema, es decir, teniendo en ejecución mas aplicaciones de las que realmente caben en la memoria principal, sin que por ello cada aplicación individual pueda usar mas memoria de la que realmente hay o incluso de forma mas general, ofreciendo a cada aplicación mas memoria de la que existe físicamente en la maquina.


Estrategias de la Administración de Memoria Virtual


Para cualquiera de las tres formas de organizar esta memoria virtual habrá que determinar:

  • Estrategias de obtención.

Determinan cuándo se debe transferir una página o un segmento del almacenamiento secundaria al primario. Las estrategias de obtención por demanda esperan a que un proceso en ejecución haga referencia a una página o a un segmento antes de traerla/lo. Los esquemas de obtención anticipada intentan determinar por adelantado a qué páginas o segmentos hará referencia un proceso. Si la probabilidad de una referencia es alta y hay espacio disponible, entonces se trae al almacenamiento primario la página o segmento antes de que se haga la referencia explícita

  • Estrategias de colocación.

Determinan en qué lugar de la memoria principal se debe colocar una página o un segmento entrante. Los sistemas de paginación vuelven trivial la decisión de colocación, porque una página entrante se puede ubicar en cualquier marco de página disponible. Los sistemas con segmentación requieren estrategias de colocación como las tratadas en el contexto de los sistemas de multiprogramación con particiones dinámicas.

  • Estrategias de reemplazo.
Sirven para decidir qué página o segmento se debe desplazar para dejar espacio a una página o segmento entrante cuando está completamente ocupada la memoria principal.

Gestión de Memoria
La gestión de memoria representa un vínculo delicado entre el rendimiento (tiempo de acceso) y la cantidad (espacio disponible). Siempre se busca obtener el mayor espacio disponible en la memoria, pero pocas veces existe la predisposición para comprometer el rendimiento.

Funciones de la gestion de memoria:

  • Permitir que la memoria se comparta en sistemas de multiprocesos.
  • Asignar bloques de espacio de memoria a distintas tareas.
  • Proteger los espacios de memoria utilizados por ejemplo, evitar que un usuario modifique una tarea realizada por otro usuario.
  • Optimizar la cantidad de memoria disponible, específicamente a través de sistemas de expansión de memoria.

Objetivos de la gestión de memoria
  • Reubicación es necesario que el programa funcione elcualquier caso, es decir sea reubicable ya que como no se puede predecir en queposición de memoria se va a cargar y ejecutar un programa.
Protección se debe hacer que todos los procesos se encuentren en constante protección para que al momento de acceder a cualquier espacio de memoria no se vea afectado ninguno de ellos.
  • Organización lógica son las diferentes funciones o trabajos(direcciones) que realizan cada uno de los procesos dentro de la memoria.
  • Organizacion fisica es una manera de mantener una transferencia de la información con la memoria principal.
  • Compartición se debe lograr que los procesos compartan memoria.
  • Algoritmos de asignación de memoria

    Consiste en dividir la memoria por 2 hasta conseguir ubicar el proceso. Cuando un proceso solicita memoria existirán varios huecos que pueden ser utilizados, el algoritmo determinará cual de ellos será asignado y su principal objetivo es acelerar la unión entre huecos existentes.

    Tipos de Algoritmo
    • Algoritmo del primer ajuste

    Consiste en recorrer la lista de particiones hasta encontrar un hueco suficientemente grande.

    Ventajas: rápido y después de la liberación es fácil unir huecos.

    Inconvenientes: fragmentación externa y huecos pequeños en la zona baja y grandes en la alta.

    • Algoritmo del ajuste siguiente

    Es una variante del anterior que comienza a buscar a partir de la posición anterior, de forma que los huecos grandes se reparten por igual en toda la memoria.

    Asignacion de almacenamiento
    La asignación de memoria consiste en el proceso de asignar memoria para propósitos espécificos, ya sea en tiempo de compilación o de ejecución. Si es en tiempo de compilación es estática, si es en tiempo de ejecución es dinámica y si son variables locales a un grupo de sentencias se denomina automática

    Se presentan dos casos:
    Para un solo usuario

    A nivel de programación


    Particiones Fijas
    Se divide la memoria en partes iguales para cada proceso y cuando una particion esta libre se le asigna a otro proceso y el S.O maneja una tabla que indica cuales espacios estan disponibles y cuales estan ocupados.

    Particiones Variables
    Se divide la memoria en partes diferentes de acuerdo a la necesidad de cada proceso disminuyendo el desperdicio de este recurso y al igual que en la fija cuando una particion esta libre se le asigna a otro proceso pero tiene que ser mayor la memoria disponible a la que se requiera y el S.O maneja una tabla que indica cuales espacios estan disponibles y cuales estan ocupados.

    Aqui en esta particion aparece la condensacion y compactacion de memoria

    Condesacion de memoria
    Es unir varios huecos para formar uno mas grande y asi darle mayor utilidad porque por si solo no funciona y no se le puede asignar a ningun proceso.

    Compactación de memoria
    Cuando un proceso llega y necesita memoria, el sistema operativo busca en la tabla de huecos alguno lo suficientemente grande para el proceso. Si el hueco es muy grande, lo parte en dos. Una parte es asignada al proceso y la otra se identifica como hueco. Cuando el proceso termina y la memoria es liberada, el espacio es identificado como un hueco más en la tabla y si el nuevo hueco es adyacente con otro, ambos huecos se unen formando un solo hueco más grande. En ese momento se debe de checar si no existen procesos a los que este nuevo hueco pueda darles cabida.

    Asignacion Contigua

    La memoria principal normalmente se divide en dos particiones:
    Sistema operativo residente, normalmente en la parte baja de memoria con los vectores de interrupción.
    Procesos de usuario en la parte alta.


    Asignación de partición simple

    Puede utilizarse un esquema de registro de relocalización y limite para proteger un proceso de usuario de otro y de cambios del código y datos del sistema operativo. El registro de relocalización contiene la dirección física mas pequeña; el registro limite contiene el rango de las direcciones lógicas cada dirección lógica debe ser menor al registro limite.


    Asignación de particiones múltiples

    Bloques de distintos tamaños están distribuidos en memoria , cuando llega un proceso se le asigna un hueco suficientemente grande para acomodarle.


    Asignación de partición dinámica

    El proceso de compactación es una instancia particular del problema de asignación de memoria dinámica, el cual es el cómo satisfacer una necesidad de tamaño n con una lista de huecos libres. Existen muchas soluciones para el problema. El conjunto de huecos es analizado para determinar cuál hueco es el más indicado para asignarse.

    Intercambio

    Consiste en trasladar el código y los datos de un proceso completo de memoria al sistema de almacenamiento secundario , para cargar otro previamente almacenado, no permite a un proceso utilizar mas memoria RAM de la que realmente existe en el sistema. Esta técnica puede ser ineficiente ya que se tiene que hacer el intercambio completo del proceso, aunque éste solo vaya a ejecutar una pequeña porción del código.

    Objetivo del Intercambio

    Es dar cabida a la ejecución de mas aplicaciones de las que pueden residir simultáneamente en la memoria del sistema.

    Fragmentación

    Es la memoria que queda desperdiciada al usar los métodos de gestión de memoria que se vieron en los métodos anteriores. Es generada cuando durante el reemplazo de procesos quedan huecos entre dos o más procesos de manera no contigua y cada hueco no es capaz de soportar ningún proceso de la lista de espera.

    Tipos de fragmentación

    Fragmentación Externa: existe el espacio total de memoria para satisfacer un requerimiento, pero no es contigua. Tanto el primer ajuste, como el mejor y el peor producen fragmentación externa.
    Fragmentación Interna: la memoria asignada puede ser ligeramente mayor que la requerida; esta referencia es interna a la partición, pero no se utiliza.

    Paginación

    Es una técnica de manejo de memoria, en la cual el espacio de memoria se divide en secciones físicas de igual tamaño, denominadas marcos de página. Los programas se dividen en unidades lógicas, denominadas páginas, que tienen el mismo tamaño que los marcos de páginas. De esta forma, se puede cargar una página de información en cualquier marco de página.Las páginas sirven como unidad de almacenamiento de información y de transferencia entre memoria principal y memoria auxiliar o secundaria. Cada marco se identifica por la dirección de marco, que esta en la posición física de la primera palabra en el marco de página.

    Características de la paginación
    El espacio de direcciones lógico de un proceso puede ser no contiguo.
    Se divide la memoria física en bloques de tamaño fijo llamados marcos (frames).
    Se divide la memoria en bloques de tamaño llamados paginas.
    Se mantiene información en los marcos libres.
    Para correr un programa de n paginas de tamaño, se necesitan encontrara n marcos y cargar el programa.
    Se establece una tabla de paginas para trasladar las direcciones lógicas a físicas.
    Se produce fragmentación interna.

    Ventajas de la paginación
    Es posible comenzar a ejecutar un programa, cargando solo una parte del mismo en memoria, y el resto se cargara bajo la solicitud.
    No es necesario que las paginas estén contiguas en memoria, por lo que no se necesitan procesos de compactación cuando existen marcos de paginas libres dispersos en la memoria.
    Es fácil controlar todas las páginas, ya que tienen el mismo tamaño.
    El mecanismo de traducción de direcciones (DAT) permite separar los conceptos de espacio de direcciones y espacios de memoria. Todo el mecanismo es transparente al usuario.
    Se libera al programador de la restricción de programar para un tamaño físico de memoria, con lo que se aumenta su productividad. Se puede programar en función de una memoria mucho más grande a la existente.
    Al no necesitarse cargar un programa completo en memoria para su ejecución, se puede aumentar el numero de programas multiprogramándose.
    Se elimina el problema de fragmentación externa.

    Desventajas de la paginación
    El costo de hardware y software se incrementa, por la nueva información que debe manejarse y el mecanismo de traducción de direcciones necesario. Se consume mucho mas recursos de memoria, tiempo en el CPU para su implantación.
    Se deben reservar áreas de memoria para las PMT de los procesos. Al no ser fija el tamaño de estas, se crea un problema semejante al de los programas (como asignar un tamaño óptimo sin desperdicio de memoria, u "ovearhead" del procesador).

    Segmentación
    Es un esquema de manejo de memoria mediante el cual la estructura del programa refleja su división lógica; llevándose a cabo una agrupación lógica de la información en bloques de tamaño variable denominados segmentos. Cada uno de ellos tienen información lógica del programa: subrutina, arreglo, etc. Luego, cada espacio de direcciones de programa consiste de una colección de segmentos, que generalmente reflejan la división lógica del programa

    Objetivos
    Modularidad de programas: cada rutina del programa puede ser un bloque sujeto a cambios y recopilaciones, sin afectar por ello al resto del programa.


    Estructuras de datos de largo variable: en donde cada estructura tiene su propio tamaño y este puede variar.

    Protección: se puede proteger los módulos del segmento contra accesos no autorizados.

    Comparición: dos o más procesos pueden ser un mismo segmento, bajo reglas de protección; aunque no sean propietarios de los mismos.

    Enlace dinámico entre segmentos: puede evitarse realizar todo el proceso de enlace antes de comenzar a ejecutar un programa. Los enlaces se establecerán solo cuando sea necesario.

    No hay comentarios:

    Publicar un comentario