Sunteți pe pagina 1din 6

IS-344

Teora General de Sistemas


Ingeniera de Sistemas

Captulo IV

GESTION DE MEMORIA

3.2 Intercambio de Memoria


En un sistema batch, la organizacin de la memoria en particiones fijas resulta simple y efectiva. Siempre
que se puedan mantener en memoria suficientes trabajos como para mantener la CPU ocupada, no hay
razn para complicar la organizacin.
En cambio, en un sistema de tiempo compartido la situacin es diferente, pues normalmente hay ms
usuarios que memoria para contener sus procesos, por lo que se hace necesario llevar a disco los procesos
en exceso. En cualquier caso, debe quedar claro que para que pase a ejecucin algunos de estos procesos
que se han llevado a disco, antes hay que traerlo a memoria. Cuando al proceso en ejecucin se le acabe
su porcin de tiempo, es posible que se le vuelva a llevar a memoria secundaria para dejar espacio al
proceso que haya seleccionado el planificador.

El intercambio de memoria requiere un dispositivo de memoria secundaria. Normalmente, ste suele ser un
disco rpido, debe tener suficiente capacidad para acoger las copias de todas las imgenes de memoria de
todos los procesos y debe proporcionar un acceso rpido y directo a estas imgenes. El rea del disco que
contiene este espacio de memoria virtual con el que se realiza el intercambio desde memoria principal,
recibe el nombre de rea de intercambio o rea de swapping.
En la cola de Preparados se mantienen todos BCPs de los procesos dispuestos a ejecutarse (cuyas imgenes
de memoria se encuentran en memoria principal o secundaria). Cuando el planificador elige un proceso
para pasar a ejecucin, llama al dispatcher, el cual, a su vez, comprueba si el proceso seleccionado se
encuentra en memoria principal o no. Si no lo est y no hay memoria libre, el dispatcher saca a un proceso
de memoria a disco y trae a memoria el proceso seleccionado.
Seguidamente realiza el cambio de contexto. Est claro que el tiempo de cambio de contexto en un
sistema con intercambio es bastante alto. Para obtener un buen aprovechamiento de la CPU, la porcin de
tiempo de los procesos deber ser alto en comparacin con el tiempo dedicado al cambio completo de
proceso, es decir, incluyendo el tiempo de intercambio. Pero por otra parte, tenemos que en un sistema de
tiempo compartido si la porcin de tiempo es muy alta, el tiempo de espera de los procesos preparados
sube mucho, lo cual no es en absoluto deseable. Por lo tanto, lo que se debe conseguir es minimizar lo ms
posible el tiempo de intercambio. Para ello hay dos estrategias claras:
Utilizar una memoria secundaria muy rpida.
Intercambiar solamente la memoria necesaria.
La necesidad del primero de estos puntos es obvia. El segundo quiere decir que si en un sistema hay un
rea de usuario de 900 Kbytes, por ejemplo, y hay que sacar un proceso que ocupa 100 Kbytes, no hay por
qu mover a disco un rea de 900 Kbytes, sino solamente los 100 Kbytes ocupados, ya que el tiempo de
intercambio es prcticamente proporcional al tiempo de transferencia, que a su vez es proporcional al
tamao del bloque que se lee o escribe en el disco. Esto obliga a que el sistema operativo conozca la
ocupacin de memoria de cada proceso y a que lleve la cuenta de cada peticin o devolucin de memoria.
Cuando un proceso es sacado a disco, y posteriormente se le vuelve a traer a memoria principal, es posible
que no se le instale en la misma particin de memoria que ocupaba la ltima vez que estuvo en RAM. Esto
UNSCH/QECM

Pgina 1 de 6

Teora General de Sistemas


Ingeniera de Sistemas

IS-344
Captulo IV

