Documentos de Académico
Documentos de Profesional
Documentos de Cultura
GESTIÓN DE MEMORIA
El objetivo es estudiar como el sistema operativo gestiona
la memoria. La parte del sistema operativo que se encarga
de esta gestión se llama gestor de memoria.
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.
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
8k
D A 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 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.
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
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
En el mapa de bits existe una entrada por cada marco y cada entrada ocupa un bit.
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.
Cuando el proceso se carga en memoria se le asigna tantas zonas memoria como
segmentos tenga; el tamaño de las zonas será el mismo que el de los segmentos. No
es necesario que las zonas designadas sean contiguas, pero el contenido de un
segmento debe estar situado en un bloque contiguo de memoria.
Cuando se carga el proceso en memoria se le asignan tantas zonas de memoria como
segmentos tenga y se rellena la tabla de segmentos. En segmentación, la protección
se establece en función del límite o tamaño del segmento. También se pueden
establecer distintos derechos de acceso a cada segmento del proceso, mediante la
inclusión de bits de acceso en la tabla de segmentos. La información de un segmento
es compartida por dos o más procesos, si se incluye en la tabla de segmentos de
cada proceso la dirección base del segmento a compartir.
Uno de los inconvenientes que presenta la segmentación es que existe un tamaño
máximo de segmento y puede ocurrir que algunos procesos tengan segmentos
mayores que el tamaño máximo. Otro inconveniente Importante es que, de vez en
cuando, se necesita compactar la memoria.
EJERCICIO SEGMENTACIÓN:
• En un sistema, el tamaño de la memoria es de 1 M y se sigue un esquema de gestión de memoria segmentado. El tamaño
del segmento varía en función de las necesidades de los distintos procesos que van llegando al sistema. Todo proceso
tiene tres segmentos: el de código, el de datos y el de pila. En el instante uno la tabla de segmentos tiene el contenido
que se muestra en la Tabla 2.6. A partir de este instante llegan al sistema dos procesos (B, C), cuyas características se
muestran en la Tabla 2.7, junto con las características del proceso que estaba en el sistema (A). Se pide:
• 1.¿Cuándo se carga en memoria el proceso B? ¿Y el C? Muestre el contenido de la tabla de segmentos después de
cargarse cada proceso.
• 2. ¿Se produce algún tipo de fragmentación?
• 3.Después de que se han cargado en memoria los procesos B y C, vamos a suponer que llegan al sistema otros dos
procesos (D, E). Los instantes de llegada, así como las características de estos dos nuevos procesos, se muestran en la
Tabla 2.7. Se pide; dibuje el contenido de la nueva tabla de segmentos.
• Resolución
• ■ El proceso B se cargará en memoria en el instante en el que llegue, ya que hay sitio disponible. Concretamente, sus
segmentos se situarán a continuación de los segmentos del proceso A. El con-tenido de la tabla de segmentos después de
llegar este proceso se muestra en la Figura 2.11. En esta figura también se puede ver el estado de la memoria después de
cargarse el proceso B. TRABAJO T.LLEGADA DURACION TAMAÑO
500K 524K
TABLA LIBRE
2.6 estado de segmentos después de cargarse el proceso A
TRABAJO T.LLEGADA DURACION TAMAÑO
A 0 6 CODIGO 250K
PILA 50K
DATOS 100K
B 1 5 CODIGO 350K
PILA 50K
DATOS 100K
C 2 7 CODIGO 300K
PILA 50K
DATOS 100K
D 8 15 CODIGO 250K
PILA 50K
DATOS 100K
E 14 7 CODIGO 364K
PILA 50K
DATOS 100K
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
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
4 4 X 6 5 8 6
8 4 8 X 5 5 8 6
9 4 8 9 X 4 5 4 6 x
7 7 8 9 X 5 5 4 6
8 7 8 9 6 5 4 6
6 7 8 6 X 5 5 4 6
7 7 8 6 6 5 4 6
8 7 8 6 4 5 4 6
6 7 8 6 6 5 4 6
5 5 8 6 x 4 5 4 6
8 5 8 6
Fallo de pagina
Nº pagina
Pagina desplazamiento
• 2. La dirección virtual 2033 corresponde al marco 8 y desplazamiento 33 tal
y como se ve
DIRECCION
2033
Pagina desplazamiento
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
6 0,1,2 3
7 0,1,2 3
8 0,1,2 3
9 0,1,2 3
10 0,2 2
11 0,2,3 3
12 0,2,3,4 4
13 2,3,4 3
14 2,3,4 3
15 2,3,4,5 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
• Comentario El conjunto de trabajo varía de tamaño de un instante a otro. Si
hubiera más procesos ejecutándose. tendríamos varios conjuntos de trabajo.
uno por proceso. En la ventana de tiempo habría páginas de varios procesos.