Está en la página 1de 9

Paginamiento

Prcticamente el nico mecanismo que se usa hoy en da para implementar espacios de


direcciones virtuales es paginamiento. En este mecanismo una pgina es un bloque de
memoria de taman o fijo y potencia de 2 (tpicamente 4 KB u 8 KB). La idea es que el
espacio de direcciones virtuales y el espacio de direcciones reales se particionan en pginas
del mismo taman o (ver figura
).

Figure: Particionamiento de los espacios de direcciones en pginas.


Una pgina siempre se procesa como un todo, si se otorga a un proceso, se otorga la pgina
completa, en ningn caso una fraccin de la pgina. Cada pgina del espacio de direcciones
virtuales puede residir en cualquiera de las pginas del espacio de direcciones reales,
siempre y cuando all haya memoria fsica.

La tabla de pginas
En el descriptor de cada proceso se guarda una tabla de pginas que consiste en una arreglo
que indica en qu pgina de la memoria real se ubica cada pgina del espacio de
direcciones virtuales (ver figura
). Para ello se enumeran las pginas virtuales y las

pginas reales de 0 en adelante. De esta forma en la fila v de la tabla de pginas se indica en


que nmero de pgina real se encuentra la pgina virtual nmero v.

Figure: La tabla de pginas de un proceso.

Atributos de una pgina


Los atributos de una pgina son un conjunto de bits que indican qu operaciones es vlido
realizar en cada pgina del proceso. Estos bits son:

Bit V: En 1 indica que es vlido leer esta pgina. En 0, la pgina no se puede leer ni
escribir, simplemente esa pgina no reside en la memoria real. Si se accesa esa
pgina se produce una page fault (falta de pgina) que invoca una interrupcin.

Bit W: En 1 indica que la pgina se puede escribir, pero slo si adems V est en 1.
Si est en 0 y se escribe en la pgina, se produce una interrupcin.

Bit R: El hardware coloca este bit en 1 cada vez que se lee una palabra de esta
pgina. Se usa para implementar paginamiento en demanda.

Bit D: El hardware coloca este bit en 1 cada vez que se escribe en esta pgina.

Cambios de contexto
El hardware del procesador posee usualmente un registro que indica la direccin en la
memoria real de la tabla de pginas del proceso en ejecucin. Este registro necesariamente
contiene una direccin real pues de ser una direccin virtual, caeramos en una ciclo
infinito al tratar de determinar en qu lugar de la memoria real se encuentra.
Durante un cambio de contexto es necesario cambiar el espacio de direcciones virtuales por
el del proceso entrante, por lo que este registro se modifica con la direccin de la tabla de
pginas que se encuentra en el descriptor del proceso entrante.

Taman o de la tabla de pginas


Si las direcciones son de 32 bits y las pginas son de bits, significa que la tabla de pginas
debe poseer
filas. Esto da 512 K-filas, si las pginas son de 8 KB. Por lo tanto se
requeriran 2 MB slo para almacenar la tabla si se destinan 4 bytes por cada fila, lo que es
obviamente excesivo.
Este problema lo resolveremos temporalmente restringiendo el espacio de direcciones
virtuales a 1024 pginas u otra cantidad razonable. Por ende el taman o de la tabla de
pginas necesita slo 1024 filas o 4 KB. Los accesos a la pgina 1024 o una pgina superior
causan una interrupcin.

Traduccin de direcciones virtuales


El hardware del microprocesador se encarga de traducir las direcciones virtuales que accesa
un proceso a direcciones reales. Para efectuar esta traduccin el hardware determina el

nmero de la pgina virtual a partir de la direccin virtual accesada por el proceso y la


traduce al nmero de la pgina real en donde reside esa pgina virtual.
Si las pginas son de bytes y las direcciones de 32 bits, es muy fcil determinar el nmero
de una pgina en una direccin. Basta observar que todas las direcciones que caen en la
misma pgina v tienen un mismo prefijo de 32-k bits que corresponde precisamente a v, los
ltimos k bits en la direccin son el desplazamiento de la palabra accesada dentro de la
pgina.
El mecanismo de traduccin de direcciones se observa en la figura

. De la