puede traer complicaciones si el proceso est realizando operaciones de E/S. Supongamos que un proceso
en ejecucin realiza una operacin de E/S, con lo que el sistema operativo lo pone en espera y lo expulsa a
memoria secundaria para liberar su rea de memoria. Sin embargo, es posible que el dispositivo de E/S
acceda asncronamente a los buffers que el proceso le indic, para dejar/recoger los datos a leer/escribir.
Estos buffers se encontraban en el rea de memoria que ocupaba el proceso cuando se estaba ejecutando,
pero cuando pas a espera y se le expuls al disco, este rea de memoria pas a estar ocupada por otro
proceso. As, es posible que el dispositivo de E/S ahora est leyendo o escribiendo en un rea de memoria
que pertenece a otro proceso distinto del que solicito la operacin de E/S.
Este problema tiene dos soluciones:
o No sacar nunca de memoria a un proceso que espera por una operacin de E/S.
o Que los dispositivos de E/S realicen las operaciones sobre buffers del sistema operativo. De esta
manera, una vez finalizada la operacin de E/S solicitada, cuando el planificador selecciona al
proceso para continuar, se le trae a memoria principal y se transfiere la informacin solicitada (si
es que era una lectura) del buffer del sistema al buffer del proceso. Por ltimo se le cede el
control del procesador.
Conviene recordar que para que un proceso pueda ocupar distintas particiones de memoria durante una
ejecucin completa, se requiere que el mecanismo de reubicacin sea dinmico.

A. MULTIPROGRAMACIN CON PARTICIONES VARIABLES


En principio, un sistema de intercambio podra estar basado en particiones de tamao fijo, de tal forma
que cuando un proceso queda bloqueado en espera, se le puede mover al disco y traer otro a la particin
que deja libre. Pero este sistema no es aconsejable cuando se dispone de poca memoria principal, pues los
programas pequeos desperdician mucha memoria cuando ocupan particiones grandes (fragmentacin
interna). Otro enfoque mejor es el basado en particiones de tamao variable.
Cuando se utilizan particiones variables, el nmero y tamao de los procesos cargados en memoria vara
con el tiempo.
La principal diferencia entre las particiones fijas y las de tamao variable es que en estas ltimas el
nmero, la direccin y el tamao de las particiones vara constantemente a medida que los procesos van y
vienen; mientras que en las de tamao fijo no varan, son fijos.
La flexibilidad de no estar sujeto a un nmero fijo de particiones que resulten demasiado grandes o
demasiado pequeas mejora la utilizacin de la memoria, pero tambin complica los algoritmos de
asignacin, liberacin y contabilidad de la memoria disponible.
Inicialmente toda la memoria de usuario est disponible, organizada como un nico y gran bloque de
memoria libre, un hueco. Cuando un proceso llega y necesita memoria, se busca un hueco suficientemente
grande para el proceso. Si se encuentra uno, el hueco se parte en dos, asignndole nicamente la memoria
requerida, dejando el resto del hueco como un nuevo hueco ms pequeo y disponible para futuras
peticiones.
A medida que se crean procesos, se les pone en una cola de entrada, anotando sus requisitos de memoria.
Cuando se le asigna memoria a uno de estos procesos, pasa a la cola de Preparados y puede competir por la
CPU. Cuando un proceso termina libera la memoria utilizada, con lo que el sistema operativo puede
utilizarla para asignrsela a otro proceso de la cola de entrada.
En un momento dado, se tiene una lista de bloques libres de memoria y sus tamaos. Tambin se dispone
de la cola de entrada de procesos. La memoria se va asignando a los procesos hasta que no haya un hueco
suficientemente grande para el primer proceso de la cola de entrada, o bien se busca en la cola un proceso
cuyos requisitos de memoria sean menores y puedan satisfacerse con alguno de los bloques disponibles.

UNSCH/QECM

Pgina 2 de 6

Teora General de Sistemas


Ingeniera de Sistemas

IS-344
Captulo IV

