lunes, 15 de agosto de 2016

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. La gestión de memoria también debe realizar las siguientes funciones:
  •          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.
Expansión de memoria
Existen dos formas posibles de expandir la memoria:
Dividiendo un programa de modo que una parte permanezca en la memoria de acceso aleatorio y que una parte se cargue en la memoria cuando se necesite acceder a los datos.
Utilizando un mecanismo de memoria virtual que consiste en utilizar el disco duro como memoria principal y almacenar solamente las instrucciones y los datos utilizados por el procesador en la memoria RAM. El sistema operativo realiza esta operación creando un archivo temporal (conocido como SWAP o "archivo de intercambio") en el que se almacena la información cuando la memoria RAM ya no es suficiente. Esta operación produce una disminución considerable en el rendimiento, dado que se puede acceder al disco duro mucho más rápido que a la memoria RAM. Es normal que al utilizar la memoria virtual el LED del disco duro permanezca encendido casi constantemente y, en el caso del sistema Microsoft Windows, es común que aparezca un archivo "win386.swp", de gran tamaño en proporción a las necesidades de la memoria de acceso aleatorio.
Los mecanismos de distribución de memoria
La memoria central se puede distribuir de tres maneras:
·         segmentación: los programas se dividen en paquetes de longitudes variadas conocidos como "segmentos".
·         paginación: consiste en dividir la memoria en bloques y los programas en páginas de longitud fija.
·         una combinación de segmentación y paginación: algunas partes de la memoria se segmentan y otras se paginan.

Objetivo principal

Conseguir que varios procesos puedan ejecutarse de forma concurrente,
  • evitando los conflictos de uso
  • protegiendo al sistema operativo
  • aprovechando eficazmente el espacio disponible:
  • Minimizar la memoria desaprovechada

  1. Evitar fragmentación
  2. Memoria ocupada por varias copias de un mismo objeto
  3. Memoria ocupada por las estructuras de datos necesarias para la operación del gestor de memoria
  • Carga parcial de programas
  • sin perjudicar el rendimiento:
  • Complejidad temporal
  • Tiempo de acceso a memoria
  • Un gestor de memoria ideal debería por tanto,
  1. minimizar la memoria desaprovechada
  2. tener una complejidad temporal mínima
  3. y presentar un recargo por acceso a memoria mínimo
  4. además de proporcionar una buena protección y una
  5. compartición flexible

Gestión de memoria contigua

Caso trivial: una sola partición (sistema operativo+área de usuario)
como mucho, utilizar un registro base para proteger al S.O.

Gestión de memoria contigua

Evolución: particiones múltiples
particiones de tamaño fijo (MFT)
particiones de tamaño variable (MVT)

Interbloqueo (Sistema Operativo)

  En sistemas operativos, el bloqueo mutuo (también conocido como interbloqueo, traba mortal, deadlock, abrazo mortal) es el bloqueo permanente de un conjunto de procesos ohilos de ejecución en un sistema concurrente que compiten por recursos del sistema o bien se comunican entre ellos. A diferencia de otros problemas de concurrencia de procesos, no existe una solución general para los interbloqueos.

    Todos los interbloqueos surgen de necesidades que no pueden ser satisfechas, por parte de dos o más procesos. En la vida real, un ejemplo puede ser el de dos niños que intentan jugar al arco y flecha, uno toma el arco, el otro la flecha. Ninguno puede jugar hasta que alguno libere lo que tomó.


Condiciones necesarias para el interbloqueo

    Coffman, Elphuck y Shoshani, establecieron cuatro condiciones, necesarias y suficientes, para que se dé un interbloqueo:

Exclusión mutua
Si dos procesos solicitan un recurso exclusivo, uno de los dos quedará suspendido hasta que el favorecido libere el recurso.

Contención o retención y espera
Si un proceso necesita más de un recurso para realizar su trabajo, conservará en su poder los recursos exclusivos ya asignados, mientras espera por otro recurso adicional.

Inapropiatividad
Los recursos asignados a un proceso, sólo pueden ser liberados por el proceso mismo y no pueden ser desasignados por el sistema, cuando otro proceso los necesite.

Espera circular
Dependencia: Si un proceso P1 está suspendido en espera de un recurso exclusivo que está asignado a otro proceso P2, entonces decimos que P1 depende de P2 (P1 <= P2).

Espera circular: Existe una cadena circular de procesos en espera de un recurso, si existe una cadena de dependencias entre procesos de la forma P1 <= P2 <= P3 <= ... <= Pn <= P1

Ejemplos:




Asignación de recursos con espera circular e interbloqueados


Evitar interbloqueos

    En vez de restringir la forma o el orden en que los procesos deben solicitar recursos, antes se debe conocer si es  seguro otorgar dichos recursos. Es decir, si se presentan las condiciones suficientes para un interbloqueo, todavía es posible evitarlos por medio de una restricción en la asignación de los procesos para tratar de buscar estados seguros. Estas restricciones aseguran que al menos una de las condiciones necesarias para el interbloqueo no pueda presentarse y por lo tanto, tampoco el interbloqueo.

Otro método para evitar los interbloqueo consiste en requerir información adicional sobre cómo se solicitará los recursos. Esta información puede ser:

  • La necesidad máxima de recursos de los procesos que se está ejecutando
  • La asignación actual de recursos a procesos
  • La cantidad actual de instancias libres de cada recurso