You are on page 1of 18

3.

Administracin de memoria
3.1. Fundamentos
La memoria o memoria principal puede ser considerada como una matriz de bytes, cada uno con una
direccin. El administrador de memoria es parte del sistema operativo que regula el uso o liberacin de
la memoria. Una instruccin es una orden que se le da a la computadora para que ejecute una
operacin. Un proceso es una secuencia de instrucciones que forman parte de un programa en
ejecucin.
La memoria es un recurso necesario en todo sistema informtico y por eso debe ser gestionado con
cuidado, esta operacin la ejecuta el administrador de memoria o Memory Manager. El administrador
de memoria est encargado de asignar la memoria que necesita un proceso, as como liberarla cuando el
proceso la haya desocupado. Tambin debe estar al pendiente de qu secciones de la memoria se estn
utilizando y cules no, as como debe tener control sobre cules procesos estn utilizando la memoria.
Para poder administrar la memoria es necesario poder acceder a ella ya sea para leerla, guardar datos o
simplemente reservarla, los bytes de la memoria pueden accederse por medio de direcciones, las cuales
pueden ser representadas de diferentes maneras. En un programa fuente se utilizan direcciones
simblicas, que ms adelante representan direcciones concretas en un programa ejecutable.
En una computadora la memoria principal es un recurso vital para su funcionamiento ya que no solo los
programas pueden modificarla, sino que tambin los dispositivos de entrada y salida pueden tener
acceso a ella y modificarla. El procesador de la computadora es el que debe regular los accesos a a
memoria y la velocidad de este para accederla y modificarla (ya sea para escribir o borrar datos)
depender de la eficiencia del computador.

3.1.1. Hardware bsico


El direccionamiento de memoria se refiere a cualquier intento de acceder a la memoria ya sea para
leerla, escribir en ella o borrar su contenido, por medio de una direccin.

Los registros del procesador son espacios pequeos de memoria en el procesador que se utilizan, entre
otras cosas, para que las instrucciones del procesador tomen de ah los datos que necesitan para
procesarlos.
Al desarrollar el hardware de una computadora, se debe definir la forma en que se va a direccionar la
memoria. El mximo direccionamiento que puede tolerar una computadora se define segn la cantidad
de bits que posean las direcciones a generar, si se toma se nmero de bits como exponente de 2 se
puede obtener el mximo direccionamiento posible, lo que quiere decir que aunque el computador
disponga de ms memoria, ser imposible accederla, por ejemplo, si se tienen direcciones de 8 bits,
solo se podr acceder hasta 256 bits de memoria. Cuando se define el hardware, tambin se especifica
la menor unidad de memoria direccionable, es decir se escoge una cantidad mnima de bits a
direccionar, lo que implica que las siguientes posiciones en memoria tendrn ese tamao.
Por otra parte, la memoria principal y los registros del procesador son las nicas secciones que pueden
ser accesadas directamente, e incluso muchas de las instrucciones de la mquina toman como
parmetro el contenido de los registros ya mencionados, pero no hay instrucciones que acepten
direcciones de la memoria en disco, lo que implica que si se necesitan datos de la memoria en disco,
deben copiarse en los registros o en memoria principal para poder ser utilizados. Es decir que, para
poder ejecutar un proceso, es necesario asegurarse de que este posea un espacio en memoria exclusivo
para su uso y el rango legal de direcciones de memoria disponibles, esto se hace por medio del
almacenamiento de un registro base y un registro lmite. El registro base guarda la primera direccin en
memoria que corresponde a ese proceso, mientras que el registro lmite muestra el rango mximo de
memoria que necesita el proceso, por ejemplo, si el registro base equivale a la posicin 2000 en

memoria y el registro lmite tiene un valor de 500, el proceso ocupa un espacio en memoria desde la
direccin 2000 hasta la 2500.

Es posible proteger el espacio en memoria para cada proceso, esto se logra haciendo que el CPU
compare las direcciones generadas en modo usuario con el contenido de los registros a los que se desea
acceder y en cualquier intento de acceder a direcciones que no le correspondan, generar un error fatal.

3.1.2. Reasignacin de direcciones


La memoria usualmente aloja varios procesos al mismo tiempo y, de hecho, se busca maximizar el uso
del procesador teniendo una reserva de procesos a ejecutar, esta lista se llama cola de procesos.

