Resumen de Administracion de Memoria
Resumen de Administracion de Memoria
Resumen de Administracion de Memoria
La memoria es uno de los principales recursos de la computadora, la cual debe de administrarse con
mucho cuidado. Aunque actualmente la mayora de los sistemas de cmputo cuentan con una alta
capacidad de memoria, de igual manera las aplicaciones actuales tienen tambin altos requerimientos
de memoria, lo que sigue generando escasez de memoria en los sistemas multitarea y/o multiusuario.
La parte del sistema operativo que administra la memoria se llama administrador de memoria y su labor
consiste en llevar un registro de las partes de memoria que se estn utilizando y aquellas que no, con el
fin de asignar espacio en memoria a los procesos cuando stos la necesiten y liberndola cuando
terminen, as como administrar el intercambio entre la memoria principal y el disco en los casos en los
que la memoria principal no le pueda dar capacidad a todos los procesos que tienen necesidad de ella.
Los sistemas de administracin de memoria se pueden clasificar en dos tipos: los que desplazan los
procesos de la memoria principal al disco y viceversa durante la ejecucin y los que no.
El propsito principal de una computadora es el de ejecutar programas, estos programas, junto con la
informacin que accesan deben de estar en la memoria principal (al menos parcialmente) durante la
ejecucin.
Para optimizar el uso del CPU y de la memoria, el sistema operativo debe de tener varios procesos a la
vez en la memoria principal, para lo cual dispone de varias opciones de administracin tanto del
procesador como de la memoria. La seleccin de uno de ellos depende principalmente del diseo del
hardware para el sistema. A continuacin se observarn los puntos correspondientes a la administracin
de la memoria.
MEMORIA REAL
La memoria real o principal es en donde son ejecutados los programas y procesos de una computadora
y es el espacio real que existe en memoria para que se ejecuten los procesos. Por lo general esta
memoria es de mayor costo que la memoria secundaria, pero el acceso a la informacin contenida en
ella es de ms rpido acceso. Solo la memoria cache es ms rpida que la principal, pero su costo es a su
vez mayor.
SIN INTERCAMBIO
Esta organizacin facilita la programacin de una aplicacin al dividirla en dos o ms procesos. Adems
ofrece la capacidad de tener ms de un proceso a la vez en memoria as puede ofrecer servicios a varios
usuarios a la vez.
Para poder implementar la multiprogramacin, se puede hacer uso de particiones fijas o variables en la
memoria. En el caso de las particiones fijas, la memoria se puede organizar dividindose en diversas
partes, las cuales pueden variar en tamao. Esta particin la puede hacer el usuario en forma manual, al
iniciar una sesin con la mquina.
Una vez implementada la particin, hay dos maneras de asignar los procesos a ella. La primera es
mediante el uso de una cola nica que asigna los procesos a los espacios disponibles de la memoria
conforme se vayan desocupando. El tamao del hueco de memoria disponible es usado para localizar en
la cola el primer proceso que quepa en l. Otra forma de asignacin es buscar en la cola el proceso de
tamao mayor que se ajuste al hueco, sin embargo hay que tomar en cuenta que tal mtodo discrimina
a los procesos ms pequeos. Dicho problema podra tener solucin si se asigna una particin pequea
en la memoria al momento de hacer la particin inicial, el cual sera exclusivo para procesos pequeos.
CON INTERCAMBIO
Este esquema fue originalmente usado por el sistema operativo IBM OS/360 (llamado MFT), el cual ya
no est en uso.
El sistema operativo lleva una tabla indicando cules partes de la memoria estn disponibles y cules
estn ocupadas. Inicialmente, toda la memoria est disponible para los procesos de usuario y es
considerado como un gran bloque o hueco nico de memoria. Cuando llega un proceso que necesita
memoria, buscamos un hueco lo suficientemente grande para el proceso. Si encontramos uno, se asigna
nicamente el espacio requerido, manteniendo el resto disponible para futuros procesos que requieran
de espacio.
Cuando un proceso llega y necesita memoria, el sistema operativo busca en la tabla de huecos alguno lo
suficientemente grande para el proceso. Si el hueco es muy grande, lo parte en dos. Una parte es
asignada al proceso y la otra se identifica como hueco. Cuando el proceso termina y la memoria es
liberada, el espacio es identificado como un hueco ms en la tabla y si el nuevo hueco es adyacente con
otro, ambos huecos se unen formando un solo hueco ms grande. En ese momento se debe de checar si
no existen procesos a los que este nuevo hueco pueda darles cabida.
El proceso de compactacin del punto anterior es una instancia particular del problema de asignacin de
memoria dinmica, el cual es el cmo satisfacer una necesidad de tamao n con una lista de huecos
libres. Existen muchas soluciones para el problema. El conjunto de huecos es analizado para determinar
cul hueco es el ms indicado para asignarse. Las estrategias ms comunes para asignar algn hueco de
la tabla son:
Primer ajuste: Consiste en asignar el primer hueco con capacidad suficiente. La bsqueda puede iniciar
ya sea al inicio o al final del conjunto de huecos o en donde termin la ltima bsqueda. La bsqueda
termina al encontrar un hueco lo suficientemente grande.
Mejor ajuste: Busca asignar el espacio ms pequeo de los espacios con capacidad suficiente. La
bsqueda se debe de realizar en toda la tabla, a menos que la tabla est ordenada por tamao. Esta
estrategia produce el menor desperdicio de memoria posible.
Peor ajuste: Asigna el hueco ms grande. Una vez ms, se debe de buscar en toda la tabla de huecos a
menos que est organizada por tamao. Esta estrategia produce los huecos de sobra ms grandes, los
cuales pudieran ser de ms uso si llegan procesos de tamao mediano que quepan en ellos.
Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son mejores que el peor
ajuste en cuanto a minimizar tanto el tiempo del almacenamiento. Ni el primer o el mejor ajuste es
claramente el mejor en trminos de uso de espacio, pero por lo general el primer ajuste es ms rpido.
Este tipo de administracin divide la memoria en unidades de asignacin, las cuales pueden ser tan
pequeas como unas cuantas palabras o tan grandes como varios kilobytes. A cada unidad de asignacin
le corresponde un bit en el mapa de bits, el cual toma el valor de 0 si la unidad est libre y 1 si est
ocupada (o viceversa).
Un mapa de bits es una forma sencilla para llevar un registro de las palabras de la memoria en una
cantidad fija de memoria, puesto que el tamao del mapa slo depende del tamao de la memoria y el
tamao de la unidad de asignacin.
1.2.3.- Administracin de la memoria con listas ligadas
Otra forma de mantener un registro de la memoria es mediante una lista ligada de los segmentos de
memoria asignados o libres, en donde un segmento puede ser un proceso o un hueco entre dos
procesos.
1.2.5.- Fragmentacin
La fragmentacin es la memoria que queda desperdiciada al usar los mtodos de gestin de memoria
que se vieron en los mtodos anteriores. Tanto el primer ajuste, como el mejor y el peor producen
fragmentacin externa.
La fragmentacin es generada cuando durante el reemplazo de procesos quedan huecos entre dos o
ms procesos de manera no contigua y cada hueco no es capaz de soportar ningn proceso de la lista de
espera. Tal vez en conjunto si sea espacio suficiente, pero se requerira de un proceso de
defragmentacin de memoria o compactacin para lograrlo. Esta fragmentacin se denomina
fragmentacin externa.
Existe otro tipo de fragmentacin conocida como fragmentacin interna, la cual es generada cuando se
reserva ms memoria de la que el proceso va realmente a usar. Sin embargo a diferencia de la externa,
estos huecos no se pueden compactar para ser utilizados. Se debe de esperar a la finalizacin del
proceso para que se libere el bloque completo de la memoria.
MEMORIA VIRTUAL
PAGINACIN
Hasta ahora, los mtodos que hemos visto de la administracin de la memoria principal, nos han dejado
con un problema: fragmentacin, (huecos en la memoria que no pueden usarse debido a lo pequeo de
su espacio) lo que nos provoca un desperdicio de memoria principal.
Una posible solucin para la fragmentacin externa es permitir que espacio de direcciones lgicas lleve a
cabo un proceso en direcciones no contiguas, as permitiendo al proceso ubicarse en cualquier espacio
de memoria fsica que est disponible, aunque est dividida. Una forma de implementar esta solucin es
a travs del uso de un esquema de paginacin. La paginacin evita el considerable problema de ajustar
los pedazos de memoria de tamaos variables que han sufrido los esquemas de manejo de memoria
anteriores. Dado a sus ventajas sobre los mtodos previos, la paginacin, en sus diversas formas, es
usada en muchos sistemas operativos.
Al utilizar la memoria virtual, las direcciones no pasan en forma directa al bus de memoria, sino que van
a una unidad administradora de la memoria (MMU Memory Management Unit). Estas direcciones
generadas por los programas se llaman direcciones virtuales y conforman el hueco de direcciones
virtuales. Este hueco se divide en unidades llamadas pginas. Las unidades correspondientes en la
memoria fsica se llaman marcos para pgina o frames. Las pginas y los frames tienen siempre el mismo
tamao.
Cada pgina tiene un nmero que se utiliza como ndice en la tabla de pginas, lo que da por resultado
el nmero del marco correspondiente a esa pgina virtual. Si el bit presente / ausente es 0, se provoca
un sealamiento (trap) hacia el sistema operativo. Si el bit es 1, el nmero de marco que aparece en la
tabla de pginas se copia en los bits de mayor orden del registro de salida, junto con el ajuste (offset) de
12 bits, el cual se copia sin modificaciones de la direccin virtual de entrada. Juntos forman una
direccin fsica de 15 bits. El registro de salida se coloca entonces en el bus de la memoria como la
direccin en la memoria fsica.
En teora, la asociacin de las direcciones virtuales con las fsicas se efecta segn lo descrito. El nmero
de pgina virtual se divide en un nmero de pgina virtual (los bits superiores)y un ajuste (los bits
inferiores). El nmero de pgina virtual se utiliza como un ndice en la tabla de pginas para encontrar la
entrada de esa pgina virtual. El nmero de marco (si existe) se determina a partir de la tabla de pginas.
El nmero de marco se asocia al extremo superior del ajuste y reemplaza al nmero de pgina virtual
para formar una direccin fsica que se puede enviar a la memoria.
La finalidad de la tabla de pginas es asociar las pginas virtuales con los marcos. En trminos
matemticos, la tabla de pginas es una funcin, cuyo argumento es el nmero de pgina virtual y como
resultado el nmero del marco fsico. Mediante el resultado de esta funcin, se puede reemplazar el
campo de la pgina virtual de una direccin virtual por un campo de marco, lo que produce una
direccin en la memoria fsica. Sin embargo hay que enfrentar dos aspectos fundamentales:
El primer punto proviene del hecho de que las computadoras modernas utilizan direcciones virtuales de
al menos 32 bits. Por ejemplo, si el tamao de pgina es de 4K, un hueco de direcciones de 32 bits tiene
un milln de pginas; en el caso de un hueco de direcciones de 64 bits, se tendra ms informacin de la
que uno quisiera contemplar.
El segundo punto es consecuencia del hecho de que la asociacin virtual fsica debe hacerse en cada
referencia a la memoria. Una instruccin comn tiene una palabra de instruccin y tambin un
operando de memoria. Entonces es necesario hacer una, dos o ms referencias a la tabla de pginas por
cada instruccin.
Con el uso del mtodo de paginacin se puede llegar a saturar la memoria si se incrementa demasiado
el nivel de multiprogramacin. Por ejemplo, si se corren seis procesos, cada uno con un tamao de diez
pginas de las cuales en realidad slo utiliza cinco, se tiene un mayor uso del CPU y con marcos de sobra.
Pero pudiera suceder que cada uno de esos procesos quiera usar las diez pginas resultando en una
necesidad de 60 marcos, cuando solo hay 40 disponibles.
Esto provoca sobre-asignacin y mientras un proceso de usuario se est ejecutando, ocurre un fallo de
pgina. El hardware se bloquea con el sistema operativo, el cual checa en sus tablas internas y se da
cuenta que es un fallo de pgina y no un acceso ilegal de memoria. El sistema operativo determina si la
pgina est residiendo en disco, pero tambin determina que no hay marcos de memoria disponibles en
la lista de marcos libres.
Al ocurrir el fallo de pgina, el sistema operativo debe elegir una pgina para retirarla de la memoria y
usar el espacio para la pgina que se necesita para desbloquear el sistema y que el hardware pueda
seguir trabajando. Si la pgina por eliminar de la memoria fue modificada, se debe volver a escribir al
disco para mantener la informacin actualizada; de lo contrario, si la pgina no fue modificada no es
necesario rescribir la informacin a disco y la pgina que se carga simplemente se escribe sobre la
pgina a borrar en memoria. La figura 8 muestra grficamente un intercambio de pginas entre la
memoria principal y el disco (memoria secundaria).
Memoria Principal
Memoria Secundaria
Es el algoritmo ms sencillo dado que no requiere tener ninguna informacin, sin embargo, por no hacer
uso de dicha informacin sobre el comportamiento del proceso, no puede lograr un buen desempeo.
Este algoritmo debe de tener el menor ndice de fallos de pgina de todos los algoritmos. En teora, este
algoritmo debe de reemplazar la pgina que no va a ser usada por el periodo ms largo de tiempo.
Tal algoritmo existe y ha sido llamado OPT o MIN, pero se usa nicamente para estudios de
comparaciones. Por ejemplo, puede resultar muy til saber que aunque algn nuevo algoritmo no sea
ptimo, est entre el 12.3% del ptimo y entre el 4.7% en promedio.
Estos bits pueden ser utilizados para desarrollar un algoritmo de reemplazo que cuando inicie el proceso,
el sistema operativo asigne un valor de 0 a ambos bits en todas las pginas. En cada interrupcin de reloj,
limpie el bit R para distinguir cules pginas tuvieron referencia y cules no.
Cuando ocurre un fallo de pgina, el sistema operativo revisa ambos bits en todas las pginas y las
clasifica de la siguiente manera:
Una vez obtenida la clasificacin, elimina una pgina de manera aleatoria de la primera clase no vaca
con el nmero ms pequeo. Esto porque para el algoritmo es mejor eliminar una pgina modificada sin
referencias en al menos un intervalo de reloj, que una pgina en blanco de uso frecuente.
A pesar de que este algoritmo no es el ptimo, es fcil de implementar y de comprender y con mucha
frecuencia es el ms adecuado.
2.1.2.4.- Algoritmo de reemplazo "Primero en entrar, primero en salir" (FIFO)
El algoritmo ms sencillo para remplazo de pginas es el FIFO (First In First Out). Este algoritmo asocia
a cada pgina el momento en que sta fue trada a memoria. Cuando una pgina debe ser reemplazada
se selecciona a la ms antigua.
Al igual que el algoritmo aleatorio, este algoritmo es fcil de comprender y de programar. Sin embargo,
su desempeo no siempre es del todo bueno. La pgina reemplazada puede ser un mdulo de
inicializacin que fue usado hace mucho tiempo y ya no se tiene necesidad de l. Por otro lado, puede
contener una variable de uso muy frecuente que fue inicializada de manera temprana y est en uso
constante.
Este algoritmo es una modificacin del FIFO. El algoritmo hace uso del bit de referencia de la pgina.
Cuando una pgina ha sido seleccionada para reemplazo, se revisa el bit de referencia. Si tiene valor de
0, se procede a reemplazar la pgina. Si por el contrario, el bit de referencia es 1 se le da a la pgina una
segunda oportunidad.
Cuando esto sucede, se le cambia el bit de referencia a 0 y se actualiza su tiempo de llegada al tiempo
actual para que la pgina se colocada al final de la cola. De esta manera, la pgina espera todo un ciclo
completo de pginas para ser entonces reemplazada.
Cuando se presenta un fallo de pgina, el algoritmo revisa la pgina a la que est apuntando la manecilla.
Si el bit de referencia es 0, la pgina es reemplazada con la nueva y la manecilla avanza una posicin. Si
el bit es 1, entonces se limpia (cambia a 0) y la manecilla avanza a la siguiente pgina y as
sucesivamente hasta encontrar una con bit 0.
Este algoritmo es una buena aproximacin al ptimo y se basa en al observacin de que las pginas de
uso frecuente en las ltimas instrucciones se utilizan con cierta probabilidad en las siguientes. De la
misma manera, es probable que las pginas que no hayan sido utilizadas durante mucho tiempo
permanezcan sin uso por bastante tiempo. Implementando el algoritmo con esta base, al ocurrir un fallo
de pgina, se elimina la pgina que no haya sido utilizada durante el tiempo ms grande. De ah su
denominacin: menor uso reciente (LRU - Least Recent Use).
A diferencia de los algoritmos anteriores, el LRU tiene un mejor rendimiento en cuanto al tiempo de
aprovechamiento del CPU y del uso de la memoria. Sin embargo, el problema con este algoritmo es que
su implementacin es muy cara, ya que requiere de una asistencia considerable de hardware. Otro
problema es el de determinar un orden para los marcos definido por el tiempo de menor uso. Para ste
ltimo hay dos posibles implementaciones:
Pilas: Otra aproximacin para implementar el reemplazo LRU es la de tener una pila con los nmeros de
pginas. Siempre que se hace referencia a una pgina, se quita de la pila y se pone en la parte superior.
De esta manera, la parte superior de la pila es la pgina de uso ms reciente y la de abajo es la LRU,
SEGMENTACIN
Otra opcin para el manejo de la memoria es usar una forma de liberar al programador de la tarea del
control de las tablas en expansin y contraccin, de la misma forma que la memoria virtual elimina la
preocupacin por organizar el programa en una serie de proyectos.
Esto se puede lograr dotando a la mquina de varios espacios independientes de direcciones llamados
segmentos. Cada segmento tiene una serie lineal de direcciones, desde 0 hasta cierto mximo. La
longitud de cada segmento puede variar de 0 hasta un mximo permitido. Los distintos segmentos
pueden tener y de hecho tienen por lo general, longitudes distintas. Adems, la longitud de un
segmento puede variar durante la ejecucin. La longitud de un segmento de la pila puede crecer si algo
entra a la pila y decrecer si algo sale de ella.
Puesto que cada segmento constituye un espacio independiente de direcciones, los distintos segmentos
pueden crecer o reducirse en forma independiente sin afectar a los dems.
La segmentacin tambin facilita el uso de procedimientos o datos compartidos entre varios procesos.
Un ejemplo comn son las bibliotecas compartidas (Shared DLLs). Es frecuente que las estaciones de
trabajo modernas que ejecutan sistemas avanzados, con ventanas, tengan bibliotecas grficas de
tamao muy grande que se compilan casi en todos los programas. En un sistema segmentado, la
biblioteca grfica se puede colocar en un segmento y compartirse entre varios procesos, sin necesidad
de tenerla en el espacio de direcciones de cada proceso.
Aunque tambin es posible tener bibliotecas compartidas sin los sistemas con paginacin pura, es
mucho ms complejo. De hecho, estos sistemas simulan la segmentacin.
En el sistema MULTICS, una direccin lgica est formada por un nmero de segmento de 18-bit y un
offset de 16 bit. Aunque este esquema crea un espacio de direccin de 34-bit, la sobrecarga en la tabla
de segmentos es tolerable; solo se requiere de las suficientes localidades en la tabla de segmentos como
haya segmentos, puesto que no debe haber localidades vacas.
Sin embargo, con segmentos de palabras de 64K, es donde cada una consiste de 36 bits, el tamao
promedio de segmento puede ser grande y se podra presentar un problema de fragmentacin externa.
Aunque no lo fuera, el tiempo de bsqueda para ubicar un segmento, usando primer ajuste o mejor
ajuste, puede ser prolongado. Lo que puede causar desperdicio de memoria debido a la fragmentacin
externa, o desperdicio de tiempo por las largas bsquedas o ambas.
Ahora se debe de tener una tabla de pginas individual para cada segmento. Sin embargo, dado que
cada segmento est limitado en tamao por su ubicacin en la tabla de segmentos, la tabla de pginas
no tiene que ser de tamao completo, solo requiere de los espacios que son realmente necesarios.
Al igual que en la paginacin, la ltima pgina de cada segmento, por lo general no estar totalmente
llena. En consecuencia, se tiene, en promedio, una fragmentacin interna de media pgina por
segmento.
El sistema operativo IBM OS/2 de 32 bits es un sistema operativo que corre con las arquitecturas del
procesador Intel 386 y 486. El 386 una la segmentacin con paginacin para su manejo de memoria. El
nmero mximo de segmentos por proceso es de 16K y cada segmento puede llegar a ser de hasta 4
gigabytes. El tamao de pgina es de 4K.
El espacio de direcciones lgicas est dividido en dos particiones. La primera particin consiste en
segmentos de hasta 8K los cuales son privados para ese proceso. La segunda particin tambin consiste
en segmentos de hasta 8K, los cuales son compartidos entre todos los procesos. La informacin de la
primera particin es guardada en la tabla descriptora local (LDT Local Descriptor Table), y la de la
segunda particin es guardada en la tabla descriptora global (GDT Global Descriptor Table). Cada
registro de las tablas LDT y GDT consiste de 8 bytes con informacin detallada sobre un segmento en
particular incluyendo la ubicacin base y longitud del segmento.
Cada segmento es paginado, y cada pgina es de 4K. Una tabla de pginas puede entonces consistir de
hasta un milln de registros. Dado que cada registro consiste de 4 bytes, cada proceso puede llegar a
necesitar hasta 4 megabytes de espacio de direcciones fsica para la tabla de pginas nicamente. Claro
est que no sera conveniente alojar la tabla de pginas contigua en la memoria principal. La solucin
que es implementada en el esquema para el 386, es usar un esquema de paginacin de dos niveles. La
direccin lineal es dividida en un nmero de pgina consistente de 20 bits y un offset de pgina de 12
bits. Siendo que se pagina a la tabla de pginas, el nmero de pginas es a su vez dividido en un
apuntador para el directorio de pginas de 10 bit y en un apuntador para la tabla de pginas de 10 bit.
La transicin de la direccin se puede apreciar en ms detalle en la figura 16.
Referencias Bibliogrficas: