Administración de Memoria Capítulo 5 (Milenkovic)
Administración de Memoria
Capítulo 5 (Milenkovic)
Memoria
• Uno de los principales recursos en un sistema de multiprogramación.
• Capacidad finita.
• Ningún proceso puede ser activado antes que le sea asignada una cierta cantidad de memoria.
Gestor de memoria
• Se ocupa principalmente de asignar memoria.
• Satisface dos necesidades conflictivas:– Separación de espacios de direcciones.– Compartición de memoria.
• Dos formas de gestionar:– Asignación contigua.– Asignación no contigua.
Asignación contigua
• Cada objeto lógico es colocado en un conjunto de posiciones de memoria con direcciones estrictamente consecutivas.
• Se utilizan particiones:– Asignar a los procesos particiones libres.
• Cuando el proceso termina, su partición se libera.
Particiones
• Pueden ser:– Estáticas: tamaño fijo.– Dinámicas: tamaño variable.
• Particiones estáticas:– Fragmentación interna.
• Particiones dinámicas:– Fragmentación externa.
Manejo de particiones• La partición debe ser lo suficientemente
grande para contener al proceso.
• El SO debe llevar la cuenta de los estados:– Libre.– En uso.– Tabla de descripción de particiones.
Asignación de particiones
• Cuando un proceso va a ser creado, el sistema operativo intenta asignarle una partición libre de tamaño suficiente.
• Marca el estado de la partición como ASIGNADO.
• Cuando un proceso termina, es necesario cambiar el estado a LIBRE.
• Es posible guardar la partición en el PCB o el pid en la TDP.
Asignación de Particiones
• 2 problemas:– Estrategia de asignación de partición: como
seleccionar una partición específica.– No hay ninguna partición adecuada para
asignación.
No hay una partición adecuada
• Todas las particiones están asignadas.
• Algunas particiones están libres, pero ninguna es lo suficientemente grande.– Mantener en estado nuevo.
Reubicación
• Los procesos se cargan en posiciones de memoria arbitrarias.
• Los programas deben ser capaces de ejecutarse sin importar su dirección.
• Direcciones virtuales:– Percibidas por el programador.
• Direcciones fisicas:– Posiciones reales en la memoria.
Reubicación dinámica
• La correspondencia entre direcciones virtuales y direcciones físicas se efectúa en tiempo de ejecución.
• Se asume que la posición inicial es la dirección virtual 0.
• Es común implementarlo por medio de registros base especializados.
Reubicación dinámica cont.
• El registro base se inicializa con la dirección física de carga inicial.– Tabla de descripción de particiones.
• Cada referencia a memoria se traduce a una dirección física mediante:– Registro base + dirección virtual
Asignación en particiones dinámicas
• Definir las particiones de acuerdo con los requisitos de cada proceso.
• Tamaño y número de particiones no están limitados.
Asignación en particiones dinámicas
• Modulo de gestión de memoria intenta crear una partición adecuada.– Localizar un área libre adecuada.
• Cada partición está definida por su dirección base y tamaño.
Ejemplo
• Suponga que se requiere cargar un proceso P de tamaño P_tamaño.
1.Buscar un área libre L tal que L_TAMAÑO >= P_TAMAÑO
2.P_base=L_base, L_base=P_base+P_tamaño, L_tamaño=L_tamaño-P_tamaño
Representación de las particiones
• Dos posibilidades:– Milenkovic: Se usa una TDP y una lista de
memoria libre.• Dos estructuras para representar lo mismo.
• Al inicio la memoria libre está representada por un solo bloque contiguo.
Representación de las particiones cont.
– Clase: Se utiliza una lista ordenada para representar las particiones.
• Una sola estructura de datos.
• Las particiones se pueden encontrar en estado libre o asignado.
• El PCB contiene un puntero al nodo de la partición que le corresponde.
• El nodo (partición) tiene un campo que indica el pid del proceso dueño.
Búsqueda de un área libre adecuada
• Los algoritmos más habituales para selección de un área libre son:– Primer ajuste
• Siguiente ajuste.
– Mejor ajuste– Peor ajuste
Primer ajuste y siguiente ajuste
• La primera partición L, con L_tamaño>=P_tamaño se escoge.
• En siguiente ajuste, se reanuda la búsqueda desde el punto anterior.– No busca desde el principio.– Evita que los bloques pequeños se
acumulen al comienzo de la lista.
Mejor ajuste y peor ajuste
• Mejor ajuste:– Asigna el bloque más pequeño que pueda
almacenar a P.
• Peor ajuste:– Asigna el bloque más grande que pueda
almacenar a P.
• ¿Cuál de los 3 es mejor?– Velocidad.– Desperdicio de memoria.
Liberación de particiones
1. Localizar la entrada del proceso en la TDP.
2. Si el proceso va a ser retirado de memoria, copiar su imagen al archivo de intercambio.
3. Indicar en el PCB que el proceso no tiene memoria (su puntero a nulo).
4. Poner la partición en estado libre y combinarla con áreas libres contiguas.
Juntar huecos
• Se tiene un conjunto de particiones libres contiguas:– Hacerlas un solo bloque libre.– De otra manera se puede reportar que no
hay una partición lo suficientemente grande.
Compactación
• Las áreas de memoria libre están entremezcladas con las particiones asignadas.– Fragmentación externa.
• Es común tener esta situación en sistemas con asignación dinámica.
• Los tiempos de vida de los procesos residentes son diferentes.
Compactación cont.
• Orden de las devoluciones de memoria es diferente del orden de las asignaciones.
• Juntar huecos retrasa el problema en vez de evitarlo.
• Si la memoria está extremadamente fragmentada:– Reubicar algunas o todas las particiones en uso a
un extremo de la memoria.
– Una única área libre grande.
¿Cuándo realizar compactación?
• Siempre que sea posible:– Al iniciar o terminar un proceso.– Penaliza el rendimiento.
• Sólo cuando es necesario:– No existe una partición adecuada y la
Memoria total libre >= tamaño de proceso a cargar.
– En caso contrario es inútil hacer compactación.