Como el programador no sabe cules otros procesos van a estar en memoria al mismo tiempo que el
proceso que desea ejecutar, es necesario mover el programa a otra rea de memoria en caso de ser
necesario, es decir, si se necesita el espacio de memoria que est utilizando ese proceso, el sistema
operativo debe ser capaz de mover el proceso, ejecutar otro y volver a cargar el proceso anterior justo
en la instruccin en que haba quedado antes de que fuera interrumpido.
Habitualmente se selecciona uno de los procesos de la cola de procesos, este se carga en memoria y
luego es ejecutado, cuando este termina, el espacio de memoria en el que fue cargado, se declara libre
para ser utilizado por otro proceso. Para hacer esto, el editor de montaje o cargador se encarga de
asignar las nuevas direcciones del proceso que se est cargando en memoria y una vez asignadas las
nuevas direcciones, poder ejecutar el proceso.
La reasignacin de instrucciones y datos en memoria puede hacerse en cualquiera de las siguientes
etapas:
Tiempo de compilacin: solamente si se sabe con certeza en dnde va a ser almacenado el
programa cuando este sea compilado, se pueden generar direcciones absolutas ya que no va a
haber ningn inconveniente con el acceso a la memoria.
Tiempo de carga: si no se sabe a dnde se alojar el proceso cuando este sea compilado, las
direcciones deben ser reubicables, de modo que la asignacin de direcciones se retrasa hasta
cuando el proceso necesita ser cargado en memoria.
Tiempo de ejecucin:Si no hubiese problema con retrasar la reasignacin de direcciones hasta el
tiempo de ejecucin, es recomendable hacerlo, pero para esto se necesita de un hardware

especial, sin embargo, la mayora de sistemas operativos de propsito general utilizan este
mtodo.

3.1.3. Espacios de direcciones lgico y fsico


Una direccin lgica o direccin virtual es una direccin generada por el CPU, mientras que una
direccin fsica es una direccin de la unidad de memoria. Las direcciones lgicas que son generadas
por un programa son llamadas, como conjunto, espacio de direcciones lgicas, estas generan tambin
el espacio de direcciones fsicas, el cual el conjunto de las direcciones fsicas homlogas a las
direcciones lgicas.

Se tienen tambin la unidad de gestin de memoria (MMU o memory-management unit)la cual es una
parte del hardware que hace la equivalencia entre las direcciones virtuales y fsicas en tiempo de
ejecucin.
Tambin se cuenta con el registro de ubicacin, el cual es un sinnimo para el registro base, el cual
suma todas las direcciones generadas por un proceso de usuario cuando se est cargando el proceso en
memoria.
La memoria de una computadora se organiza en por lo menos dos niveles: principal y secundaria. La
memoria principal proporciona un acceso rpido a esta pero el costo es elevado, tambin es voltil, es
decir, su almacenamiento de informacin no es permanente. Por otra parte, la memoria secundaria, se
organiza de una manera similar a la memoria principal sin embargo es lenta, barata y no voltil, lo que
permite almacenar informacin por mucho tiempo, ya sean programas, datos o ambos.

Si el sistema operativo puede administrar de forma correcta y efectiva las memorias disponibles, es
capaz de proveer las siguientes ventajas:
Los mdulos pueden compilarse y escribirse de forma independiente.
Se puede dar varios grados de proteccin de datos.
Los procesos podran compartir mdulos.

3.1.4. Carga dinmica


La carga dinmica consiste en cargar las rutinas hasta que sean invocadas, es decir, no se cargan hasta
que se necesitan y todas las rutinas se mantienen en un disco en un formato reubicable y tambin se
aplaza el clculo de direcciones. Cuando una rutina en un proceso necesita convocar a otra, primero
revisa si ya est cargada, de lo contrario la busca y la carga en memoria para su uso con el cargador de
memoria, esto implica la actualizacin de las tablas de direcciones del programa para dar evidencia del
cambio generado al cargar la rutina.
Esto proporciona como ventaja que si una rutina no se necesita en tiempo de ejecucin, nunca ser
cargada en memoria, por lo tanto ahorrar memoria y resulta til si se necesita disponer de mucho
cdigo para administrar casos poco frecuentes.

3.1.5. Montaje dinmico y bibliotecas compartidas