direccin virtual se extraen los bits que corresponden al nmero de pgina virtual (v). Con
ellos se subindica la tabla de pginas y se determina en qu pgina real (r) se encuentra la
palabra accesada, adems se verifica que los atributos presentes en esa posicin en la tabla
autorizan la operacin solicitada (lectura o escritura). Finalmente, la direccin real se forma
a partir del nmero de la pgina real y el desplazamiento o dentro de la pgina que se extrae
de la direccin virtual.

Figure: Traduccin de direcciones virtuales a direcciones reales por medio de la tabla de


pginas.

El potencial del paginamiento


El paginamiento permite implementar espacios de direcciones virtuales y por lo tanto
proteccin entre procesos. Tambin permite realizar todas las optimizaciones del uso de la
memoria que ofrece la segmentacin:

Extensin automtica de la pila en caso de desborde.


Cuando un proceso desborda su pila, el ncleo puede asignarle una nueva pgina en
forma transparente para el proceso.

Extensin explcita de los datos.


Cuando el proceso solicita la extensin de los datos invocando la llamada al sistema
sbrk, el ncleo asigna las pginas necesarias segn la memoria pedida.

Swapping.
Cuando la memoria escasea, el ncleo puede llevar procesos a disco: sus datos, su
cdigo, su pila y sus tablas de pginas.

Implementacin de procesos semi-ligeros.


Los procesos semi-ligeros comparten la porcin del espacio de direcciones que
corresponde al cdigo y los datos, pero poseen una porcin no compartida en donde
se ubica la pila. Con esto es posible implementar extensin automtica de la pila en
caso de desborde.

Pero adems, el mecanismo de paginamiento permite realizar mejor algunas optimizaciones


que en segmentacin.

No hay framentacin externa


Se dice que la fragmentacin asociada a la segmentacin es una fragmentacin externa
porque se pierden trozos de memoria fuera de la memoria asignada a los procesos. Este
problema no existe en paginamiento: se puede otorgar a un proceso un conjunto de pginas
reales que ocuparn una porcin contigua del espacio de direcciones virtuales, an cuando
estas pginas reales no forman un bloque contiguo en la memoria real del computador.
La administracin de pginas de taman o fijo es un problema simple de resolver
eficientemente. Las pginas disponibles se organizan en una lista enlazada simple. La
extraccin y la devolucin de pginas toma tiempo constante y requiere unas pocas
instrucciones. Cuando un proceso solicita explcitamente o implcitamente ms memoria, se
le otorga tantas pginas como sea necesario para completar la memoria requerida, sin
importar que las p'aginas disponibles estn diseminadas por toda la memoria.
Aunque no hay fragmentacin externa s puede haber fragmentacin interna. Este ltimo
tipo de fragmentacin ocurre cuando a un proceso se le otorga ms memoria de la que l
solicita. En efecto, al otorgar un grupo de pginas, es usual que la ltima pgina contenga
un sobrante que el proceso no ha solicitado. Este sobrante existe porque en paginamiento
no se pueden otorgar fracciones de pgina. En todo caso, los estudios indican que la
fragmentacin interna significa una prdida de memoria inferior a la fragmentacin externa.

Implementacin eficiente de fork


Es el intrprete de comandos el que tpicamente llama a fork para crear una copia de s
mismo. Esta copia invoca de inmediato exec del binario de un comando ingresado por el
usuario. En un esquema segmentado esto requiere duplicar los segmentos de datos y de pila
del intrprete de comandos, para que luego se destruyan de inmediato. Esto es un uso muy
ineficiente del tiempo de procesador.

En un esquema de paginamiento, fork se puede implementar eficientemente haciendo uso


de la tcnica copy-on-write (copia al escribir). La idea es no duplicar de inmediato las
pginas de datos y de pila, sino que slo duplicar la tabla de pgina del proceso que invoca
fork (ver figure
). Inicialmente los procesos padre e hijo comparten todas sus

pginas, pero se protegen contra escritura.

: Optimizacin de fork a travs de copy-on-write.


Al retomar estos procesos cualquier escritura del padre o del hijo genera una interrupcin.
El ncleo duplica entonces la pgina que se modifica y se le coloca permiso de escritura.
De esta forma se retoma el proceso interrumpido en forma transparente, sin que se d
cuenta del cambio de pgina.
La ganancia se obtiene cuando el fork va seguido prontamente por un exec, puesto que
ser necesario duplicar slo unas 2 o 3 pginas, lo que resulta ser mucho ms econmico
que duplicar todas las pginas.

