Está en la página 1de 24

Gestión de memoria

Secciones Stallings:
7.1, 7.2, 7.3, 7.4

Contenido
• Introducción
• Requisitos de la gestión de memoria
• Tecnologías/mecanismos gestión memoria
– Partición
– Paginación
– Segmentación

1
Introducción
• Memoria principal contiene:
– Sistema operativo: núcleo.
– Zona de usuarios: programa(s) en ejecución
• Gestión de Memoria:
– División de la memoria para “hacer sitio” a
varios procesos
– Obj: repartir eficientemente la memoria para
introducir tantos procesos como sea posible
• Si hay pocos procesos, todos en memoria principal,
la mayoría estarán esperando E/S

Requisitos de la gestión de memoria

• Se intenta satisfacer/garantizar:
– Reubicación
– Protección
– Compartición
– Organización lógica
– Organización física

2
Requisitos - Reubicación

– Programador no sabe qué otros programas


residirán en memoria durante la ejecución
– Durante ejecución, proceso puede suspenderse
(pasar a disco) y volver a memoria principal, a
una ubicación distinta a la anterior (reubicación),
para mantener un alto número de procesos listos
(listos/listos suspendidos)
– Se deben traducir las refs. a memoria
encontradas en el código a las direcciones físicas
reales

Información Bloque de control de proceso


de control Punto
del proceso de entrada
al programa Instrucción
Código de
bifurcación
Direcciones
ascendentes

Referencia
de datos
Datos

Cima actual
de pila
Pila

Figura 7.1. Requisitos de dirección para un proceso.


- SO necesita conocer estas direcciones
- SO y HW: traducir direcciones a direcciones físicas reales

3
Requisitos - Protección
– Código de un proceso no puede referenciar
posiciones de memoria de otros procesos sin
permiso
– Reubicación => imposible comprobar las
direcciones absolutas de los programas; se
desconoce la ubicación del programa en la
memoria principal
– Debe comprobarse durante la ejecución:
• El SO no puede anticiparse a todas las referencias a
la memoria que hará un programa.
• La protección la debe soportar el Hw. durante la
ejecución de la instrucción (muy costoso si Sw.)

Requisitos - Protección
La protección de memoria se puede realizar utilizando dos registros
(base=reasignación y límite) que controlan el acceso a la memoria
física. Ej:
Registro límite
Registro de
reasignación #límite2 Partición N
#base2

CPU > no Partición 2


+
sí Partición 1
dirección MMU
lógica dirección Sist. Operativo
(Proceso 2) física
Trampa RAM
error de direccionamiento

Sólo el SO puede modificar los registros base y límite

4
Requisitos - Compartimiento
– Permite acceso de varios procesos a la misma
zona de la memoria principal
– Mejor permitir a cada proceso (persona) que
acceda a la misma copia del programa, en lugar
de tener cada uno su propia copia aparte.
– Para cooperación es necesario tener acceso
compartido a estructuras de datos.
– El sistema de gestión debe permitir accesos
controlados, sin comprometer la protección.

Requisitos – Org. lógica


– Memoria organizada como espacio de
direcciones unidimensional - cada dirección se
refiere a una secuencia de bytes (palabra).
– La mayoría de los programas se organizan en
módulos (no linealmente).
– Si SO y Hw. pueden tratar los módulos
(ventajas):
• Pueden escribirse y compilarse independientemente
• Pueden otorgarse distintos grados de protección
(sólo lectura, sólo ejecución) a cada uno
• Pueden compartirse

5
Requisitos – Org. física
– Memoria principal: rápida, costosa, pequeña,
volátil, ...
– Memoria secundaria: más lenta, barata, gran
capacidad, no volátil, ...
– Flujo entre ambas responsabilidad del SO:
• La memoria principal disponible para un programa y
sus datos puede ser insuficiente:
– Superposición: permite que varios módulos sean asignados a
la misma región de memoria (programa principal encargado
del intercambio) => costoso para el programador
• El programador no conoce durante la codificación
cuánto espacio habrá disponible