Para poder comprender el montaje dinmico es importante definir el montaje esttico y montaje
binario.
El montaje esttico se da cuando las bibliotecas del lenguaje utilizado en el sistema son tomadas como
un mdulo y son integradas en el programa. Por otra parte el montaje binario se da cuando se pospone
hasta el tiempo de ejecucin el montaje del programa. Sin embargo el montaje dinmico ocurre cuando
en el fragmento de cdigo se incluye un stud, una pieza de cdigo que indica cmo encontrar o agregar
la rutina deseada en la imagen binaria.

Es decir, el montaje dinmico retrasa el montaje de los mdulos externos hasta que el mdulo de carga
haya terminado de crearse.
Algunos sistemas operativos no permiten el montaje dinmico, sino que solamente el esttico.

3.2. Intercambio
Normalmente en los sistemas actuales, tener recursos ociosos o sin utilizar, es considerado un
desperdicio de ellos, esto incluye a la memoria, los sistemas de la actualidad suele mantener ocupada
un gran porcentaje de ella, esto puede ocasionar situaciones donde no haya suficiente memoria
disponible para un proceso que requiere ser ejecutado.
Una de las soluciones ante este problema es el intercambio de procesos, esto consiste en intercambiar
temporalmente un proceso que esta en memoria con uno que se encuentre en la cola de procesos,
guardando en un almacn de respaldo el proceso que se encuentra en memoria, y volvindolo a llevar
luego a memoria para continuar su ejecucin.[1]

Para poder realizar esto, es necesario una cola de procesos, como se mencion anteriormente. Por ello,
el sistema mantiene esta cola de procesos donde se encuentran todos los procesos que estn listos para
ser ejecutados, tanto los que se encuentran en el almacn de respaldo como los que se van a ejecutar
por primera vez.[1]
Este proceso de intercambio tiene un costo de tiempo relativamente alto, del cual la mayor parte del
tiempo es tiempo de transferencia, el cual es directamente proporcional a la cantidad de memoria
intercambiada. Por ello la duracin de este proceso de intercambio es proporcional al tamao del
proceso a intercambiar.
Para esta operacin sea realmente til, el tiempo de ejecucin del proceso que ingresa en memoria debe
ser lo suficientemente grande en relacin con el costo del tiempo de intercambio, para que este pueda
realizar una cantidad de clculos lo suficientemente grande entre una operacin de intercambio y la
siguiente.
Normalmente cuando un proceso almacenado, vuelve a ser cargado, este se volver a cargar en el
mismo espacio de memoria que ocup anteriormente. Esta restriccin es impuesta por el mtodo de
reasignacin de las direcciones. [1]
Pero este proceso de intercambio, no se puede realizar con cualquier proceso que se encuentre en
memoria, para poder realizar esto, los procesos deben estar completamente inactivos. por ejemplo si el
proceso no podr ser intercambiado si se est accediendo a donde residen los buffers de E/S en la
memoria. ya que aunque el proceso parezca inactivo, realmente no lo est.

buffer que permita cargar o descargar un proceso mientras otro se encuentra en ejecucin; o combinar
la tcnica con el uso de registros base y lmite, para mantener varios procesos simultneamente en
memoria.
Tambin este mecanismo se puede implementar en conjunto con algoritmos de planificacin con
prioridad. Esto consiste es que si llega un proceso de mayor prioridad y este necesita ser ejecutado, el
administrador de memoria puede intercambiarlo por un proceso inactivo de menor prioridad. Cuando el
proceso de mayor prioridad haya terminado, puede intercambiarse de nuevo por el proceso de menor
prioridad.[1]
En la actualidad, aunque en muchas versiones de UNIX se utiliza una variante de este sistema, el
intercambio est normalmente desactivado, por ello en realidad estos mecanismos de intercambio se
utilizan en pocos sistemas, ya que en general requieren el costo en tiempo de este mecanismo es muy
alto y no logran proporcionar tiempos de ejecucin suficientemente largos como para realizar una
compensacin favorable y que haga de esto una solucin razonable de gestin de memoria.

3.3. Asignacin de memoria contigua


Como todo proceso que necesite ser ejecutado estar albergado en memoria, esta debe albergar tanto el
sistema operativo como los diversos procesos que ejecute el usuario.
Normalmente ambos, el sistema operativo como el espacio del usuario, no comparten el mismo espacio
por eso usualmente la memoria esta dividida en 2 particiones, una para el sistema operativo y otra para
los procesos que desee ejecutar el usuario. [1]