Implementacin de procesos semi-pesados


En una esquema de paginamiento se puede implementar todo el rango de ``pesos'' de los
procesos (ver figura
). En esta categorizacin los procesos se distinguen por la

amplitud del espacio de direcciones que comparten. Mientras ms espacio comparten, ms


ligeros son.

: Clasificacin de los procesos segn la porcin compartida del espacio de direcciones.


Los procesos semi-pesados se ubican a mitad de camino entre los semi-ligeros y los
pesados. Los procesos semi-pesados tienen dos porciones del espacio de direcciones para
datos:

Una primera porcin no compartida correspondiente a las variables globales y al


heap administrado por malloc/ free.

Una segunda porcin que s es compartida y en donde se coloca un heap que se


administra con procedimientos especiales: shared_malloc y shared_free. Estos
procedimientos deben adquirir un lock antes de realizar cualquier cambio en el
heap, para evitar problemas de seccin crtica.

Los procesos semi-pesados mejoran los procesos semi-ligeros porque no es necesario


reescribir los procedimientos de biblioteca que invocan malloc y free. Esto porque los
procesos semi-pesados no necesitan sincronizarse para llamar a malloc o free.
Observe que un proceso semi-pesado puede enviar a otro proceso semi-pesado un puntero a
una estructura que pidi con shared_malloc, pero es un error mandar un puntero a una
estructura que se pidi con malloc.

Paginamiento en demanda
Por ltimo, el paginamiento permite realizar una optimizacin sobre el uso de la memoria
que no se puede realizar en un esquema de segmentacin: paginamiento en demanda.
En este esquema el ncleo lleva a disco las pginas virtuales que no han sido accesadas por
un perodo prolongado y, a pesar de todo, el proceso propietario de esas pginas puede
continuar corriendo, si no las accesa.
El paginamiento en demanda ser estudiado en profundidad en la siguiente seccin.

Ejemplos de sistemas de paginamiento

Observe que conceptualmente, cada vez que se realiza un acceso a la memoria, es necesario
realizar un acceso a memoria adicional para realizar la traduccin. De implementarse de
esta forma, estaramos doblando el tiempo de ejecucin de cualquier programa, lo que sera
inaceptable para los usuarios. A continuacin examinamos como se resuelve este problema
en casos reales.

Paginamiento en una Sun 3/50


En una Sun 3/50 las pginas son de 8 KB (k=13) y la tabla de pginas posee 1024 filas por
lo que el espacio de direcciones virtuales se restringe a 8 MB. Es interesante estudiar este
esquema de paginamiento, pues permite apreciar las restricciones de los esquemas
primitivos.
La tabla de pginas del proceso en ejecucin se guarda en una memoria esttica de tiempo
de acceso muchsimo ms rapido que la memoria dinmica en donde se almacenan datos y
programas (la Sun 3/50 no posea memoria cache). De esta forma la penalizacin en tiempo
de ejecucin al realizar la traduccin de la direccin virtual es razonable (del orden de un
10% de tiempo adicional en cada acceso a la memoria).
Este mecanismo presenta los siguientes inconvenientes:

La memoria rpida destinada a la tabla de pginas puede almacenar slo la tabla del
proceso en ejecucin. Cada vez se hace un cambio de contexto hay que modificar
las 1024 filas en esta memoria. Por esta razn los cambios de contexto entre
procesos pesados en una Sun 3/50 son caros en tiempo de CPU (son ``pesados'').

El espacio de direcciones virtuales es demasiado estrecho. Este espacio era


suficiente en la poca de esta estacin (an os 86-89), pero insuficiente hoy en da.

Paginamiento en un Intel 386/486/Pentium


En esta familia de procesadores, las pginas son de 4 KB (k=12) y el espacio de direcciones
virtuales es de 4 GB ( bytes). Una tabla de pginas est restringida a 1024 filas, pero un
proceso puede tener hasta 1024 tablas distintas. Cada tabla de pginas sirve para traducir
las direcciones de un bloque contiguo de 4 MB de memoria en el espacio de direcciones
virtuales.
Adems de las tablas de pginas, existe un directorio que indica que tablas posee el proceso
en ejecucin y cul es su direccin real en la memoria del computador. El directorio y las
tablas de pginas ocupan cada uno una pgina completa.
El proceso de traduccin se observa en la figura

