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.
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
- Evitar fragmentación
- Memoria ocupada por varias copias de un mismo objeto
- 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,
- minimizar la memoria desaprovechada
- tener una complejidad temporal mínima
- y presentar un recargo por acceso a memoria mínimo
- además de proporcionar una buena protección y una
- 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)
Coffman, Elphuck y Shoshani, establecieron cuatro condiciones, necesarias y suficientes, para que se dé un interbloqueo:
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:
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