Técnicas de Gestión de
Memoria
• Tarea principal del sistema de gestión de memoria:
carga de programas en memoria principal
para su ejecución en el procesador
• Técnicas simples
– Partición (utilizada con distintas variantes en antiguos SO)
– Paginación simple
– Segmentación simple
• Memoria Virtual (próximo tema)
– Sistemas multiprogramados modernos
– Basada en segmentación y paginación

6
Partición
• Particiones estáticas
• Particiones dinámicas
• Colegas

Particiones estáticas
• El SO ocupa parte fija de la memoria
• Resto disponible para los procesos:
– Límite en el nº de procesos listos/ejecución
(número de particiones)
• Tamaños de las particiones y algoritmos de
ubicación:
• Particiones de igual tamaño
• Particiones de distinto tamaño

7
Particiones estáticas
de igual tamaño
• Cualquier proceso con tamaño <= tam. de partición
puede cargarse en cualquier partición libre
• Si todas las particiones ocupadas, el SO puede sacar
(suspender) un proceso de una partición, para dejar
sitio a uno listo.
• Problemas:
– Un programa puede no ajustarse a una partición.
Programador debe diseñar el programa mediante
superposiciones (módulos).
– Uso de memoria principal ineficiente.
Cualquier programa, aunque sea pequeño, ocupa 1
partición completa: fragmentación interna.

Particiones estáticas
de distinto tamaño
• Reducen los problemas:
– Se pueden alojar programas más grandes sin
superposición
– Se reduce el desperdicio (fragmentación interna)
producido por programas pequeños.
• Pero no los solucionan del todo:
– Caben menos programas grandes sin
superposición
– Si hay muchos programas pequeños la
fragmentación interna es mayor en las
particiones grandes

8
Sistema operativo Sistema operativo
8M 8M
2M
8M 4M

6M
8M

8M
8M

8M

8M

12M
8M

8M

16M
8M

(a) Particiones de igual (b) Particiones de distinto


tamaño tamaño
Figura 7.2. Ejemplo de partición estática en una memoria de 64Mb.

Ubicación para particiones de


igual tamaño

• Todas las particiones son de igual tamaño


=> no importa la partición que se use
• Si existen varios procesos bloqueados, el
planificador elige cual suspender

9
Ubicación para particiones de
distintos tamaños
• Una cola por partición
• Una cola única

Sistema Sistema
operativo operativo

Procesos Procesos
nuevos nuevos

(a) Una cola de procesos por partición (b) Cola única de procesos

Figura 7.3. Asignación de memoria en partición estática de distinto tamaño.

10
Ubicación para particiones de
distintos tamaños
• Una cola por partición:
– Asignar cada proceso a la partición más pequeña
en la que quepa => 1 cola/partición
– Se minimiza la fragmentación interna de cada
partición
– Pero pueden existir particiones vacías y procesos
suspendidos asignados a otra cola
correspondiente a procesos más pequeños que la
partición vacía.

Ubicación para particiones de


distintos tamaños
• Una cola única
– Cuando se va a cargar un proceso, se selecciona
la partición más pequeña disponible donde
quepa
– Si todas las particiones ocupadas: decisión de
intercambio:
• Partición más ajustada (minimiza la fragmentación
interna)
• Prioridades de procesos cargados
• Descarga de procesos bloqueados

11
Particiones estáticas en
general
• Desventajas:
– Particiones especificadas al principio => límite
de procesos activos (no suspendidos)
– Si hay muchos procesos pequeños no se
aprovecha la memoria
• Actualmente no se usan particiones estáticas

Particiones dinámicas
• Particiones variables en nº y longitud
• Se asigna a cada proceso exactamente la memoria
que necesita. Cuando termina, memoria libre.
• Cuando se necesita espacio, se suspende uno
(p. ej., bloqueado)
• Al final, varios huecos en memoria. El rendimiento
decae (más intercambios): fragmentación externa
• “Solución”: usar compactación para desplazar
procesos, de forma que toda la memoria libre quede
junta en un bloque:
• Consume CPU
• Necesita capacidades de reubicación dinámica

12
8M

12M

22M

18M

8M

6M

Bloque asignado
14M Bloque libre

