Paginación

Tanto las particiones de tamaño fijo como las de tamaño variable hacen un uso ineficiente de la memoria; las primeras generan fragmentación interna y las segundas originan fragmentación externa. La paginación es un esquema que permite que el espacio de direcciones lógicas de un proceso no sea contiguo y esto evita el problema de ajustar las porciones de memoria de tamaño variable en el almacén de respaldo, del cual sufrían la mayoría de los esquemas anteriores de administración de la memoria, ya que dividen los programas en pequeñas partes o páginas y de esta forma la cantidad de memoria desperdiciada

Cuando algunos fragmentos de código de datos que residen en la memoria principal necesitan ser intercambiados, se debe encontrar estación en el almacén de respaldo.

La memoria física se descompone en bloques de tamaño fijo denominados marcos. La memoria lógica también se descompone en bloques del mismo tamaño denominados páginas. Cuando se va a ejecutar un proceso, sus páginas se cargan desde el almacén de respaldo en cualquier marco de memoria disponible.

El almacén de respaldo se divide en bloque de tamaño fijo que son del mismo tamaño que los marcos de la memoria.

En un cualquier momento, la memoria se encuentra ocupada con páginas de diferentes procesos, mientras que algunos marcos están disponibles para su uso. El sistema operativo mantiene una lista de estos últimos marcos, y una tabla por cada proceso, donde consta en qué marco se encuentra cada página del proceso. De esta forma, las páginas de un proceso pueden no estar contiguamente ubicadas en memoria, y pueden intercalarse con las páginas de otros procesos.

Cada dirección generada por la CPU se divide en dos partes: un número de página (p) y un desplazamiento de página (d). El número de página se emplea como un índice en una tabla de páginas. La tabla de páginas contiene la dirección base de cada página en la memoria física. Esta dirección base se combina con el desplazamiento de página para definir la dirección física de la memoria que se envía a la unidad de memoria.

La paginación misma es una forma de relocalización dinámica. El hardware de paginación vincula cada dirección lógica con alguna dirección física. La paginación es similar al uso de una tabla de registros base (de relocalización), uno para cada marco de la memoria.

Cuando utilizamos un esquema de paginación no tenemos fragmentación externa: cualquier marco libre puede ser asignado a un proceso que lo necesite. Sin embargo, podemos tener cierta fragmentación interna.

Cada sistema operativo tiene sus propios métodos para almacenar tablas de páginas. La mayoría asigna una tabla de páginas por cada proceso. Un apuntador a la tabla de páginas se almacena con los demás valores de registros (como el contador de instrucciones) en el bloque de control del proceso. Cuando se le dice al despachador que inicie un proceso, debe recargar los registros del usuario y definir los valores correctos de la tabla de páginas de hardware a partir de la tabla de páginas del usuario que está almacenada.

La protección de memoria en un ambiente con paginación se realiza mediante bits de protección que están asociados con cada marco. Estos bits normalmente se mantienen en la tabla de páginas. Un bit puede definir que una página sea de lectura y escritura, o sólo de lectura. Cada referencia a la memoria pasa por la tabla de páginas para encontrar el número correcto de marco. La mayoría de los sistemas de cómputo modernos soportan un espacio grande de direcciones lógicas ( 232 a 2 64 ). En tales ambientes, la tabla de páginas se vuelve excesivamente grande. Una solución sencilla a este problema consiste en dividir la tabla de páginas en piezas más pequeñas (paginación con niveles múltiples).

Otra ventaja de la paginación es la posibilidad de compartir un código común (páginas compartidas). Esta consideración es importante en un ambiente de tiempo compartido. El código reentrante (también denominado código puro) es un código que no puede modificarse a sí mismo. Si el código es reentrante, entonces nunca cambia durante la ejecución. Por lo tanto, dos o más procesos pueden ejecutar el mismo código al mismo tiempo. Cada proceso tiene su propia copia de registros y almacenamiento de datos para contener los datos para la ejecución del proceso. También se pueden compartir otros programas que se utilizan intensamente: compiladores, sistemas de ventanas, sistemas de bases de datos, etc.

Fuente: Apuntes de la materia Sistemas Operativos Multiusuario de la FCA – UNAM