3.4. Mapeo de memoria y proteccin


Como los sistemas no utilizan direcciones predefinidas como puede ser direcciones fsicas de memoria,
sino que utilizan las direcciones absolutas de un programa, las cuales son imposibles de calcular en
tiempo de compilacin porque no se conoce la ubicacin del programa, por lo que no se puede asegurar
una proteccin a la memoria. [2]

El registro de ubicacin, o bien el registro base ilustra la posicin inicial del programa, mientras que el
registro lmite guarda la cantidad de memoria que necesita el programa, por lo que el registro lmite no
corresponde a una direccin de memoria como tal, sino a un desplazamiento desde el registro de
reubicacin. [1]
Una direccin lgica seala una posicin en memoria que no depende de la asignacin de memoria que
se le ha dado al proceso. Toda direccin lgica tiene que ser menor que el valor que contiene el registro
lmite, se convertir la direccin lgica dinmicamente con la MMU, esto se logra sumando el valor del
registro base, esta nueva direccin es la que se enva a memoria.
Una direccin relativa se representa como un desplazamiento desde una posicin en memoria conocida,
usualmente es del inicio del programa, pero bien podra ser una direccin posterior. Las direcciones
relativas necesitan pasar por dos etapas en las cuales el procesador las manipula. La primera agrega el
valor del registro base a la direccin relativa de modo que se obtiene una direccin absoluta para el
programa. Seguidamente, la nueva direccin es comparada con el valor del registro lmite, si esta se
encuentra dentro de los lmites, se procesa ejecutando la instruccin correspondiente, pero si no, se
interrumpe el sistema generando un error.[2]
Para asegurar la integridad, seguridad y proteccin del sistema las referencias a memoria que son
hechas con un proceso deben ser validadas para estar seguros de que solamente referencian el espacio
de memoria que est reservado para el proceso.
Un proceso que es seleccionado por el planificador del CPU para ser ejecutado, los valores correctos de

los registros de lmite y reubicacin son cargados por el despachador como parte de un cambio de
contexto. Este mecanismo protege el sistema ya que las direcciones generadas por el CPU se comparan
con los registros con ello se asegura que no se accedan a regiones de memorias no correspondientes al
proceso.[1]

3.5. Asignacin de memoria


Las estructuras de datos son necesarias para que el sistema operativo sea capaz de administrar
apropiadamente las particiones en memoria, por ejemplo, una tabla de descripcin de particiones en la
que se registre cules procesos estn alojados en cada particin, as como dnde comienza y dnde
termina. Los huecos en memoria que queden libres sern usados para administrar el espacio disponible.
[3]
Al dividir la memoria en particiones de tamao fijo, se logra un mtodo simple para asignar la
memoria. Cada seccin solamente puede contener un proceso porque la multiprogramacin est
limitada por la cantidad de particiones que no alojan ningn proceso. Aparte de esto, las particiones
fijas tambin fuerzan al sistema a mantener una tabla que indique qu partes de la memoria estn libres
para que otros procesos la utilicen y cules estn ocupadas.
Actualmente los sistemas operativos modernos no utilizan el esquema de particiones fijas, sin embargo,
los sistemas operativos de los grandes computadores de IBM, el OS/MFT, o bien Multiprogramacin
con un nmero fijo de tareas, es un buen ejemplo de un sistema operativo eficiente que utiliza este
esquema. [2]
Las particiones mltiples funcionan cuando una particin est libre, seguidamente se escoge un proceso
de la cola de entrada y es cargado en esa particin. Al terminar el proceso, la seccin queda disponible
para ser ocupada por otro proceso.
El hecho de distribuir la memoria disponible en particiones de tamaos distintos de memoria, aumenta
la flexibilidad de la reparticin de memoria. Adems de esto, la particin dinmica provee un esquema
por medio del cual el nmero y longitud de las particiones son variables. Al traer un proceso a la
memoria principal, este esquema ayuda a que se le asigne nicamente el espacio en memoria que
necesita, ni ms, ni menos. [2]
La fragmentacin externa se da cuando la memoria externa se fragmenta cada vez ms. Cuando un
proceso necesita memoria, se busca un espacio tan grande como para poder alojarlo y si se encuentra,
se le asigna y se mantiene la dems memoria libre para las solicitudes de los procesos que entrarn en
el futuro. [1]
Con forme los procesos entran al sistema, tambin se ingresan a una cola. Esta cola de entrada se
ordena por el sistema operativo segn el algoritmo de planificacin que este posea. Se le asigna
memoria a los procesos hasta que los requisitos del siguiente proceso ya no puedan satisfacerse. El
sistema operativo considera la memoria necesaria para cada proceso y lo compara con la cantidad de
memoria libre para ser utilizada, de este modo se puede determinar a cules procesos se les va a asignar
memoria.
El agujero es un modo de llamar a toda la memoria disponible para los procesos de usuario cuando esta
se considera como un bloque nico que contiene toda la memoria libre para ser utilizada por los
procesos entrantes. En algn momento durante la ejecucin de los procesos se va a tener un conjunto de
huecos de memoria de muchos tamaos distribuidos por toda la memoria y cuando llega un proceso
nuevo para ser ejecutado y este solicita memoria, el sistema operativo busca entre todos esos espacios
libres alguno que sea lo suficientemente grande como para poder alojarlo. [1]