36M

Administración de memoria
Administración de memoria con mapas de bits:
• Memoria está dividida en unidades de asignación

correspondientes a un bit en un mapa de bits de la memoria.


• Compromiso entre el tamaño del mapa y la optimización de

las asignaciones.
A B C D
0 8 16 24 32 40 48
11111111
10000001 1: ocupado, 0: libre
11110000
11111111 La asignación de un proceso de tamaño k
11000111 unidades consiste en una búsqueda de k ceros
11111111 contiguos en el mapa de bits: LENTO
1 1 ...

13
Administración de memoria
Administración de memoria con listas ligadas: La memoria
está representada por una lista ligada de zonas de memoria
ocupadas (P) y libres (H).
A B C D
0 8 16 24 32 40 48
P 0 9 H 9 6 P 15 5

H 20 4 P 24 10 H 34 3

P 37 13

Longitud
Comienzo
P:Proceso H:Hueco

Administración de memoria
• Búsqueda de huecos más rápida: cada elemento de la lista
contiene el tamaño del mismo

• Fácil reorganización de lista al terminar un proceso o al


introducir uno nuevo. Ej:

P 0 9 H 9 6 P 15 5

H 20 4 P 24 10

P 0 9 H 9 15 P 24 10

14
Algoritmos de ubicación con
particiones dinámicas
• El SO debe decidir qué bloque libre se asigna
al proceso
• Algoritmo del mejor ajuste (best-fit):
– Elige el bloque de tamaño más próximo al
solicitado
– Proporciona en general los peores resultados
– Se busca el hueco más pequeño para el proceso
=> el fragmento que se deja es lo más pequeño
posible
=> se debe compactar más frecuentemente.

Algoritmos de ubicación con


particiones dinámicas
• Algoritmo del primer ajuste (first-fit):
– Elige el primer bloque disponible empezando
desde el principio de la memoria
– Es más rápido.
– Puede tener varios procesos cargados en el
extremo inicial de la memoria que es necesario
recorrer cuando se intente encontrar un bloque
libre.

15
Algoritmos de ubicación con
particiones dinámicas
• Algoritmo del siguiente ajuste (next-fit):
– Elige el primer bloque disponible empezando
desde el lugar de la última ubicación.
– Lleva frecuentemente a la asignación de bloques
de memoria en la última ubicación, donde se
encuentra el bloque más grande.
– El bloque de memoria más grande se divide en
fragmentos pequeños.
– Hará falta la compactación para obtener un bloqu
de memoria grande al final del espacio de
memoria.

8M 8M

12M
Primer ajuste 12M
22M
6M
Mejor ajuste
Último bloque 18M
asignado (14K) 2M

8M 8M
6M 6M

Bloque asignado
14M Bloque libre 14M

Siguiente ajuste

36M
20M

(a) Antes (b) Después

Figura 7.5. Ejemplo de una configuración de memoria antes y después de asignar


un bloque de 16 Mbytes.

16
Sistema de colegas
• Equilibrio entre la partición estática y la
dinámica
• El espacio entero disponible para la
asignación se trata como un solo bloque de
tamaño 2U.
• Si se hace una solicitud de tamaño s tal que
2U-1 < s <= 2U, entonces el bloque entero se
asigna:
– En otro caso, el bloque se divide en dos colegas
de igual tamaño.
– Este proceso continúa hasta que el bloque más
pequeño sea mayor o igual que s generándose.

1 bloque de
1 megabyte

Solicitud de 100K

Solicitud de 240K

Solicitud de 64K

Solicitud de 256K

Liberación de B

Liberación de A

Solicitud de 75K

Liberación de C

Liberación de E

Liberación de D

Figura 7.6. Ejemplo del sistema de colegas.

17
Figura 7.7. Representación en árbol del sistema de colegas.

Paginación Simple
• Cada proceso se divide en pequeños trozos
de tamaño fijo (páginas).
• La memoria principal se encuentra
dividida en trozos iguales de tamaño fijo
(marcos), que enmarcan las páginas de los
procesos
• Páginas y marcos tienen el mismo tamaño.
• Paginación elimina fragmentación externa
y limita la interna a una fracción del último
marco.

