0 Bewertungen0% fanden dieses Dokument nützlich (0 Abstimmungen)
65 Ansichten25 Seiten
Este documento describe los conceptos básicos de la gestión de memoria por parte de un sistema operativo, incluyendo el espacio de direcciones, los registros base y límite, el swapping, la administración de memoria a través de bitmaps y listas enlazadas, y la memoria virtual. También explica brevemente la historia del desarrollo de la memoria virtual.
Originalbeschreibung:
Originaltitel
Clase 12 - Memoria - Espacio de Direcciones - Administracion de Memoria.pdf
Este documento describe los conceptos básicos de la gestión de memoria por parte de un sistema operativo, incluyendo el espacio de direcciones, los registros base y límite, el swapping, la administración de memoria a través de bitmaps y listas enlazadas, y la memoria virtual. También explica brevemente la historia del desarrollo de la memoria virtual.
Este documento describe los conceptos básicos de la gestión de memoria por parte de un sistema operativo, incluyendo el espacio de direcciones, los registros base y límite, el swapping, la administración de memoria a través de bitmaps y listas enlazadas, y la memoria virtual. También explica brevemente la historia del desarrollo de la memoria virtual.
AGENDA 1. Gestión de Memoria - Concepto 2. Espacio de Direcciones ➔ Abstracción Concepto Registros base y límite Swapping 3. Administración de memoria Bitmaps – Listas Enlazadas 4. Memoria Virtual La historia Gestión de memoria • Procesos comparten la CPU ➔ También comparten la memoria física ➔ Veremos algunos de los mecanismos del SO para hacer esto
• Proceso ➔ necesita algo de memoria para almacenar
su código y sus variables
• Mas de un proceso en la memoria al mismo tiempo ➔
SO debe administrar la memoria (recurso) ➔ Evitando que los procesos dañen la memoria de los demás y garantizando que cada proceso tenga suficiente memoria (ni demasiado, ni muy poco) Gestión de memoria • Exponer la memoria física a los Procesos tiene desventajas: • Puede dañar el SO ➔ Procesos con accesos indebidos a memoria ➔ Se requiere Protección • Díficil tener varios procesos en ejecución concurrentemente (Multiprogramación) ➔ Requiere Reubicación • Varios Procesos en memoria al mismo tiempo sin que interfieran entre si ➔ Hay que asegurar Protección y Reubicación Gestión de memoria • Se tiene una Jerarquía de Memoria • Cache (rápida y costosa) • Principal (media) ➔ RAM • Disco (lenta y barata) • Gestión de memoria ➔ usar esta jerarquía para crear una abstracción de memoria de fácil acceso • SO ➔ Administrador eficiente de memoria • Llevar el registro de cuáles partes de la memoria están en uso • Asignar memoria a los procesos cuando la necesiten • Desasignarla cuando terminen o se intercambien a disco Espacio de direcciones • Se crea la abstracción para el manejo de la memoria ➔ Espacio de Direcciones • ¿Qué es? ➔ Conjunto de Direcciones que puede usar un Proceso para direccionar la memoria • Cada Proceso tiene su propio espacio de direcciones lógicas • Independiente a las de los otros procesos (excepciones donde los procesos pueden compartir parte de sus espacios de direcciones) Registros Base y Limite • Uno de los primeros mecanismos utilizados para proteger el SO y para proteger los procesos entre sí fue la creación de particiones • Forma de relocalización dinámica ➔ Asocia espacio de direcciones de cada proceso sobre una parte distinta de memoria física ➔ usada hasta el Intel 8088 • Base ➔ contiene la dirección física donde comienza el programa • Límite ➔ contiene la longitud del programa Registros Base y Limite
• Proceso hace referencia a memoria (obtener instrucción, leer o
escribir dato) ➔ HW del CPU chequea si la dirección < Límite ➔ Si es asi, suma la Base a la dirección generada por el proceso (lógica) ➔ de lo contrario, genera un fallo y aborta el acceso • La comparación y la adición tienen que ser hechas para cada instrucción Registros Base y Limite
Se suma 16384 a JMP 28 ➔Hardware suma 16384 a 28 ➔
Resultando en JMP 16412 ¿Cómo correr a la vez, más procesos de los que pueden ubicarse en memoria? • En la práctica ➔ No pueden mantenerse todos los Procesos en memoria ➔ Muchos y muy grandes • Dos aproximaciones para tratar la sobrecarga de memoria • Swapping ➔ Traer el proceso completo a memoria desde disco, correrlo por un momento y regresarlo a disco • Memoria Virtual ➔ Permitir al proceso correr a pesar de que en memoria principal solo está una parte de el y la otra parte está en disco Swapping
Cuando el swapping crea varios huecos en la memoria, es
posible combinarlos todos en uno grande desplazando los procesos lo más hacia abajo que sea posible ➔ compactación de memoria ➔ Toma mucho tiempo Procesos pueden crecer cuando se ejecutan • Cantidad de memoria a asignar cuando el proceso se crea o se intercambia ➔ Aspecto importante • Si los procesos se crearan con un tamaño fijo que nunca cambia ➔ SO asigna exactamente lo necesario • Si crecen cuando se ejecutan: • Stack (direcciones de retorno y variables locales) • Segmento de datos (variables las cuales se le asigna memoria dinamicamente ➔ Heap) • Parece buena idea para reducir sobrecarga de memoria ➔ Asignar memoria extra para ambos • No obstante al intercambiar a disco solo se intercambia la memoria en uso ➔ Desperdicio traer huecos al disco Dos maneras de asignar espacio para crecer
(a) Procesos con un segmento de datos en crecimiento
(b) Procesos con dos segmentos de crecimiento ➔ Pila en crecimiento hacia abajo y segmento de datos en crecimiento hacia arriba Administración de Memoria Libre • Dos técnicas para llevar el registro del uso de la memoria
• Bitmaps ➔ Mapa de bits
• Linked lists ➔ Listas enlazadas o libres Bitmaps
Una parte de la memoria con
cinco procesos y tres huecos
• Memoria se divide en unidades de asignación (UA) tan pequeñas como unas
cuantas palabras y tan grandes como varios kilobytes • Para cada UA ➔ un bit en el mapa de bits ➔ 0 si está libre y 1 si está ocupada • UA muy pequeña ➔ mayor será el mapa de bits • Ej. UA = 4 bytes ➔ 32 bits de memoria sólo requerirán 1 bit del mapa • UA grande ➔ mapa de bits pequeño ➔ podría desperdiciar una cantidad considerable de memoria en la última unidad del proceso ➔ Fragmentación interna Bitmaps • Ventaja ➔ Forma compacta de mantener el registro de la memoria, que sólo depende del tamaño de la memoria y el tamaño de la unidad de asignación
• Desventaja ➔ para asignar memoria a un
proceso de k UA, el administrador de memoria debe buscar en el mapa, hasta encontrar una serie de k bits consecutivos con el valor 0 ➔ Operación Lenta Listas enlazadas
Cada entrada en la lista ➔ Un hueco (H) o un Proceso (P), la dirección en la que
inicia, la longitud y un apuntador a la siguiente entrada Lista ordenada por dirección ➔ ventaja cuando termina un proceso o se intercambia ➔ el trabajo de actualizar la lista es simple Listas enlazadas – Desasignar memoria
• Cuatro combinaciones de los vecinos para el proceso X en
terminación • Para este proceso de mezclar huecos (compactar) puede ser más conveniente tener una lista doblemente enlazada Listas enlazadas – Asignar memoria • Procesos y huecos están en una lista ordenada por dirección ➔ existen varios algoritmos para asignar memoria cuando el proceso es creado o intercambiado desde disco • Algoritmos: • Primer ajuste (First fit): el administrador de memoria explora la lista hasta encontrar un hueco que sea lo suficientemente grande ➔ Rápido, busca lo menos • Siguiente ajuste (Next fit): Funciona como anterior, pero lleva registro de dónde descubre un hueco adecuado ➔ La siguiente vez que es llamado, empieza desde el lugar en el que se quedó la última vez, en lugar de empezar siempre desde el principio ➔ rendimiento ligeramente menor que el del primer ajuste Listas enlazadas – Asignar memoria • Algoritmos: • Mejor ajuste (Best fit): busca en toda la lista, de principio a fin y toma el hueco más pequeño que sea adecuado ➔ más lento que el del primer ajuste, ya que debe buscar en toda la lista ➔ También provoca más desperdicio de memoria que los anteriores, debido a que tiende a llenar la memoria con huecos pequeños e inutilizables • Peor ajuste (Worst fit): tomar siempre el hueco más grande disponible ➔ no es buena idea Listas enlazadas – Asignar memoria
Ej. asignar memoria a proceso de 16 MB
Listas enlazadas – Asignar memoria Los cuatro algoritmos pueden ser acelerados ➔ con listas separadas para los procesos y los huecos ➔ dedicándose solo a inspeccionar los huecos, no los procesos
Si lista de huecos se ordena por tamaño ➔ Los algoritmos
del primer ajuste y del mejor ajuste son igual de rápidos, y se hace innecesario usar el del siguiente ajuste
Surge otro algoritmo de asignación ➔ ajuste rápido
(Quick fit), que mantiene listas separadas para algunos de los tamaños más comunes solicitados ➔ Muy rápido Listas enlazadas – Asignar memoria El precio inevitable que se paga por esta aceleración en la asignación es la complejidad y desaceleración al desasignar la memoria ➔ ya que un segmento liberado debe eliminarse de la lista de procesos e insertarse en la lista de huecos
Desventaja de los esquemas que se ordenan por el tamaño
del hueco ➔ Cuando un proceso termina o es intercambiado, buscar en sus vecinos para una posible fusión es un trabajo costoso (tiempo procesamiento)
Si no se realiza la fusión ➔ la memoria se fragmentará
rápidamente ➔ gran número de pequeños huecos en los que no cabrá ningún proceso Memoria Virtual - La historia • Registros base y límite ➔ usados para crear la abstracción de espacio de direcciones ➔ Protección y reubicación • Surgió otro problema ➔ Administración del agrandamiento del software ➔ Tamaño de las memorias se incrementa con cierta rapidez, pero el del software aumenta con una mucha mayor • Necesidad de: • Ejecutar programas grandes que no caben en la memoria • Ejecutar varios programas al mismo tiempo, algunos de los cuales caben en memoria ➔ pero que en forma colectiva exceden su tamaño ➔ Sobrecarga de memoria Memoria Virtual - La historia • Para ello el Swapping completo es demasiado lento (Ej. rata de transferencia de un disco SATA de 100 Mbytes/seg ➔ 10 seg para hacer un swap out a 1 Gbyte de programa)
• Overlays ➔ Programador dividía el programa en varias
módulos ➔ En cada módulo, al margen de la lógica propia del programa ➔ Instrucciones de E/S para cargar en memoria principal aquellos módulos cuyas instrucciones deban ejecutarse o cuyos datos vayan a ser referenciados en el futuro inmediato
Lo díficil ➔ la división del programa de forma manual por parte