Si el agujero es muy grande, se divide en dos partes, una para el proceso y la otra se agrega al conjunto
de espacios de memoria disponibles. Caso contrario ocurre si hay agujeros de memoria adyacentes,
estos se fusionan para obtener un espacio en memoria ms grande en lugar de dos pequeos.
El proceso, al terminar, libera la memoria que haba utilizado para poder ejecutarse y esta memoria se
volver a considerar como libre y se agrega al conjunto de agujeros de memoria.[1]
La asignacin dinmica de espacio busca satisfacer las solicitudes de memoria segn la lista de
espacios disponibles.

El primer ajuste, se conoce como el mtodo de asignar el primer agujero en memoria que se encuentre
que sea lo suficientemente grande como para alojar el proceso entrante, la exploracin de memoria
puede hacerse desde el inicio de la memoria o bien donde termin la exploracin anterior y la
exploracin se detiene en cuanto se encuentre un hueco de memoria con la cantidad de memoria igual o
superior al espacio requerido por el proceso. [1]

Como se puede observar en la imagen, el mejor ajuste es un mtodo de asignacin de memoria en que
se busca el bloque de memoria disponible ms pequeo pero que tenga espacio suficiente para el
proceso, pero este mtodo puede generar un agujero de memoria ms pequeo que en los dems
mtodos. [1]

El peor ajuste asigna el agujero de memoria de mayor tamao que encuentre durante la exploracin,
esto genera un agujero de mayor tamao luego de haber asignado el proceso, lo que puede generar un
agujero muy til. [1]
Los mtodos del primer ajuste y mejor ajuste son mejores que el del peor ajuste en matices como el
tiempo necesario y utilizacin eficiente del espacio. Aunque es indefinido si la estrategia del primer
ajuste o mejor ajuste es mejor en cuestin de utilizacin del espacio de almacenamiento, pero la del
primer ajuste es ms rpida. [1]
Existen otras polticas que generan menos fragmentacin de memoria y de hecho son muy utilizados en
los sistemas operativos, por ejemplo la poltica de los gemelos (buddies). [3]
En este sistema, el asignador nada ms provee de bloques de memoria de tamaos determinados y tiene
muchas listas libres, una para cada tamao que sea capaz de asignar. Los espacios habitualmente se
calculan como potencias de dos o segn la secuencia de Fibonacci. Si el repartidor recibe una solicitud
de memoria, el tamao es redondeado hasta que el tamao solicitado lo permita y se le asigna el primer
bloque libre con este tamao. [4]
El reciclaje de bloques implica hacer un intento por mezclar los bloques de memoria adyacentes en un
bloque ms grande, para simplificar el trabajo, las listas pueden almacenarse en orden de direccin.
Este enfoque provee una ventaja: la coalicin es barata porque todo bloque libre se calcula desde su
direccin. [4]
El sistema buddy puede trabajar muy bien, pero tambin puede trabajar muy mal segn sean los
tamaos seleccionados para interactuar con las solicitudes de memoria y segn sea el patrn de los

bloques. Redondear implica una cantidad de memoria significativa que se desperdicia, a lo que se le
llama fragmentacin interna, la cual se puede reducir haciendo que el tamao de los bloques sea
similar. [4]

