Publicado el 4 de Septiembre del 2018
930 visualizaciones desde el 4 de Septiembre del 2018
835,7 KB
83 paginas
Creado hace 7a (17/02/2017)
Memoria contigua
Segmentación
Paginación
Administración de memoria: Asignación de
memoria
Gunnar Wolf
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Índice
1 Memoria contigua
2 Segmentación
3 Paginación
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Compartiendo la memoria desde. . .
Como en tantos otros temas, comencemos viendo cómo
compartían la memoria los primeros sistemas multiprocesados
Las primeras implementaciones siempre son las más sencillas
. . . y las más ingenuas
¿Cómo eran estos primeros sistemas?
Poca memoria
Sin MMU
No interactivos
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Particiones fijas
Primer acercamiento: Partir la memoria en varios bloques
Originalmente del mismo tamaño (¡más sencillo!)
Por ejemplo: En 512KB de memoria física caben el sistema
operativo mas otros 7 programas de 64KB (16 bits) cada uno
El sistema operativo típicamente usa la región más baja, a
partir de 0x0000
La memoria mapeada a los diversos dispositivos queda dentro
del segmento del SO
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Particiones fijas
Figura: Particiones fijas, con 3 particiones libres
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Particiones fijas: Ventajas y desventajas
¿Ventajas? Principalmente, simplicidad
Resolución de direcciones en tiempo de carga
Registro base (no requiere siquiera de un registro límite)
Puede limitarse simplemente con un espacio de
direccionamiento acorde en el compilador
¿Desventajas? Rigidez
Grado de multiprocesamiento limitado
Si hay menos de 7 procesos, se desperdician recursos
Si hay más de 7, tienen que esperar a que se les abra espacio
Desperdicio de espacio (fragmentación interna)
Al asignarse la memoria en bloques fijos, un proceso pequeño
podría desperdiciar mucho espacio
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Particiones flexibles
Cada proceso declara sus requisitos de memoria al iniciar su
ejecución
Debe indicar su uso máximo previsto de memoria
Hay mecanismos para ajustar el tamaño de un proceso
preexistente — ¡Pero pueden fallar! (p.ej. si falta memoria para
satisfacer una solicitud)
El OS tiene acceso directo a toda la memoria como un
contínuo
Cada región en memoria está limitada (ahora sí) por un
registro base y un registro límite
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Particiones flexibles
Figura: Espacio de direcciones válidas para el proceso 3 definido por un
registro base y un registro límite
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Particiones flexibles: Ventajas y desventajas
¿Ventajas? Sigue siendo: Simplicidad
Cuando inicia la ejecución del sistema, este esquema parece
ideal
Sobrecarga mínima, con un MMU muy básico
Cada proceso puede direccionar el total de memoria disponible
¿Desventajas? Vienen con el tiempo. . .
Conforme van iniciando y terminando los procesos, se van
creando agujeros en la asignación de memoria
Según análisis estadístico (Silberschatz, p.289), por cada N
bloques asignados se pierden del órden de 0,5N por
fragmentación
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Fragmentación en la memoria
Figura: Termina el proceso 1 (de 128K); inician 4 (de 64K), 5 (de 156K)
y 6 (de 128K); termina 3 (64K). Se va fragmentando la memoria libre.
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Fragmentación interna y externa
Fragmentación interna Espacio desperdiciado dentro de la memoria
asignada a un proceso
Porque tuvo que solicitar toda la memoria que
emplearía desde un principio (y la desperdicia la
mayor parte del tiempo
Por tener que alinearse a cierta frontera de
memoria (p.ej. con particiones pre-establecidas)
Fragmentación externa Espacio de memoria desperdiciado entre los
distintos fragmentos
En el esquema anterior, hay 320K libres, pero no
puede lanzarse ningún proceso > 192K, porque
no es un bloque contiguo
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
¿Cómo ubicar un nuevo proceso?
Hay tres estrategias principales para dar espacio en la memoria a un
nuevo proceso:
Primer ajuste Asigna al nuevo proceso al primer bloque de tamaño
suficiente
Mejor ajuste Asigna al nuevo proceso al bloque más chico en que
quepa
Peor ajuste Asigna al nuevo proceso al bloque más grande que
haya disponible
¿Qué ventajas / desventajas? puede tener cada uno?
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Primer ajuste
El mecanismo más fácil de implementar
Ejecución más rápida
Pero no considera facilitar las cosas para el futuro. . .
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Mejor ajuste
Requiere revisión completa de los bloques disponibles
. . . O mantenerlos en una lista ordenada
Empleando un ordenamiento en montículo (heap), puede ser
tan ágil/simple como el primer ajuste
Busca que el desperdicio sea el menor posible
Pero va generando muchos bloques muy pequeños
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Peor ajuste
Requiere revisión completa de los bloques disponibles
. . . O mantenerlos en una lista ordenada
Empleando un ordenamiento en montículo (heap), puede ser
tan ágil/simple como el primer ajuste
Busca que los bloques que van quedando tras la creación de
nuevos procesos tiendan a ser del mismo tamaño
Balanceando el tamaño de los bloques remanentes
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Compactación
Independientemente del esquema que elijamos, bajo particiones
flexibles se irá fragmentando cada vez más la memoria
Si no se hace nada al respecto, no podrán lanzarse procesos
nuevos
La compactación consiste en:
Suspender temporalmente a un proceso
Moverlo a otra dirección de memoria
Ajustar su registro base
Continuar con el siguiente, hasta crear un sólo bloque
disponible (de los muchos existentes)
Tiene un costo alto, porque requiere:
Muchas transferencias de memoria
Suspensión sensible de los procesos implicados
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Compactación
Figura: Compactación de la memoria de procesos en ejecución
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
¿Cuándo compactar?
No hay una sóla respuesta
Basado en umbrales, verificando periódicamente el estado del
sistema
Basado en eventos, cada vez que no pueda satisfacerse una
solicitud por haber demasiada fragmentación
Señales que indican necesidad de compactar
Relación entre el número de bloques libres y ocupados
Relación entre la memoria total disponible y el tamaño del
bloque más grande
. . .
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Intercambio (swap)
El SO puede comprometer más memoria de la que tiene
disponible
Cuando inicia un sistema que no cabe en memoria, puede
elegir suspender a un proceso y grabarlo a almacenamiento
secundario
Por ejemplo, un proceso que esté bloqueado esperando un
bloqueo externo
¿Qué pasa con las operaciones E/S que tiene pendientes el
proceso?
Puede exigirse que sólo se pueda hacer E/S empleando buffers
en el espacio del SO
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Costos del intercambio
Esta modalidad de swap fue popular en equipos de escritorio
de fines de los 1980 y principios de 1990
Entre 1 y 8MB RAM
Hoy en día resultarían inaceptablemente lentos
Si un proceso ocupa 100MB
Y la tasa de transferencia sostenida al disco duro es de
50MB/s
SATA ofrece máximos entre 150 y 600 MB/s (dependiendo de
la generación)
Pero típicamente hay varios procesos compitiendo por el
acceso
Suspender el proceso a disco toma un mínimo de 2s de acceso
exclusivo
Traerlo de vuelta a memoria, otros 2s
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Índice
1 Memoria contigua
2 Segmentación
3 Paginación
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
¿Cómo es la visión del programador?
El trabajo del compilador es traducir lo que ve/entiende el
programador a algo que pueda entender la computadora
Para el programador, la memoria no es un espacio contiguo,
sino que hay separaciones muy claras
El programador no tiene por qué ver relación entre las
secciones de texto y datos
No tiene por qué preocuparse de la cercanía entre el espacio de
libres y la pila
No tiene por qué importarle la estructura representada en la
pila
Las bibliotecas externas enlazadas son meras cajas negras
Gunnar Wolf
Administración de memoria: Asignación de memoria
Memoria contigua
Segmentación
Paginación
Traduciendo la visión del programador
. . . ¿No podría traducirse esta separación a algo generado por
el compilador?
Y que, de paso, pueda aprovechar el sistema. . .
El espacio de un proceso se traduce en varios segmentos en
memoria
En vez de sólo un registro base y un registro desplazamiento,
requerimos de uno por segmento
Una tabla de segmentos por proceso.
Típicamente, un juego de registros especiales en el CPU
La resolución de direcciones es análoga a la descrita
anteriormente, con apoyo del MMU
El direccionamiento se hace explícitamente indicando
s
Comentarios de: Administración de memoria: Asignación de memoria (0)
No hay comentarios