Clase 3 OK - GESTIÓN DE MEMORIA - CON EJERCICIOS PDF
Clase 3 OK - GESTIÓN DE MEMORIA - CON EJERCICIOS PDF
Clase 3 OK - GESTIÓN DE MEMORIA - CON EJERCICIOS PDF
En cada una de las celdas se alberga un dato y cada dato tiene su propia
dirección. El tamaño de la tabla y de las celdas pueden variar de un
sistema a otro, es dependiente de la arquitectura de la máquina. El
tamaño de la celda, por ejemplo, pueden ser bit, byte, palabra, etc.
Para ejecutar un programa, éste debe cargarse en memoria. Cada vez que se
carga se puede ubicar en diferentes zonas de memoria. Esta variación en la
ubicación se debe, por un lado, que en los sistemas multiprogramados el
estado de la memoria varia de un instante a otro. Por otro lado, para maximizar
el uso del procesador a veces se descargan y/o cargan los procesos activos
de/en memoria. Por estos motivos no es eficiente que un proceso se deba
situar siempre en la misma zona de memoria. La posibilidad de ubicar el
proceso en diferentes particiones de memoria se denomina reubicación.
La reubicación estática se lleva a cabo durante la carga del programa. Todas las
direcciones generadas son relativas a la dirección a partir de la cual se carga el
programa. Una vez que el programa ha sido cargado, este no puede ser movido
a otra dirección de memoria.
La reubicación dinámica se lleva a cabo durante la ejecución del programa; En
vez de generar las direcciones en la carga, se genera dinámicamente a medida
que se van referenciando. El programa puede ser trasladado a otra zona de
memoria sin que ello tenga consecuencias falsas.
Compartición.
En los sistemas multiprogramados, en numerosas ocasiones, los procesos que
conviven en el necesitan compartir datos. En este compartimiento de datos se
realiza a través de zonas de memoria a las que se pueden acceder los procesos
que comparten la información. El sistema operativo, concretamente el gestor de
memoria, debe encargarse de controlar el uso adecuado de estas zonas de
memoria.
GESTOR DE MEMORIA.
Los gestores de memoria han ido evolucionando, desde los de los sistemas mono
programados, que eran sencillos, a los que se utilizan en los actuales
sistemas multiprogramados modernos que emplea un sistema de gestión
de memoria llamado memoria virtual.
ESQUEMAS DE GESTION DE MEMORIA
MFT La zona de memoria reservada para los procesos se divide en un número fijo
de particiones; el tamaño de cada partición es invariable una vez que se ha
establecido. El número de particiones y el tamaño de cada una se define en el
momento de arrancar la maquina. El resultado es un sistema multiprogramado
con número fijo de tareas. Las particiones pueden ser todas del mismo tamaño o
de diferente tamaño.
El algoritmo de ubicación debe elegir en que hueco, de los que hay libres, se
alberga al nuevo proceso que ha llegado al sistema. Hay diversas
posibilidades, las dos más conocidas son:
(1) el mejor ajuste: elige de entre todos los bloques que hay libres y son de
igual o mayor tamaño que el proceso, el que se aproxime más al tamaño del
proceso;
(2) el primer ajuste: Selecciona el bloque libre de igual o mayor tamaño que
primero encuentre; la búsqueda comienza por la primera dirección de
memoria.
El particionamiento de la memoria en zonas dinámicas genera
fragmentación externa a pesar de eliminar la fragmentación
interna. La fragmentación externa se puede eliminar
compactando la memoria. Cada cierto tiempo, el sistema
operativo desplaza los procesos para que toda la memoria libre
esta contigua en el bloque. Esta técnica resuelve el problema de
la fragmentación externa pero consume mucho tiempo.
EJERCICIOS
• Considérese un sistema de gestión de memoria con particiones estáticas o MFT
(Multiprogramación con un número Fijo de Tareas). El sistema operativo ocupa la
primera partición que tiene un tamaño de 10 K: el resto de la memoria está dividida
en cuatro particiones cuyas características se muestran en la Tabla 2.1. El algoritmo
de ubicación asigna a cada proceso la partición más pequeña en la que quepa: por
lo tanto se empleará una cola de planificación para cada partición. En la Tabla 2.2
podemos ver la cantidad de memoria que requiere cada proceso. Se pide mostrar
cómo el algoritmo de ubicación va albergando los distintos procesos en memoria.
• SOLUCIÓN
• El algoritmo de ubicación alberga cada proceso en la partición más pequeña en la que quepa. Tendremos tantas
colas de planificación como particiones, ya que todas son de distinto tamaño. El proceso A entrará en la cola 3. el
proceso B en la 4, el C en la 1, el D en la 3 y el proceso E se ubicará en la cola 4.
• En la Figura 2.3 se muestra el contenido de las colas asignadas a cada una de las particiones de memoria. Los
procesos D y E quedan a la espera de que se desocupen las particiones de 8 y16 k respectivamente.
Sistema operativo
10k
C 18k
12k
D A
8k
16k
E B
Sistema operativo
10k
18k
E D C B A
12k
8k
16k
• Tenemos un sistema con gestión de memoria MFT compuesto por cuatro
particiones cuyas características se muestran el la Tabla 2.3 . El tamaño, el
instante de llegada y la duración de los procesos que llegan al sistema están en la
Tabla2.4 .
TABLA 2.3
Cuando las particiones son estáticas y varias de ellas tienen el mismo tamaño,
normalmente, se utiliza una cola (para las particiones que tienen igual tamaño).
Tenemos un sistema con gestión de memoria MFT compuesto por cuatro particiones cuyas características se muestran en la
Tabla 2.3. El tamaño, el instante de llegada y la duración de los procesos que llegan al sistema están en la Tabla 2.4.
Se pide determinar cómo se realiza la asignación de particiones y el tipo y tamaño de la fragmentación que se produce para
los siguientes casos:
a) Se emplea una cola de procesos por partición. El algoritmo de ubicación asigna al proceso la partición más pequeña
en la que quepa.
b) b) Se emplea una cola única de procesos. El algoritmo de ubicación asigna la primera partición disponible en la que
quepa el proceso.
Nota: Los tiempos de carga y desalojo en/de memoria se consideran despreciables.
instante 3 instante 5
SO SO
SO
• instante 0 B D
E
A
C
SO
instante 4
SO
B D
• instante 1
A
El gestor de memoria ubicará los procesos en memoria a través de dos colas: una para la partid de 150 K y otra para las dos
particiones de 100 K. La carga de los procesos en memoria, que hemos representado en la Figura 2.5, se lleva a cabo de la
siguiente manera:
■ Instante O, el proceso A llega al sistema y entra en la partición de tamaño 150 K. Se produce una fragmentación interna de
20 K.
■ Instante 1, el proceso B se carga en la primera partición de tamaño 100 K. Hay fragmentacion interna igual a 10 K.
■ Instante 2, el gestor de memoria carga el proceso C en la segunda partición de tamaño 100 K. Esta operación produce una
fragmentación interna de 20 K.
■ Instante 3, en este punto ocurren dos hechos importantes: el proceso A deja libre la partición de 150 K y el proceso D
entra en la cola correspondiente. No se carga el proceso D porque la partición libre es de 150 K y este proceso se debe
ubicar, siguiendo el algoritmo de asignación de particiones, en una de las particiones de 100 K. En este instante tenemos
una fragmentación interna de 30 K, la fragmentación que produce la carga del proceso B más la que produce la carga del
proceso C.
■ Instante 4, en este momento ocurren los siguientes acontecimientos: los procesos B y C libe-ran las dos particiones de 100
K; el proceso D entra en la primera partición de 100 K. La carga del proceso D genera una fragmentación interna de 30 K.
■ Instante 5, la partición de 150 K es ocupada por el proceso E, lo cual produce una fragmentación interna de 40 K.
(a) SO
• SO instante 2
B
instante 3 instante 5
SO SO
SO
• instante 0 B
D E
A
C
SO
instante 4
SO
B
• instante 1 D
A
Ahora empleemos una sola cola para gestionar las tres particiones estáticas en las que se divide la memoria
dedicada a los procesos de usuario. En este caso, la carga de los procesos la representamos en la Figura 2.6 y
se realiza de la siguiente forma:
■ Instante O, el proceso A llega al sistema y se carga en la partición de 150 K. Fragmentación interna de 20
K.
■ Instante 1, en la primera partición de 100 K se alberga el proceso B. Fragmentación interna de 10 K.
■ Instante 2, en la segunda partición de 100 K se carga el proceso C. Fragmentación interna igual a 20 K.
■ Instante 3, ocurren dos hechos: el proceso A deja libre la partición que ocupaba, el proceso D llega al
sistema. Este proceso se cargará en la partición de 150 K, lo cual provoca una fragmentación interna de 80 K.
■ Instante 4, los procesos B y C abandonan las particiones de memoria que ocupaban.
■ Instante 5, el proceso D abandona la partición de 150 K que es ocupada por el proceso E. La carga de este
proceso genera una fragmentación interna de 40 K.
• MULTIPROGRAMACIÓN CON NUMERO VARIABLE DE TAREAS
B 14K 2 7
C 18K 3 4
D 6K 4 6
E 14K 5 5
SO S0 SO SO SO
10K 10K 10K 10K 10K
Proceso A
Proceso A 8K
Proceso A Proceso A
8K 10K 10K Proceso B
14K
Proceso B Proceso B
14K 14K
Proceso C
18K
Proceso C
18K
Proceso D
6K
PROCESO D
6K
Comentario:
Se puede observar que a medida que van entrando y saliendo procesos de memoria se van generando
"huecos" en ésta. Llegará un momento en el que, a pesar de que haya espacio libre en memoria, no se
Podrán albergar procesos por que ele espacio libre no es suficiente grande. Para solucionar este problema lo
que se hace es compactar la memoria juntando todo el espacio libre .Esta operación es efectiva pero muy
costosa
Paginación.
Los dos esquemas de gestión de memoria particionada que hemos visto tienen problemas.
Con MFT se produce fragmentación interna y MVT provoca fragmentación externa. La
paginación resuelve total o parcialmente estos problemas. Con un sistema de gestión de
memoria paginada, la memoria y los procesos se dividen en pequeños trozos de tamaño
fijo e igual. Cada trozo perteneciente al proceso se llama página y cada trozo de memoria
se denomina marco.
En paginación es necesario saber qué marcos de la memoria principal están libres y cuales
ocupados. Para lograr este objetivo se conocen dos mecanismos: mapa de bits tiene una
entrada por marco; cada entrada puede tener dos valores 0 o 1 para indicar si el bloque está
ocupado o no. En la lista enlazada se guardan únicamente los marcos libres.
• Estamos trabajando con un sistema operativo que emplea una gestión de
memoria paginada. Cada página tiene un tamaño de 2.048 posiciones (o bytes.
La memoria física disponible para los procesos es 8 M. Primero llega un proceso
que necesita 31.566 posiciones de memoria y. después. llega otro proceso que
consume 18.432 posiciones cuando se carga en memoria. Se pide:
• 1. ¿Qué fragmentación interna provoca cada proceso?
• 2. ¿Qué fragmentación externa provoca cada proceso?
• Para saber si existe fragmentación interna se debe calcular el número de páginas que necesita
el proceso para ejecutarse, y ver si de la última página se utilizan todas las posiciones.
Si se utilizan todas las posiciones de la última página no se produce fragmentación interna, en
caso contrario si se produce.
1) Parte a): Calcular las páginas que necesita el programa para ejecutarse, dividiendo el tamaño
del programa entre el tamaño de la página.
• Número de páginas = 31566 bytes/2048 bytes = 15,4 páginas
• El programa necesita 16 páginas
• Ahora debemos determinar si el proceso entra en la memoria, calculando las páginas
disponibles que hay en el almacenamiento primario.
• Número de páginas en memoria =
• 8M (1024 * 1024 *8 ) / 2048 =4096 pág
• El proceso entra en memoria en vista que hay 4096 páginas libres y el proceso
ocupa 16.
• Sabemos que se usa fragmentación interna en vista que se utiliza 15.4
páginas:
• 31566-(15 páginas * 2048 posiciones/pagina) = 846 posiciones ocupadas
• La cantidad de fragmentación interna es 2048 – 846 = 1202 bytes
Parte b):
Páginas que ocupa el segundo programa: 18432/2048 = 9 páginas
0100
pagina desplazamiento
Figura 2.9 Descomposición en número de página y desplazamiento para la dirección 0100.
Luego la dirección de memoria 0100 se encuentra en la página 0. Una vez que hemos visto cómo calcular la página a la que
hace referencia una dirección, podemos averiguar cuál es la cadena de referencia correspondiente a las direcciones
generadas por el proceso:
012121268681012
Si dos o más direcciones que se generan seguidas hacen referencia a la misma página, solamente incluimos una referencia a
la página. La cadena completa generada por el proceso sería:
• 0001 0200 0100 0200 0300 0200 0300 0900 0800 0900 0800
0 0 0 0 0 0 0 1 1 1 1
1000 0900 1100 1000 0900 1200 1100 1200 1100 3000 3100
2 1 2 2 1 2 2 2 2 6 6
3250 3150 3250 3150 3250 3150 4111 3200 4111 5000 6000
6 6 6 6 6 6 8 6 8 10 12
Comentario
El tamaño de la dirección en la paginación es dependiente al bardware.Cuanto
mas grande sea la pagina mas bits ocupara el desplazamiento
Segmentación.
La gestión de memoria segmentada se fundamenta en dividir los procesos en
segmentos. Estos segmentos pueden ser de diferente longitud, aunque existe un
tamaño máximo de segmento que depende de la arquitectura de la máquina. En la
mayoría de los sistemas los procesos se dividen en tres segmentos: código, datos y
pila.
0 100 SO
CODIGO A
350 50 PILA A
PILA A
400 100 DATOS A
DATOS A
500 350 CODIGO B
1000 24 LIBRE
PILA B
DATOS B
CODIGO D
PILA D
DATOS D
0 100 SO
100 300 LIBRE
400 50 LIBRE
450 100 LIBRE
550 250 CODIGO D
800 50 PILA D
850 100 DATOS D
950 74 LIBRE CODIGO D
COMENTARIO
Si no se compacta la memoria porque es una
operación muy costosa el proceso E tiene que
esperar ha ser cargado en la memoria .Se PILA D
cargara cuando alguno de los procesos ya
albergados libere memoria y haya espacio DATOS D
contiguo suficiente
Tabla de páginas Es una estructura de datos que se utiliza con el mismo objetivo
que en segmentación y paginación: para ayudar a la traducción de dirección
virtual a real. Esta tabla tendrá una entrada por cada página del proceso. En
cada entrada, además de la dirección del marco asignado, se almacenan
diferentes bits. Por ejemplo el bit de presencia que indica si la página
correspondiente está cargada o no en memoria. Se puede incorporar más bits
para facilitar el funcionamiento de la memoria virtual.
TLB o buffer de traducción adelantada La mayoría de los sistemas de gestión de
memoria virtual hacen uso de un cache especial para las entradas de la tabla
de páginas. Este cache funciona del mismo modo que una memoria asociativa
y contiene las entradas de la tabla de páginas usadas hace menos tiempo.
Funcionamiento.
Los programas residen en el dispositivo de almacenamiento auxiliar. Las páginas
almacenadas en los dispositivos, a medida que son necesarias, se van
cargando en marcos de memoria.
El diseño del gestor de memoria virtual debe tener en cuenta los siguientes
aspectos:
1. La técnica de memoria virtual puede realizarse usando paginación,
segmentación o una combinación de ambas. Para decidir cuál de todas ellas
utilizar hay que tener en cuenta la plataforma de hardware disponible.
2. La política de lectura está relacionada con la decisión de cuando se debe cargar
una página en memoria. Una de las alternativas, denominada paginación
bajo demanda pura, consiste en traer a memoria las páginas solo cuando se
hace referencia a una posición que contengan.
La otra alternativa consiste en traer anticipadamente páginas a memoria. A
esta ultima estrategia se le da el nombre de paginación bajo demanda previa
y, a diferencia de la anterior, puede traer a memoria páginas que no van ser
utilizadas. Si su funcionamiento es correcto carga en memoria la/s página/s
que en próximas referencias van a ser utilizadas.
3. La política de ubicación determina en que parte de la memoria va a residir cada
bloque del proceso cuando se trae del almacenamiento secundario. En
paginación no tiene sentido hablar de esa política porque todos los bloques
son de igual tamaño.
PAG.
DIR ACCEDER
EN
SI VALIDA?
MF?
SI
NO NO
DIR NO ACCEDER
VALIDA? NO
SI
2 11 1 12
3 13 2 13
3 14
4
• Comentario:
• Hay veces que sólo se quiere compartir parte del contenido de la página. En este
caso también se debe dar acceso a todo el contenido de la página. No es posible
compartir parte de una página, sino que hay que permitir el acceso compartido a
todo el contenido de la misma.
2.4.1 0.
Supongamos un sistema que gestiona una memoria paginada. Cada página tiene un
tamaño de 2 K. Se pide calcular el máximo espacio de direccionamiento lógico, sabiendo
que la tabla de páginas tiene un tamaño de 28 K y que cada entrada ocupa 16 bits.
Resolución
Para conocer el máximo espacio de direccionamiento debemos saber cuántas entradas,
como máximo, puede albergar la tabla de páginas. Sabiendo el número máximo de páginas
que se pueden referenciar y multiplicándolo por el tamaño de la página, averiguamos el
máximo espacio de direccionamiento lógico. Para calcular el número de entradas de la
tabla de páginas dividiremos el tamaño de la tabla entre lo que ocupa cada entrada.
16 bits = 2 bytes
!" #$%&'( !" . !/0
Número de entradas = = = 14 x 234 entradas
! $%&'(/'*&+,-, !
Si multiplicamos el número de entradas de la tabla de páginas por el tamaño de cada
página sabremos el espacio máximo de direccionamiento lógico.
14 x 210 entradas x 2 K/página = 14 x 210 x 2 x 2 234 = 28 x 220 = 28 M
Comentario:
El número de entradas de la tabla de páginas depende del tamaño de la página: para un
mismo proceso, cuanto menor es el tamaño de la página más entradas tiene la tabla de
páginas. Tanto con paginación como con segmentación si el tamaño de un proceso es
mayor que la memoria física, ese proceso no se puede ejecutar. Esto no ocurre con un
sistema de gestión de memoria virtual ya que en ellos se pueden ejecutar procesos de
mayor tamaño que la memoria física.
EJERCICIOS MEMORIA VIRTUAL
• 2.4.13.
• Nuestro sistema operativo realiza una gestión de memoria virtual. Tenemos un
proceso cuyo espacio lógico de direcciones está formado por 100 páginas. Cada
una de estas páginas tiene un tamaño de 2 K. También sabemos que el tamaño
de la memoria física es de 1 M. Queremos conocer de cuántos bits se componen
tanto la dirección física o real como la lógica o virtual.
• Resolución
4 4 X 6 5 6 8
8 4 8 X 5 5 6 8
9 4 8 9 X 4 5 4 8 X
7 7 8 9 X 5 5 4 8
8 7 8 9 6 5 4 6 X
6 7 6 9 X 5 5 4 6
7 7 6 9 6 5 4 6
8 7 6 8 X 4 5 4 6
6 7 6 8 6 5 4 6
5 5 6 8 X 4 5 4 6
8 5 6 8
Fallo de pagina
Nº pagina
Fig.2.18
Pagina desplazamiento
• 2. La dirección virtual 2033 corresponde al marco 8 y desplazamiento 33 tal
y como se ve en la figura 2.19.
DIRECCION
2033
Pagina desplazamiento
Fig 2.19
Comentario
Si la página a la que hace referencia una dirección virtual no está cargada en
memoria, dicha dirección no se puede traducir. En un sistema con gestión de
memoria paginada, para traducir una dirección virtual a real el primer requisito es
que la página esté asociada a un marco. En caso contrario, lo primero que hay que
hacer es cargar la página en memoria, es decir, asociarla a un marco.
2.4.17 Instante de tiempo Página
Trabajamos en un sistema que soporta memoria 0 0
virtual Paginada y nos piden que calculemos que 3 1
páginas forman un conjunto de trabajo. Sabemos 5 2
que se trabaja con una ventana de 6 unidades de 6 0
tiempo y que la cadena de referencia en función
8 2
del tiempo, es la que se muestra en la tabla 2.9.
11 3
La solución se calculará en función del tiempo.
12 4
14 2
15 5
16 6
18 7
20 8
Resolución
Debemos calcular en cada instante qué páginas forman parte del conjunto de trabajo. Como la
ventana que se utiliza es de 6 unidades de tiempo, el conjunto de trabajo, en un instante, lo
forman las páginas que han sido referenciadas entre ese instante y los cinco anteriores. El
número de páginas que forman el conjunto de trabajo varía de un instante a otro. En la Tabla
2.10 se muestran, entre los instantes 1 y 20, las páginas que forman el conjunto de trabajo y
cuántos componentes (páginas) forman dicho conjunto de trabajo.
Instante de tiempo pagina Cantidad de
paginas
0 0 1
1 0 1
2 0 1
3 0,1 2
4 0,1 2
5 0,1,2 3 • Comentario El conjunto de
6 0,1,2 3 trabajo varía de tamaño de
7 0,1,2 3 un instante a otro. Si
8 0,1,2 3 hubiera más procesos
9 0,1,2 3 ejecutándose. tendríamos
10 0,2 2 varios conjuntos de
11 0,2,3 3 trabajo. uno por proceso.
12 0,2,3,4 4 En la ventana de tiempo
13 2,3,4 3
habría páginas de varios
14 2,3,4,5 3
procesos.
15 2,3,4,5,6 4
16 2,3,4,5,6 5
17 2,3,4,5,6 5
18 2,4,5,6,7 5
19 2,5,6,7 4
20 2,5,6,7,8 5 Fig. 2.10