3.6. Segmentacin
La segmentacin se puede definir como una tcnica en la cual las tareas y procesos pueden acceder a
ellas unitariamente para poder administrar mejor la memoria contigua, facilita la comprensin visual
del programador, es la estructura clave para las pilas, datos y cdigo para un programa.
Estn conformados por un tamao predefinido, un identificador y un desplazamiento para acceder a los
datos dentro de l, cada direccin lgica se expresar mediante dos valores, el nmero de segmento (s)
y desplazamiento dentro del segmento (d), estas caractersticas se les asigna en el proceso de
compilacin y para accederlos se debe tener en cuenta que la memoria fsica se accede literalmente,
cada direccin lgica (que proviene del procesador) habr que convertirla en una direccin real, que la
memoria RAM podr leer, este cambio lo realiza un aparato de hardware alojado generalmente en las
tarjetas de memoria principal llamado unidad de gestin de memoria, ya que posee algunos
implementos como la tabla donde vienen numeradas cada segmento. Adems el procesador cuenta con
otra tabla que describe:
Base: Direccin en donde comienza el segmento (contando la direccin)
Lmite: Direccin en donde finaliza (sin contar la direccin)
Desplazamiento: Lo que hay que sumar a una direccin para obtener su direccin real, se
calcula como la direccin de comienzo del segmento en la memoria real menos la direccin
virtual de inicio del segmento
Atributos del segmento: como lectura/escritura para la seguridad de que otros procesos
interfieran en segmentos ajenos.
Para seguridad del manejo de segmentos hay 2 heaps, uno para los segmentos en s y otro para
administracin de estructuras de datos, como colas y pilas, en el primero como hay muchos segmentos
a travs de la lnea del tiempo de los procesos, segmentos son asignados a una parte de la memoria y
otros liberados, y esto fragmenta mucho la memoria produciendo desperdicio y mltiples pedazos de
memoria tan pequeos que no se pueden utilizar, afortunadamente hay mtodos y algoritmos para
reducir el impacto de desperdicio que producen la fragmentacin:
First-fit: consiste en recorrer la lista secuencialmente hasta hallar el primer fragmento donde
quepa la memoria solicitada, el trozo encontrado se parte en dos para entregar slo lo que se
necesita
Best-fit: Consiste en recorrer la lista secuencial y completamente hasta hallar el fragmento
donde quepa la memoria solicitada y se desperdicie el menor espacio posible, el trozo
encontrado se parte en dos para entregar slo lo que se necesita
Worst-fit: consiste en recorrer la lista secuencialmente hasta hallar el primer fragmento donde
quepa la memoria solicitada y sobre la mayor cantidad de memoria posible, el trozo encontrado
se parte en dos para entregar slo lo que se necesita
De las anteriores la segunda es la menos efectiva ya que llena la memoria de pequeos trozos de
memoria intiles y el proceso para reunificarlos y reciclarlos es sumamente caro en procesamiento en
funcin a la cantidad, mientras que la mejor solucin es la de first-fit, debido que estadsticamente
desperdicia menos, lo ideal es implementar siempre este mtodo aunque resulta ineficiente en parte, ya
que siempre comienza desde el inicio aun cuando no se le ha notificado que se ha liberado un espacio
para que se devuelva y verifique si cabe el proceso, en lugar de dejar un puntero donde quedo para que

a partir de ah siga buscando sin necesidad de que se devuelva a buscar espacios que por redundancia se
sabe que no son suficientemente grandes.
Algunas caractersticas positivas que aporta la segmentacin son la modularidad, cada segmento es
independiente uno del otro, se puede afectar uno sin que el otro tenga represalias, entre otras como
proteccin, comparticin, estructuras de datos largas, enlace dinmico entre segmentos.
En conclusin el esquema de la segmentacin presenta algunas ventajas como las siguientes:
conocimiento de las partes lgicas del programa de parte del programador, los segmentos se pueden
tratar como mdulos separados y cada uno se puede compilar por aparte (en la compilacin es donde se
crean las uniones entre segmentos), como son separados unos de otros son fciles de modificar uno por
uno sin afectar a los otros, la manera de compartir los mdulos es sencillo, pueden crecer en caliente o
en tiempo de ejecucin segn las necesidades del programa, es posible crear segmentos aun cuando no
existan o cuando ni siquiera se le han asignado espacio (por ejemplo cuando no se sabe el tamao de un
vector hasta que sea tiempo de ejecucin para asignarle el que necesita).
Algunas desventajas de la segmentacin: incremento en los costos de hardware y de software para
llevar a cabo la implantacin y su consumo en recursos, producen mucha fragmentacin externa, en la
memoria virtual podra representar un problema ya que estos funcionan con bloques fijos y los
segmentos varan su tamao y a su vez est requiere una reubicacin, o sea, ms procesamiento
consumido, la comparticin entre segmentos es til pero se necesita mecanismos de hardware y
software adicionales para llevarlo a cabo, la implementacin de la instruccin fork() es ineficiente,
todas estas desventajas tratan de ser minimizadas por la siguiente tcnica, la segmentacin paginada.