. La organizacin del directorio es

similar a la de una tabla de pginas, slo que en vez de indicar la traduccin de una pgina,

indica la direccin de una tabla de pginas para traducir la pginas que pertenecen a un
bloque de 4 MB (una especie de super pgina). Adems en cada fila del directorio hay
atributos similares a los de una tabla de pginas. Por ejemplo si el bit V est en 0, quiere
decir que todo un bloque de 4 MB en el espacio virtual no est asignado en la memoria real.

Figure: Traduccin de direcciones virtuales en un procesador Intel 386/486/Pentium.


El gasto en pginas de memoria para implementar los procesos de un sistema operativo
como Unix son los siguientes:

Una pgina que contiene el directorio del proceso en ejecucin. En cada cambio de
contexto es necesario cambiar parcialmente este directorio para reflejar el cambio
en el espacio de direcciones.

Por cada proceso lanzado, se requiere al menos una pgina para almacenar la tabla
de pginas correspondiente al rea de cdigo y datos, ubicada en las direcciones
bajas de la memoria. Si esta rea requiere ms de 4 MB se necesita una nueva
pgina por cada 4 MB adicional.

Por cada proceso lanzado, se requiere una pgina para almacenar la tabla de pginas
correspondiente al rea de la pila, ubicada en las direcciones medias del espacio de
direcciones (inferiores a 2 GB). Es prcticamente imposible que un programa
requiera ms de 4 MB para pila, por lo que es razonable prohibir pilas de mayor
taman o.

Para que en modo sistema se vea por completo la memoria real del computador en
las direcciones superiores a 2 GB, se requiere una pgina por cada 4 MB de
memoria real.

El acelerador de la traduccin de direcciones: TLB


El directorio y las tablas de pginas se almacenan en memoria real en una Intel 386. Con
esto, se reduce el tiempo para realizar un cambio de contexto, pero se multiplica por 3 el
costo del acceso a la memoria virtual. En efecto cada acceso a la memoria virtual requiere
un acceso real en el directorio para determinar la tabla de pginas, otro acceso real en la

tabla de pginas y finalmente el acceso real de la palabra solicitada por el proceso. Este
nuevo sobrecosto es escandalosamente inaceptable.
Para acelerar los accesos a la memoria, el hardware del computador posee una TLB (de
translation look-aside buffer). La TLB es una pequen a memoria asociativa (similar a una
memoria cach) de muy rpido acceso que almacena la traduccin y los atributos de 32 a
128 pginas virtuales accesadas recientemente (ver figura
).

Figure: Estructura de la TLB: Translation-Lookaside-Buffer.


Cuando se accesa una pgina cuya traduccin se encuentra en la TLB, el sobrecosto es
bajsimo. En cambio si la traduccin no se encuentra en la TLB, slo entonces se visitan el
directorio y la tabla de pginas en la memoria real, con un sobrecosto de 2 accesos
adicionales a la memoria. La traduccin de esta pgina se coloca en la TLB para que los
futuros accesos a esta pgina sean eficientes. Sin embargo, eventualmente ser necesario
suprimir una traduccin previamente existente en la TLB, debido a su taman o limitado.
Empricamente se ha determinado que ms del 99% de los accesos a memoria corresponde
a pginas cuya traduccin y atributos se encuentran en la TLB.
Una restriccin usual es que la TLB mantiene slo la traduccin de pginas pertenecientes
al proceso en ejecucin. Durante un cambio de contexto es necesario invalidar la TLB, para
que no se encuentren en la TLB traducciones que corresponden errneamente al proceso
anterior. Este es un costo escondido del cambio de contexto: el proceso que recibe el
procesador encuentra la TLB vaca, la que se ir poblando a medida que el proceso accesa
sus pginas virtuales. Para cargar 64 filas de la TLB se habrn requerido 128 accesos
adicionales. De todas formas, este sobrecosto es muy inferior al del cambio de contexto en
una Sun 3/50.
De esta forma se resuelven los dos problemas de los mecanismos de paginamiento
primitivos: el espacio de direcciones virtuales crece a 4 GB y el costo del cambio de
contexto se reduce. La mayora de los procesadores modernos emplean esquemas similares
a la excepcin de los PowerPC que poseen tablas de pginas invertidas, que por problemas
de espacio no podemos discutir este documento.

También podría gustarte