You are on page 1of 13

4.

ADMINISTRACION DE LA MEMORIA
En esta seccin se describirn las tcnicas ms usuales en el manejo de memoria, revisando
los conceptos relevantes. Se abarcarn los esquemas de manejo simple de memoria real, la
multiprogramacin en memoria real con sus variantes, el concepto de `overlays', la
multiprogramacin con intercambio y los esquemas de manejo de memoria virtual.

4.1. Panorama general


Un vistazo al material que se va a cubrir en esta seccin se muestra en la figura 4.1. Es una
grfica en donde se especifican, en trminos generales, los conceptos ms importantes en
cuanto a las tcnicas empleadas en el manejo de memoria.

4.2. Manejo de memoria en sistemas monousuario sin intercambio


Este esquema es an muy frecuente en Mxico y se usa principalmente en sistemas
monousuario y monotarea, como son las computadoras personales con DOS. Bajo este
esquema, la memoria real es tomada para almacenar el programa que se est ejecutando en
un momento dado, con la visible desventaja de que si se est limitado a la cantidad de RAM
disponible nicamente. La organizacin fsica bajo este esquema es muy simple: El sistema
operativo se ubica en las localidades superiores o inferiores de la memoria, seguido por
algunos manejadores de dispositivos ( `drivers' ). Esto deja un espacio contiguo de memoria
disponible que es tomado por los programas del usuario, dejando generalmente la ubicacin
de la pila (` stack' ) al ltimo, con el objetivo de que sta pueda crecer hasta el mximo
posible. Estas diferentes opciones se pueden ver en la figura 4.2. Como es obvio, bajo estos
esquemas no se requieren algoritmos sofisticados para asignar la memoria a los diferentes
procesos, ya que stos son ejecutados secuencialmente conforme van terminando.

4.3. Multiprogramacin en memoria real


En los 60's, las empresas e instituciones que haban invertido grandes sumas en la compra
de equipo de cmputo se dieron cuenta rpidamente que los sistemas en lote invertan una
gran cantidad de tiempo en operaciones de entrada y salida, donde la intervencin de la
unidad central de procesamiento era prcticamente nula, y se comenzaron a preguntar cmo
hacer que se mantuviera ms tiempo ocupada. Fue as como naci el concepto de
multiprogramacin, el cual consiste en la idea de poner en la memoria fsica ms de un
proceso al mismo tiempo, de manera que si el que se est ejecutando en este momento
entraba en un periodo de entrada/salida, se podia tomar otro proceso para que usara la
unidad central de procesamiento. De esta forma, la memoria fisica se divida en secciones
de tamao suficiente para contener a varios programas.
De esta manera, si un sistema gastaba en promedio 60% de su tiempo en entrada/salida por
proceso, se poda aprovechar ms el CPU. Anterior a esto, el CPU se mantena ese mismo
porcentaje ocioso; con la nueva tcnica, el tiempo promedio ocioso disminuye de la
siguiente forma. Llmese al tiempo promedio que el CPU est ocupado `grado de
multiprogramacin'. Si el sistema tuviese un solo proceso siempre, y ste gastara 60% en
entrada/salida, el grado de multiprogramacin sera 1 - 60% = 40% = 0.4. Con dos
procesos, para que el CPU est ocioso se necesita que ambos procesos necesiten estar
haciendo entrada/salida, es decir, suponiendo que son independientes, la probabilidad de
que ambos estn en entrada/salida es el producto de sus probabilidades, es decir, 0.6x0.6 =
0.36. Ahora, el grado de multiprogramacin es 1 - (probabilidad de que ambos procesos
estn haciendo entrada/salida) = 1 - 0.36 = 0.64.
Como se ve, el sistema mejora su uso de CPU en un 24% al aumentar de uno a dos
procesos. Para tres procesos el grado de multiprogramacin es 1 - (0.6) 3 = 0.784, es decir,
el sistema est ocupado el 78.4% del tiempo. La frmula del grado de multiprogramacin,
aunque es muy idealista, pudo servir de gua para planear un posible crecimiento con la
compra de memoria real, es decir, para obtener el punto en que la adicin de procesos a
RAM ya no incrementa el uso de CPU.
Dentro del esquema de multiprogramacin en memoria real surgieron dos problemas
interesantes: la proteccin y la relocalizacin.

4.3.1. El problema de la relocalizacin


Este problema no es exclusivo de la multiprogramacin en memoria real, sino que se
present aqu pero se sigue presentando en los esquemas de memoria virtual tambin. Este
problema consiste en que los programas que necesitan cargarse a memoria real ya estn
compilados y ligados, de manera que internamente contienen una serie de referencias a
direcciones de instrucciones, rutinas y procedimientos que ya no son vlidas en el espacio
de direcciones de memoria real de la seccin en la que se carga el programa. Esto es,
cuando se compil el programa se definieron o resolvieron las direcciones de memoria de
acuerdo a la seccin de ese momento, pero si el programa se carga en otro dia en una
seccin diferente, las direcciones reales ya no coinciden. En este caso, el manejador de
memoria puede solucionar el problema de dos maneras: de manera `esttica' o de manera
`dinmica'. La solucin `esttica' consiste en que todas las direcciones del programa se
vuelvan a recalcular al momento en que el programa se carga a memoria, esto es,
prcticamente se vuelve a recompilar el programa. La solucin `dinmica' consiste en tener
un registro que guarde la direccin base de la seccin que va a contener al programa. Cada
vez que el programa haga una referencia a una direccin de memoria, se le suma el registro
base para encontrar la direccin real. Por ejemplo, suponga que el programa es cargado en
una seccin que comienza en la direccin 100. El programa har referencias a las
direcciones 50,52,54. Pero el contenido de esas direcciones no es el deseado, sino las
direcciones 150, 152 y 154, ya que ah comienza el programa. La suma de 100 + 50,
...,etctera se hacen al tiempo de ejecucin. La primera solucin vale ms la pena que la
segunda si el programa contiene ciclos y es largo, ya que consumir menos tiempo en la
resolucin inicial que la segunda solucin en las resoluciones en lnea.
4.3.2. El problema de la proteccin
Este problema se refiere a que, una vez que un programa ha sido caragado a memoria en
algn segmento en particular, nada le impide al programador que intente direccionar ( por
error o deliberadamente ) localidades de memoria menores que el lmite inferior de su
programa o superiores a la direccin mayor; es decir, quiere referenciar localidades fuera de
su espacio de direcciones. Obviamente, este es un problema de proteccin, ya que no es
legal leer o escribir en reas de otros programas.
La solucin a este problema tambin puede ser el uso de un registro base y un registro
lmite. El registro base contiene la direccin del comienzo de la seccin que contiene al
programa, mientras que el lmite contiene la direccin donde termina. Cada vez que el
programa hace una referencia a memoria se checa si cae en el rango de los registros y si no
es as se enva un mensaje de error y se aborta el programa.
4.3.3. Particiones fijas o particiones variables
En el esquema de la multiprogramacin en memoria real se manejan dos alternativas para
asignarle a cada programa su particin correspondiente: particiones de tamao fijo o
particiones de tamao variable. La alternativa ms simple son las particiones fijas. Dichas
particiones se crean cuando se enciende el equipo y permanecern con los tamaos iniciales
hasta que el equipo se apague. Es una alternativa muy vieja, quien haca la divisin de
particiones era el operador analizando los tamaos estimados de los trabajos de todo el da.

Por ejemplo, si el sistema tena 512 kilobytes de RAM, podia asignar 64 k para el sistema
operativo, una particin ms de 64 k, otra de 128k y una mayor de 256 k. Esto era muy
simple, pero inflexible, ya que si surgan trabajos urgentes, por ejemplo, de 400k, tenan
que esperar a otro da o reparticionar, inicializando el equipo desde cero. La otra
alternativa, que surgi despus y como necesidad de mejorar la alternativa anterior, era
crear particiones contiguas de tamao variable. Para esto, el sistema tena que mantener ya
una estructura de datos suficiente para saber en dnde haban huecos disponibles de RAM y
de dnde a dnde haban particiones ocupadas por programas en ejecucin. As, cuando un
programa requera ser cargado a RAM, el sistema analizaba los huecos para saber si haba
alguno de tamao suficiente para el programa que quera entrar, si era as, le asignaba el
espacio. Si no, intentaba relocalizar los programas existentes con el propsito de hacer
contiguo todo el espacio ocupado, as como todo el espacio libre y as obtener un hueco de
tamao suficiente. Si an as el programa no caba, entonces lo bloqueaba y tomaba otro. El
proceso con el cual se juntan los huecos o los espacios ocupados se le llama
`compactacin'. El lector se habr dado cuenta ya de que surgen varios problemas con los
esquemas de particiones fijas y particiones variables: En base a qu criterio se elige el
mejor tamao de particin para un programa ? Por ejemplo, si el sistema tiene dos huecos,
uno de 18k y otro de 24 k para un proceso que desea 20 k, Cual se le asigna ? Existen
varios algoritmos para darle respuesta a la pregunta anterior, los cuales se enumeran y
describen enseguida.

Primer Ajuste: Se asigna el primer hueco que sea mayor al tamao deseado.

Mejor Ajuste: Se asigna el hueco cuyo tamao exceda en la menor cantidad al


tamao deseado. Requiere de una bsqueda exhaustiva.

Peor Ajuste: Se asigna el hueco cuyo tamao exceda en la mayor cantidad al tamao
deseado. Requiere tambin de una bsqueda exhaustiva.

El Siguiente Ajuste: Es igual que el `primer ajuste' con la diferencia que se deja un
apuntador al lugar en donde se asign el ltimo hueco para realizar la siguiente
bsqueda a partir de l.

Ajuste Rpido: Se mantienen listas ligadas separadas de acuerdo a los tamaos de


los huecos, para as buscarle a los procesos un hueco ms rpido en la cola
correspondiente.

Otro problema que se vislumbra desde aqu es que, una vez asignado un hueco, por
ejemplo, con "el peor ajuste", puede ser que el proceso requiriera 12 kilobytes y que el
hueco asignado fuera de 64 kilobytes, por lo cual el proceso va a desperdiciar una gran
cantidad de memoria dentro de su particin, lo cual se le llama `fragmentacin interna'.
Por otro lado, conforme el sistema va avanzando en el da, finalizando procesos y
comenzando otros, la memoria se va configurando como una secuencia contigua de huecos
y de lugares asignados, provocando que existan huecos, por ejemplo, de 12 k, 28k y 30 k,
que sumados dan 70k, pero que si en ese momento llega un proceso pidindolos, no se le
pueden asignar ya que no son localidades contiguas de memoria ( a menos que se realice la

compactacin ). Al hecho de que aparezcan huecos no contiguos de memoria se le llama


`fragmentacin externa'.
De cualquier manera, la multiprogramacin fue un avance significativo para el mejor
aprovechamiento de la unidad central de procesamiento y de la memoria misma, as como
dio pie para que surgieran los problemas de asignacin de memoria, proteccin y
relocalizacin, entre otros.
4.3.4. Los overlays
Una vez que surgi la multiprogramacin, los usuarios comenzaron a explorar la forma de
ejecutar grandes cantidades de cdigo en reas de memoria muy pequeas, auxiliados por
algunas llamadas al sistema operativo. Es as como nacen los `overlays'.
Esta tcnica consiste en que el programador divide lgicamente un programa muy grande
en secciones que puedan almacenarse el las particiones de RAM. Al final de cada seccin
del programa ( o en otros lugares necesarios ) el programador insertaba una o varias
llamadas al sistema con el fin de descargar la seccin presente de RAM y cargar otra, que
en ese momento resida en disco duro u otro medio de almacenamiento secundario. Aunque
esta tcnica era eficaz ( porque resolva el problema ) no era eficiente ( ya que no lo
resolva de la mejor manera ). Esta solucin requera que el programador tuviera un
conocimiento muy profundo del equipo de cmputo y de las llamadas al sistema operativo.
Otra desventaja era la portabilidad de un sistema a otro: las llamadas cambiaban, los
tamaos de particiones tambin. Resumiendo, con esta tcnica se podan ejecutar
programas ms grandes que las particiones de RAM, donde la divisin del cdigo corra a
cuenta del programador y el control a cuenta del sistema operativo.

4.4. Multiprogramacin en memoria virtual


La necesidad cada vez ms imperiosa de ejecutar programas grandes y el crecimiento en
poder de las unidades centrales de procesamiento empujaron a los diseadores de los
sistemas operativos a implantar un mecanismo para ejecutar automticamente programas
ms grandes que la memoria real disponible, esto es, de ofrecer `memoria virtual'.
La memoria virtual se llama as porque el programador ve una cantidad de memoria mucho
mayor que la real, y en realidad se trata de la suma de la memoria de almacenamiento
primario y una cantidad determinada de almacenamiento secundario. El sistema operativo,
en su mdulo de manejo de memoria, se encarga de intercambiar programas enteros,
segmentos o pginas entre la memoria real y el medio de almacenamiento secundario. Si lo
que se intercambia son procesos enteros, se habla entonces de multiprogramacin en
memoria real, pero si lo que se intercambian son segmentos o pginas, se puede hablar de
multiprogramacin con memoria virtual.
La memoria virtual se apoya en varias tcnicas interesantes para lograr su objetivo. Una de
las teorias ms fuertes es la del `conjunto de trabajo', la cual se refiere a que un programa o
proceso no est usando todo su espacio de direcciones en todo momento, sino que existen
un conjunto de localidades activas que conforman el `conjunto de trabajo'. Si se logra que
las pginas o segmentos que contienen al conjunto de trabajo estn siempre en RAM,
entonces el programa se desempear muy bien.

Otro factor importante es si los programas exhiben un fenmeno llamado `localidad', lo


cual quiere decir que algunos programas tienden a usar mucho las instrucciones que estn
cercanas a la localidad de la instruccin que se est ejecutando actualmente.
4.4.1 Paginacin pura
La paginacin pura en el manejo de memoria consiste en que el sistema operativo divide
dinmicamente los programas en unidades de tamao fijo ( generalmente mltiplos de 1
kilobyte ) los cuales va a manipular de RAM a disco y viceversa. Al proceso de
intercambiar pginas, segmentos o programas completos entre RAM y disco se le conoce
como `intercambio' o `swapping'. En la paginacin, se debe cuidar el tamo de las pginas,
ya que si stas son muy pequeas el control por parte del sistema operativo para saber
cules estn en RAM y cuales en disco, sus direcciones reales, etc; crece y provoca mucha
`sobrecarga' (overhead). Por otro lado, si las pginas son muy grandes, el overhead
disminuye pero entonces puede ocurrir que se desperdicie memoria en procesos pequeos.
Debe haber un equilibrio.
Uno de los aspectos ms importantes de la paginacin, asi como de cualquier esquema de
memoria virtual, es la forma de traducir una direccin virtual a direccin real. Para
explicarlo, obsrvese la figura 4.3.

Como se observa, una direccin virtual `v' = ( b,d) est formada por un nmero de pgina
virtual `b' y un desplazamiento `d'. Por ejemplo, si el sistema ofrece un espacio de
direcciones virtuales de 64 kilobytes, con pginas de 4 kilobytes y la RAM slo es de 32
kilobytes, entonces tenemos 16 pginas virtuales y 8 reales. La tabla de direcciones
virtuales contiene 16 entradas, una por cada pgina virtual. En cada entrada, o registro de la
tabla de direcciones virtuales se almacenan varios datos: si la pgina est en disco o en
memoria, quin es el dueo de la pgina, si la pgina ha sido modificada o es de lectura
nada mas, etc. Pero el dato que nos interesa ahora es el nmero de pgina real que le
corresponde a la pgina virtual. Obviamente, de las 16 virtuales, slo ocho tendrn un valor
de control que dice que la pgina est cargada en RAM, as como la direccin real de la

pgina, denotada en la figura 4.3 como b' . Por ejemplo, supngase que para la pgina
virtual nmero 14 la tabla dice que, efectivamente est cargada y es la pgina real 2
( direccin de memoria 8192 ). Una vez encontrada la pgina real, se le suma el
desplazamiento, que es la direccin que deseamos dentro de la pgina buscada ( b' + d ).
La tabla de direcciones virtuales a veces est ubicada en la misma meoria RAM, por lo cual
se necesita saber en qu direccin comienza, en este caso, existe un registro con la
direccin base denotada por la letra `a' en la figura 4.3.
Cuando se est buscando una pgina cualquiera y sta no est cargada, surge lo que se
llama un `fallo de pgina' (page fault ). Esto es caro para el manejador de memoria, ya que
tiene que realizar una serie de pasos extra para poder resolver la direccin deseada y darle
su contenido a quien lo pide. Primero, se detecta que la pgina no est presente y entonces
se busca en la tabla la direccin de esta pgina en disco. Una vez localizada en disco se
intenta cargar en alguna pgina libre de RAM. Si no hay pginas libres se tiene que escoger
alguna para enviarla hacia el disco. Una vez escogida y enviada a disco, se marca su valor
de control en la tabla de direcciones virtuales para indicar que ya no est en RAM, mientras
que la pgina deseada se carga en RAM y se marca su valor para indicar que ahora ya est
en RAM. Todo este procedimiento es caro, ya que se sabe que los accesos a disco duro son
del orden de decenas de veces ms lentos que en RAM. En el ejemplo anterior se mencion
que cuando se necesita descargar una pgina de RAM hacia disco se debe de hacer una
eleccin. Para realizar esta eleccin existen varios algoritmos, los cuales se describen
enseguida.

La primera en entrar, primera en salir: Se escoge la pgina que haya entrado primero
y est cargada en RAM. Se necesita que en los valores de control se guarde un dato
de tiempo. No es eficiente porque no aprovecha ninguna caracterstica de ningn
sistema. Es justa e imparcial.

La no usada recientemente: Se escoge la pgina que no haya sido usada


(referenciada) en el ciclo anterior. Pretende aprovechar el hecho de la localidad en el
conjunto de trabajo.

La usada menos recientemente: Es parecida a la anterior, pero escoge la pgina que


se us hace ms tiempo, pretendiendo que como ya tiene mucho sin usarse es muy
probable que siga sin usarse en los prximos ciclos. Necesita de una bsqueda
exhaustiva.

La no usada frecuentemente: Este algoritmo toma en cuenta no tanto el tiempo, sino


el nmero de referencias. En este caso cualquier pgina que se use muy poco,
menos veces que alguna otra.

La menos frecuentemente usada: Es parecida a la anterior, pero aqu se busca en


forma exhaustiva aquella pgina que se ha usado menos que todas las dems.

En forma aleatoria: Elige cualquier pgina sin aprovechar nada. Es justa e imparcial,
pero ineficiente.

Otro dato interesante de la paginacin es que ya no se requiere que los programas estn
ubicados en zonas de memoria adyacente, ya que las pginas pueden estar ubicadas en
cualquier lugar de la memoria RAM.

4.4.2 Segmentacin pura


La segmentacin se aprovecha del hecho de que los programas se dividen en partes lgicas,
como son las partes de datos, de cdigo y de pila (stack). La segmentacin asigna
particiones de memoria a cada segmento de un programa y busca como objetivos el hacer
fcil el compartir segmentos ( por ejemplo libreras compartidas ) y el intercambio entre
memoria y los medios de almacenamiento secundario.
Por ejemplo, en la versin de UNIX SunOS 3.5, no existan libreras compartidas para
algunas herramientas, por ejemplo, para los editores de texto orientados al ratn y mens.
Cada vez que un usuario invocaba a un editor, se tena que reservar 1 megabyte de
memoria. Como los editores son una herramienta muy solicitada y frecuentemente usada, se
dividi en segmentos para le versin 4.x ( que a su vez se dividen en pginas ), pero lo
importante es que la mayor parte del editor es comn para todos los usuarios, de manera
que la primera vez que cualquier usuario lo invocaba, se reservaba un megabyte de
memoria como antes, pero para el segundo, tercero y resto de usuarios, cada editor extra
slo consuma 20 kilobytes de memoria. El ahorro es impresionante. Obsrvese que en la
segmentacin pura las particiones de memoria son de tamao variable, en contraste con
pginas de tamao fijo en la paginacin pura. Tambin se puede decir que la segmentacin
pura tiene una granularidad menor que la paginacin por el taman de segmentos versus
tamao de pginas. Nuevamente, para comprender mejor la segmentacin, se debe dar un
repaso a la forma en que las direcciones virtuales son traducidas a direcciones reales, y para
ellos se usa la figura 4.4. Prcticamente la traduccin es igual que la llevada a cabo en la
paginacin pura, tomando en consideraci que el tamao de los bloques a controlar por la
tabla de traduccin son variables, por lo cual, cada entrada en dicha tabla debe contener la
longitud de cada segmento a controlar. Otra vez se cuenta con un registro base que contiene
la direccin del comienzo de la tabla de segmentos. La direccin virtual se compone de un
nmero de segmento (s) y un desplazamiento ( d ) para ubicar un byte (o palabra ) dentro de
dicho segmento. Es importante que el desplazamiento no sea mayor que el tamao del
segmento, lo cual se controla simplemente checando que ese valor sea mayor que la
direccin del inicio del segmento y menor que el inicio sumado al tamao.

Una ves dada una direccin virtual v=( s,d ), se realiza la operacin b + s para hallar el
registro (o entrada de la tabla de segmentos ) que contiene la direccin de inicio del
segmento en la memoria real, denotado por s'. Ya conociendo la direccin de inicio en
memoria real s' slo resta encontrar el byte o palabra deseada, lo cual se hace sumndole a
s' el valor del desplazamiento, de modo que la direccin real r = s' + d.
Cada entrada en la tabla de segmentos tiene un formato similar al mostrado en la figura 4.5.
Se tienen campos que indican la longitud, los permisos, la presencia o ausencia y direccin
de inicio en memoria real del segmento.

Segn amplios experimentos [Deitel93] sugieren que un tamao de pginas de 1024 bytes
generalmente ofrece un desempeo muy aceptable. Intuitivamente parecera que el tener
pginas del mayor tamao posible hara que el desempeo fuera ptimo pero no es as, a
menos que la pgina fuera del tamao del proceso total. No es as con tamaos grandes de
pgina menores que el proceso, ya que cuando se trae a memoria principal una pgina por
motivo de un solo byte o palabra, se estn trayendo muchsimos ms bytes de los deseados.
La dependencia entre el nmero de fallas respecto al tamao de las pginas se muestra en la
figura 4.6.

Un hecho notable en los sistemas que manejan paginacin es que cuando el proceso
comienza a ejecutarse ocurren un gran nmero de fallos de pgina, porque es cuando est
referenciando muchas direcciones nuevas por vez primera, despus el sistema se estabiliza,
conforme el nmero de marcos asignados se acerca al tamao del conjunto de trabajo.

El la figura 4.7 se muestra la relacin entre el tiempo promedio entre fallas de pgina y el
nmero de marcos de pgina asignados a un proceso. All se ve que el tiempo entre fallas
decrece conforme se le asignan ms pginas al proceso. La grfica se curva en un punto, el
cual corresponde a que el proceso tiene un nmero de pginas asignado igual al que
necesita para almacenar su conjunto de trabajo. Despus de eso, el asignarle a un proceso
ms pginas que las de su conjunto de trabajo ya no conviene, ya que el tiempo promedio
entre fallas permanece sin mucha mejora. Un aspecto curioso de aumentar el nmero de
pginas a un proceso cuando el algoritmo de seleccin de pginas candidatas a irse a disco
es la primera en entrar primera en salir es la llamada `anomala FIFO' a `anomala de
Belady'. Belady encontr ejemplos en los que un sistema con un nmero de pginas igual a
tres tena menos fallas de pginas que un sistema con cuatro pginas. El ejemplo descrito en
[Tanxx] es injusto. Si se mira con cuidado, obviamente si se compara un sistema con 10
pginas contra otro de 5, ya de inicio el primer sistema tendr 5 fallos de pgina ms que el
de 5, porque se necesitan diez fallos para cargarlo. A esto debera llamrsele `anomala de
Belady con correccin.
4.4.3 Sistemas combinados

La paginacin y la segmentacin puras son mtodos de manejo de memoria bastante


efectivos, aunque la mayora de los sistemas operativos modernos implantan esquemas
combinados, es decir, combinan la paginacin y la segmentacin. La idea de combinar
estos esquemas se debe a que de esta forma se aprovechan los conceptos de la divisin
lgica de los programas (segmentos) con la granularidad de las pginas. De esta forma, un
proceso estar repartido en la memoria real en pequeas unidades (pginas) cuya liga son
los segmentos. Tambin es factible as el compartir segmentos a medida que las partes
necesitadas de los mismos se van referenciando (pginas). Para comprender este esquema,
nuevamente se ver cmo se traduce una direccin virtual en una localidad de memoria
real. Para la paginacin y segmentacon puras se puede decir que el direccionamiento es
`bidimensional' porque se necesitan dos valores para hallar la direccin real. Para el caso
combinado, se puede decir que se tiene un direccionamiento `tridimensional'. En la figura
4.8 [ Deitel93] se muestran las partes relevantes para lograr la traduccin de direcciones. El
sistema debe contar con una tabla de procesos (TP). Por cada rengln de esa tabla se tiene
un nmero de proceso y una direccin a una tabla de segmentos. Es decir, cada proceso
tiene una tabla de segmentos. Cuando un proceso hace alguna referencia a memoria, se
consulta TP para encontrar la tabla de segmentos de ese proceso. En cada tabla de
segmentos de proceso (TSP) se tienen los nmeros de los segmentos que componen a ese
proceso. Por cada segmento se tiene una direccin a una tabla de pginas. Cada tabla de
pginas tiene las direcciones de las pginas que componen a un solo segmento. Por
ejemplo, el segmento `A' puede estar formado por las pginas reales `a','b','c','p' y `x'. El
segmento `B' puede estar compuesto de las pginas `f','g','j','w' y `z'.
Para traducir una direccin virtual v=(s,p,d) donde `s' es el segmento, `p' es la pgina y `d'
el desplazamiento en la pgina se hace lo siguiente. Primero se ubica de qu proceso es el
segmento y se localiza la tabla de segmentos de ese proceso en la TP. Con `s' como ndice
se encuentra un rengln ( registro) en la tabla de segmentos de ese proceso y en ese rengln
est la direccin de la tabla de pginas que componen al segmento. Una vez en la tabla de
pginas se usa el valor `p' como ndice para encontrar la direccin de la pgina en memoria
real. Una vez en esa direccin de memoria real se encuentra el byte (o palabra) requerido
por medio del valor de `d'.

Ahora, en este esquema pueden haber dos tipos de fallos: por fallo de pgina y por fallo de
segmento. Cuando se hace referencia a una direccin y el segmento que la contiene no est
en RAM ( aunque sea parcialmente ), se provoca un fallo por falta de segmento [Deitel93]
y lo que se hace es traerlo del medio de almacenamiento secundario y crearle una tabla de
pginas. Una vez caragado el segmento se necesita localizar la pgina correspondiente, pero
sta no existe en RAM, por lo cual se provoca un fallo de pgina y se carga de disco y
finalmente se puede ya traer la direccin deseada por medio del desplazamiento de la
direccin virtual.
La eficiencia de la traduccin de direcciones tanto en paginacin pura, segmentacin pura y
esquemas combinados se mejora usando memorias asociativas para las tablas de pginas y
segmentos, as como memorias cache para guardar los mapeos ms solicitados.
Otro aspecto importante es la estrategia para cargar pginas ( o segmentos ) a la memoria
RAM. Se usan ms comunmente dos estrategias: cargado de pginas por demanda y
cargado de pginas anticipada. La estrategia de caragdo por demanda consiste en que las
pginas solamente son llevadas a RAM si fueron solicitadas, es decir, si se hizo referencia a
una direccin que cae dentro de ellas. La carga anticipada consiste en tratar de adivinar qu
pginas sern solicitadas en el futuro inmediato y cargarlas de antemano, para que cuando
se pidan ya no ocurran fallos de pgina. Ese `adivinar' puede ser que se aproveche el

fenmeno de localidad y que las pginas que se cargan por anticipado sean aquellas que
contienen direcciones contiguas a la direccin que se acaba de refenciar. De hecho, el
sistema operativo VMS usa un esquema combinado para cargar pginas: cuando se hace
referencia a una direccin cuya pgina no est en RAM, se provoca un fallo de pgina y se
carga esa pgina junto con algunas pginas adyacentes. En este caso la pgina solicitada se
carg por demanda y las adyacentes se cargaron por anticipacin.

You might also like