3.6.1. Segmentacin paginada


La segmentacin no suple al 100% con la necesidad de aprovechamiento de la memoria, la paginacin
es otra tcnica que compite con sta para el mejor rendimiento, aunque tampoco lo logra, se ha creado
un mtodo ms efectivo que aprovecha las ventajas de ambas llamado Segmentacin paginada, lo que
sucede es que hay una administracin segmentada pero el contenido usado para memoria contigua de
cada segmento de pgina, el segmento tendra que tener su propia tabla de pginas con 3 variables de
direccin como lo son S, P, D; la S es por el nmero de segmento, la P para el nmero de pgina, y el D
para el desplazamiento a partir de ah, adems de SMT que es la tabla de mapas de segmentos que a su
vez tiene en cada entrada un PMT que es la tabla de mapas de pgina por cada segmento.
Ventajas de la segmentacin paginada: junta las ventajas de la paginacin y la segmentacin, se
simplifican mucho las formas de almacenamiento, se elimina casi por completo la fragmentacin
externa y la necesidad de usar ese costoso algoritmo de compactacin.
Desventajas de la segmentacin paginada: la incorporacin de los controles necesarios para el sistema
incrementa en cuanto a procesamiento y uso de memoria, no logra eliminar la fragmentacin interna, la
paginacin pura siempre se desperdicia la ltima pgina, pero en este mtodo se desperdiciaran en
funcin a los segmentos seleccionados

3.6.2. Fragmentacin
Todos estos mtodos intentan eliminar a un enemigo en comn llamado Fragmentacin, pero Qu es
la fragmentacin?, es la incapacidad de poder tratar la memoria como asignamiento secuencial para
abastecer los procesos sin dejar desperdicios, la manera de eliminarla sera hacer que los procesos
caigan en gravedad para dejar todos los trozos libres en la parte superior y poder fusionarlos pero eso
sera demasiado ineficiente. Hay dos tipos de fragmentacin, la interna y la externa, la interna es
cuando la memoria contigua se fragmenta y la externa tambin pero cuando la memoria que se

fragmenta no es contigua, cuando una memoria no es contigua o parte de ella no lo es, significa que no
est destinada a asignacin de procesos aunque s para satisfacer requerimientos.

3.7. Glosario
Cola de procesos: Son los procesos que estn esperando a ser cargados en memoria para su
ejecucin por parte del sistema.
Direccin base: Es la direccin fsica inicial del lugar donde el segmento reside dentro de la
memoria.
Direccin lmite: Es la direccin que especifica la longitud de un segmento especfico.
Espacio de direcciones lgicas: Es el conjunto de todas las direcciones lgicas.
Mejor ajuste: Asigna el espacio ms pequeo que tenga el tamao suficiente. Tiene como
ventaja que genera el espacio ms pequeo posible restante.
Memoria: Es dispositivo basado en circuitos que posibilitan el almacenamiento limitado de
informacin y su posterior recuperacin.
Peor ajuste: Es una posible solucin para el problema de asignacin dinmica de espacios de
almacenamiento, el cual asigna el mayor espacio de tamao disponible.
Primer ajuste: Es una posible solucin para el problema de asignacin dinmica de espacios de
almacenamiento, el cual asigna el primer espacio de memoria que sea lo suficientemente
grande.
Registro de reubicacin: Es el registro base, el valor contenido en este registro suma todas las
direcciones generadas por un proceso de usuario en el momento de enviarlas en memoria.
Tabla de segmentos: Es una implementacin para manejar las direcciones bidimensionales
definidas por el programa sobre las direcciones fsicas unidimensionales.
Unidad de gestin de memoria (MMU, memory-management unit): Es un dispositivo de
hardware que establece la correspondencia entre direcciones virtuales y fsicas en tiempo de
ejecucin.
Crecer en caliente: por lo general la expresin que acompaa a en caliente se refiere a que no
se necesita reiniciar el proceso o apagar el proceso realizar el cambio y volverlo a ejecutar, si no
que se puedan hacer cambios durante su ejecucin.
Instruccin fork(): funcin del lenguaje C/C++ exclusivo en Unix el cual permite formar nuevos
procesos en paralelo.
STM: mapa que usa la segmentacin paginada para controlar los segmentos (Segment table
map)
PMT: mapa que usa la segmentacin paginada para controlar las pginas (Page Map Table)
Carga dinmica: consiste en cargar rutinas en memoria cuando es convocada por el programa,
no antes.
Direccin fsica: direccin generada por un programa.
Direccin lgica o virtual: direccin generada por el CPU.
Montaje binario: se pospone hasta el tiempo de ejecucin la carga del programa.
Montaje dinmico: incluir un stud en la imagen binaria para encontrar y cargar una rutina
cuando esta sea convocada.
Montaje esttico: incluir el cdigo de las bibliotecas en la imagen binaria del programa.