En general siempre hay un conjunto de huecos de distintos tamaos dispersos por toda la memoria. Cuando
un proceso llega y necesita memoria, se busca en el conjunto de huecos uno que sea suficientemente
grande. Si el hueco es demasiado grande, se parte en dos: uno se asigna al proceso, y el otro se devuelve al
conjunto de huecos. Cuando un proceso finaliza, se libera su bloque de memoria, que se pone de vuelta en
el conjunto de huecos. Si este hueco resulta estar adyacente a otros huecos (a otros bloques libres), se
unen los bloques adyacentes en un nico bloque del tamao total. Ahora hay que comprobar si hay ms
procesos esperando memoria y si este nuevo bloque liberado y recombinado puede satisfacer las demandas
de cualquiera de estos procesos que estn esperando.
En algn momento puede darse el caso de que haya mucha memoria libre, pero distribuida entre muchos
huecos pequeos no adyacentes. Entonces tenemos fragmentacin externa. La nica solucin a la
fragmentacin externa es la compactacin que consiste en mover los bloques asignados, de tal forma que
queden adyacentes, dejando entonces grandes huecos libres que s pueden asignarse a procesos. Obsrvese
que la compactacin es posible gracias a que se utiliza un sistema de reubicacin dinmica, por lo que todo
lo que hay que hacer es mover el programa a su nueva posicin de memoria y actualizar el registro base
con la nueva direccin de comienzo.
La compactacin tambin tiene su coste. Tngase en cuenta que hay que mover todos los procesos hacia un
extremo de la memoria, con lo que los huecos se van moviendo hacia el extremo opuesto, hasta formar un
nico gran bloque. Realizar este proceso puede resultar bastante costoso en tiempo.

Consideremos ahora la cantidad de memoria que se le debe asignar a un proceso cuando se le crea o se le
lleva a memoria principal. Si los procesos se crean con un tamao fijo que nunca cambia, la gestin de
memoria es simple: se asigna exactamente lo que necesita, ni ms ni menos. Pero si los procesos pueden
crecer, por ejemplo porque realizan peticiones dinmicas de memoria, se presenta un problema cuando los
procesos intentan crecer (necesitan ms memoria de la requerida inicialmente). Si hay un hueco libre
adyacente al proceso, se le puede asignar el hueco al proceso y permitirle expandirse. Pero si el proceso
est adyacente a otro proceso, el que pretende expandirse tendr que moverse a otro hueco ms grande, o
bien habr que sacar algn proceso a disco para dejar espacio libre.
Si se espera que los procesos de un sistema puedan aumentar su tamao a medida que se ejecutan, es
conveniente asignarles inicialmente un poco de memoria extra, para evitar tener que moverles en caso de
que necesite ms memoria durante la ejecucin. Si se acaba este espacio, entonces ya no quedar ms
remedio que mover el proceso a otro hueco mayor.

UNSCH/QECM

Pgina 3 de 6

Teora General de Sistemas


Ingeniera de Sistemas

IS-344
Captulo IV

GESTIN DE BLOQUES DE MEMORIA


Estudiaremos dos mtodos utilizados por los sistemas operativos para llevar la cuenta de la memoria
utilizada y de los huecos libres:
Mapa de bits
Listas
Sistema buddy
i) Mapa de bits
Con este mtodo de gestin de memoria, sta se divide en unidades de asignacin, cuyo tamao puede ir
desde unas cuantas palabras a varios Kbytes. Como se puede ver en la Figura 10, cada una de estas
unidades de asignacin se corresponde con un bit en el mapa de bits de memoria; la primera unidad con el
primer bit, la segunda con el segundo, etc., de tal forma que si el bit est a 0 indica que la unidad de
asignacin correspondiente se encuentra libre, mientras que si est a 1 quiere decir que la unidad est
ocupada, o sea, asignada a algn proceso.
El tamao de la unidad de asignacin es una cuestin muy importante. Cuanto ms pequea sea la unidad,
mayor ser el mapa de bits. Si la unidad de asignacin es de gran tamao, habr pocas unidades, luego el
mapa de bits ocupar poco espacio; pero por contra, tenemos que puede empezar a ser significativo el
espacio correspondiente al 50% de memoria que por trmino medio se desperdicia en la ltima de las
unidades asignadas al proceso.
Este mtodo es simple y sencillo de implementar, pero tiene la desventaja de que cuando se buscan n
unidades consecutivas de memoria para asignar a algn proceso, se debe buscar en el mapa de bits hasta
encontrar n bits consecutivos a 0.
Aunque esta operacin es lenta, los procesadores actuales suelen incluir instrucciones de bsquedas de
cadenas de bits, favoreciendo as la utilizacin de los mapas de bits.