18
Paginación Simple
• Direccionamiento: SO mantiene 1 tabla de
páginas/proceso (ya no sólo base+límite):
– Muestra la posición del marco de cada
página
– Dirección lógica = nº página +
desplazamiento dentro de la página
• Procesador traduce dir. lógicas a dir.
físicas => consulta la tabla de páginas

Tablas de páginas

Lista de
Tabla de marcos
Tabla de páginas del Tabla de
libres
páginas del páginas del Tabla de
proceso B
proceso A proceso C páginas del
proceso D

Figura 7.10. Estructuras de datos para el ejemplo de la Figura 7.9 en


el instante de tiempo (f).

19
Número
Memoria principal Memoria principal Memoria principal
de marco

(a) Quince marcos libres (b) Carga del proceso A (c) Carga del proceso B

Figura 7.9. Asignación de páginas de procesos a marcos libres.

Memoria principal Memoria principal Memoria principal

(d) Carga del proceso C (e) Descarga del proceso B (f) Carga del proceso D

Figura 7.9. Asignación de páginas de procesos a marcos libres.

20
Tablas de páginas

Lista de
Tabla de marcos
Tabla de páginas del Tabla de
libres
páginas del páginas del Tabla de
proceso B
proceso A proceso C páginas del
proceso D

Figura 7.10. Estructuras de datos para el ejemplo de la Figura 7.9 en


el instante de tiempo (f).

Paginación Simple
• Similar a particiones estáticas, pero...
– Particiones (marcos) pequeñas
– Un programa puede ocupar varias particiones
(marcos) no contiguas
– Se divide el programa en páginas, se cargan
todas sus páginas en marcos libres y se rellena la
tabla de páginas (y se actualiza la lista de marcos
libres).

21
Paginación Simple
• Interesa que tamaño de página/marco sea potencia de
2. Ventajas:
– Dirección relativa (respecto al comienzo del programa) ==
Dirección lógica (página,desplazamiento)
– Sencillez de traducción direcciones en ejecución:
• Dirección n + m bits (nº página + desplazamiento)
• Extraer nº pag. de n primeros bits.
• Usar nº pág. como índice en tabla de páginas => conseguir nº
marco k
• Comienzo dirección física del marco = k x 2 m.
• Comienzo dirección física referenciada = k x 2 m +
desplaz.indicado por los m bits
Tabla de
=> concatenar nº marco con desplazamiento
páginas del
proceso A

Segmentación Simple

• No es necesario que todos los trozos


(segmentos) de todos los programas tengan
la misma longitud, aunque:
– existe una longitud máxima de segmento.
• Dirección lógica (segmentada) =
= nº de segmento + desplazamiento.
• 1 tabla de segmentos/proceso
(correspondencia segmento lógico-
comienzo dirección física)

22
Segmentación Simple
• Segmentos de distinto tamaño =>
segmentación similar a partición dinámica,
pero ...
– Puede ocupar más de un segmento
– No tienen que ser contiguos
– No tiene fragmentación interna y reduce la
fragmentación externa
– Se divide el programa en segmentos, se cargan
todos sus segmentos en bloques libres de
memoria y se rellena la tabla de segmentos (y se
actualiza la lista de bloques libres)

Segmentación Simple
• Segmentación es visible al programador
(paginación no)
– Organización del programa y los datos en segmentos
– El programador debe conocer el tamaño máximo
(inconv.)
• No tiene correspondencia simple entre direcciones
lógicas y físicas (paginación si)
• Tabla de segmentos de procesos
– Dirección de comienzo de segmento
– Longitud del segmento (protección)

23
Segmentación Simple
– Traducción direcciones en ejecución:
• Dirección n + m bits (nº segmento + desplazamiento)
• Extraer nº segmento de n primeros bits.
• Usar nº seg. como índice en tabla de segmentos =>
conseguir dirección física de comienzo del segmento
• Comparar desplazamiento con longitud del segmento
• Si menor: dirección física = dirección física comienzo
de segmento + desplaz.indicado por los n bits

24

También podría gustarte