53.8. Referencias
Martnez y Daz, en su libro Sistemas Operativos: Teora y prctica (Consultar fuente [1]) plantean una
introduccin a los conceptos de memoria y el administrador o gestor de memoria involucrados en el
desarrollo de un sistema operativo y explica con detalle la forma en que se maneja la memoria
disponible entre los procesos que estn siendo ejecutados.
Tanenbaum, en su libro Sistemas Operativos Modernos (Consultar fuente [2]) detalla el concepto de
memoria, su jerarqua y administracin, tambin explica los conceptos de carga dinmica y de montaje
dinmico as como sus bibliotecas compartidas. Este libro tambin hace referencia a la asignacin de
direcciones.
Morera y Prez-Campanero, en su libro Conceptos de sistemas operativos (Consultar fuente [3])
ofrecen no solamente una definicin de memoria sino que le dan una dimensin de recurso central, lo
que los lleva a explicar las formas de accesar las jerarquas de memoria y por lo tanto, tambin explica
cmo se integra la memoria al hardware de la computadora y la asignacin de direcciones.
Stallings, en su libro Sistemas Operativos (Consultar fuente [4]) da una definicin de memoria y su
administrador, pero tambin explica el comportamiento de la memoria en sistemas monoprogramados y
multiprogramados. Este libro es ms detallado con respecto a la reasignacin de direcciones ya que
explica qu sucede cuando la memoria es compartida por varios procesos, as como la carga y descarga
de procesos. Tambin de detalla la diferencia entre la memoria principal y la memoria secundaria, sus
caractersticas y las ventajas de un buen sistema de gestin y acceso de memoria. Adems explica con
detalle la definicin de carga dinmica y los diferentes tipos de montajes.
Silberschatz, Baer y Gagne, en su libro Fundamentos de Sistemas Operativos (Consultar fuente [5])
explican los trminos de registro base y lmite, as como los detalles del hardware necesario para que
un sistema operativo pueda manejar apropiadamente la memoria, tambin explica la forma en que se
puede asegurar el espacio de un programa en memoria. Tambin detalla la reasignacin de direcciones
y las condiciones que deben cumplirse para poder realizar una reasignacin en las diferentes etapas de
creacin del software. Provee, adems definiciones claras para las direcciones lgicas y fsicas y de la
utilizacin apropiada de la memoria en un sistema con carga dinmica, as como el montaje dinmico.

3.9. Bibliografa
[1] Martnez, P., Daz, J. (1996). Sistemas Operativos: Teora y prctica. NS: Ediciones Daz de Santos.
[2] Tanenbaum, A. (2003). Sistemas operativos modernos. NS: Pearson Educacin.
[3] Morera, J., Prez-Campanero, P. (2002). Conceptos de sistemas operativos. NS: Universidad
Pontifica Comillas.
[4] Stallings, W. (1997). Sistemas Operativos. Madrid: Prentice Hall.
[5] Silberschatz, A., Baer P., Gagne, G. (2005). Fundamentos de Sistemas Operativos. Espaa: Cofs
S.A.