ii) Listas
Otra forma de llevar la cuenta de la memoria utilizada es manteniendo listas enlazadas de bloques libres y
bloques asignados. En este caso, la memoria se representa como una lista de bloques, en la que cada
entrada o elemento de la lista indica un hueco (bloque libre), con su direccin, tamao, y direccin del
siguiente elemento.
La lista de huecos suele mantenerse ordenada por la direccin de estos, pues as se facilita su actualizacin
cuando se lleva un proceso a memoria o termina su ejecucin. Un proceso que termina tiene dos bloques
adyacentes (excepto si est al principio o al final de la memoria), cada uno de los cuales puede estar libre
u ocupado por otro proceso. Si alguno de estos bloques est libre, debe compactarse con el bloque del
proceso finalizado para formar un nico bloque libre. Esta compactacin requiere actualizar la lista de
huecos, pues habr que modificar, al menos, la nueva longitud del bloque y, dependiendo de la posicin
relativa de los bloques compactados, su direccin de comienzo.

UNSCH/QECM

Pgina 4 de 6

Teora General de Sistemas


Ingeniera de Sistemas

IS-344
Captulo IV

Este sistema de gestin en el que los bloques libres se mantienen en una lista, se presta muy bien a la
implementacin de estos algoritmos:
El primero que sirva (first fit)
El siguiente que sirva (next fit)
El que mejor se adapte (best fit)
El que peor se adapte (worst fit)
El algoritmo ms simple es el primero que sirva ( El gestor de memoria recorre la lista hasta encontrar un
hueco que sea suficientemente grande para satisfacer la peticin. Si el hueco elegido no es exactamente
del tamao solicitado, se divide en dos partes: una (del tamao solicitado) se le asigna al proceso que lo
solicit, y la otra (con la memoria sobrante) se deja como un hueco de menor tamao.
Pues bien, lo que genera esto, a la larga, es que cerca de la cabecera de la cola se empiecen a formar una
serie de bloques no contiguos y de pequeo tamao, inservibles para ningn proceso. A partir de esta
situacin, cada vez que se realiza una bsqueda, hay que recorrer esta serie de bloques pequeos de
manera infructuosa, hasta llegar a los bloques que todava no han sido partidos, o no se han fraccionado
demasiado. Esta fragmentacin externa es inevitable, pero lo malo es la prdida de tiempo que supone el
atravesar reiteradamente la lista de los bloques pequeos agolpados al comienzo de la lista.
Este problema se soluciona con el siguiente que sirva. Con este algoritmo, la lista es circular, es decir,
que el ltimo nodo apunta al primero y la cabecera no es siempre la misma, sino que va rotando por la
lista, es decir, que el orden de la lista va rotando. Comienza por apuntar al primer bloque (en orden
creciente de direccin), pero tras realizar la primera bsqueda de un bloque, la cabecera apunta ahora al
bloque siguiente al asignado y as sucesivamente. Esto hace que los bloques fraccionados no se amontonen
en una parte de la lista sino que se distribuyan de manera uniforme. As, cada vez que se comienza una
bsqueda, no habr que atravesar todos los bloques pequeos, sino solamente alguno, con la consecuente
ganancia de tiempo.
Si bien en el primero que sirva se amontonaban los huecos pequeos al comienzo de la lista, dejando al
final grandes particiones libres, ahora la fragmentacin de la memoria es uniforme en el espacio de
direcciones, encontrndonos con que, a la larga, ya no tenemos huecos grandes como en el algoritmo
anterior, lo cual es un problema si llega un proceso con grandes necesidades de memoria.
Otro algoritmo muy conocido es el mejor que se adapte, que recorre la lista completa para seleccionar el
hueco que mejor se adapte, o sea, el menor de los que sirvan, para no fraccionar un bloque grande que
pudiera servir para alguna peticin posterior.
Este algoritmo es ms lento que los anteriores, pues tiene que recorrer la lista entera por cada peticin.
Sorprendentemente tambin desperdicia ms memoria, pues tiende a ir rellenando la memoria con huecos
tan pequeos que resultan inservibles. En cambio, el primero que sirva y el siguiente que sirva, al ir
fraccionando bloques, por termino medio generan bloques ms grandes que s pueden ser aprovechables.
Para solucionar el problema de el que mejor se adapte, se pens en utilizar la poltica opuesta, es decir,
elegir el que peor se adapte; o sea, que se selecciona el bloque ms grande de la lista y se parte en dos,
generando as un nuevo bloque libre que, aunque ms pequeo, seguramente tendr un tamao
significativo, evitando as la generacin de huecos pequeos. Sin embargo, la simulacin ha demostrado
que tampoco ha resultado ser una buena idea.
Para acelerar las bsquedas, puede ordenarse la lista por orden creciente de los tamaos de los bloques. El
inconveniente que aparece con esta ordenacin es la sobrecarga que se genera para mantener la lista
ordenada cada vez que se pide o se libera un bloque.

UNSCH/QECM

Pgina 5 de 6

Teora General de Sistemas


Ingeniera de Sistemas

IS-344
Captulo IV

Para acelerar la bsqueda de los bloques se ha desarrollado otro algoritmo conocido como Quick fit, que
mantiene listas separadas de bloques para los tamaos ms usuales, por ejemplo, una lista para bloques de
4 Kbytes, otra para los de 8 Kbytes, 12 Kbytes, etc. As, encontrar un bloque del tamao requerido es
extremadamente rpido. Su desventaja es la de todos los esquemas basados en el orden de bloques por su
tamao, o sea, la sobrecarga que se produce a la hora de liberar un bloque, pues resulta difcil encontrar a
sus vecinos para comprobar si se pueden compactar con l.
Existe adems otras formas de asignacin, entre ellas el sistema Buddy o compaero, entre otros.
iii) Sistema Buddy
Como hemos visto, el problema de los algoritmos basados en el orden de los bloques por su tamao es la
lentitud en la fase de liberacin de un bloque. El sistema Buddy (o de los compaeros) es un algoritmo que
aprovecha el hecho de que los ordenadores utilizan nmeros binarios en las direcciones, para asi facilitar la
tarea de la compactacin de huecos adyacentes cuando se libera un bloque. Veamos en que consiste.
El gestor de memoria mantiene una serie de listas de bloques libres, una para los de tamao 1 byte, otra
para 2, otra para 4, 8, 16, etc. hasta Ilegar a n, siendo n el tamao total del rea de memoria libre inicial.

La ventaja de este algoritmo sobre otros que tambin ordenan conforme al tamao, es que cuando se
libera un bloque de tamao 2k bytes, el gestor de memoria solamente tiene que buscar en la lista de
huecos de longitud 2k para ver si la compactacin es posible. La desventaja es su ineficiencia en el
aprovechamiento de la memoria, debido a los redondeos hasta una potencia de 2 en el tamao de los
bloques asignados, dando lugar, en consecuencia, a una fragmentacin interna. La gestin de memoria del
sistema operativo Linux tiene lugar en dos niveles, disponiendo de gestin de memoria virtual (a alto nivel)
y de gestin de memoria fsica a bajo nivel. Para la gestin de memoria fsica utiliza este algoritmo Buddy
o de los Compaeros.

UNSCH/QECM

Pgina 6 de 6

S-ar putea să vă placă și