Tanto la paginación como la segmentación tienen sus ventajas. La paginación elimina la fragmentación externa y de este modo, aprovecha la memoria principal de forma eficiente. Además, puesto que los fragmentos que se cargan y descargan de la memoria principal son de tamaño fijo e iguales, es posible construir algoritmos se gestión de memoria sofisticados que aprovechen mejor el comportamiento de los programas. La segmentación tiene las ventajas antes citadas, incluida la capacitación de gestionar estructuras de datos que puedan crecer, la modularidad y el soporte de la compartición y la protección. Para combinar las ventajas de ambas, algunos sistemas están equipados con hardware del procesador y software del S.O.
En un sistema con paginación y segmentación combinadas, el espacio de direcciones de un usuario se divide en varios segmentos según el criterio del programador. Cada segmento se vuelve a dividir en varias páginas de tamaño fijo, que tienen la misma longitud que un marco de memoria principal. Si el segmento tiene menor longitud que la página, el segmento ocupará sólo una página. Desde el punto de vista del programador, una dirección lógica todavía está formada por un número de segmento y un desplazamiento en el segmento. Desde el punto de vista de sistema, el desplazamiento del segmento se ve como un número de página dentro del segmento y un desplazamiento dentro de la página.
La entrada de la tabla de segmentos contiene la longitud del segmento. Los bits de presencia y modificación no son necesarios, puesto que estos elementos se gestionan en la página. Pueden usarse otros bits de control para comparición y protección. La entrada de la tabla de páginas es, la misma que se usa en un sistema de paginación pura. Cada número de página se convierte en el número de marco correspondiente si la página está presente en la memoria. El bit de modificación indica si se necesita escribir la página en el disco cuando se asigna el marco a otra página.
Segmentación en Linux
Linux no aprovecha la segmentación del i386. Sin embargo, no puede desactivarla, la utiliza de una forma muy limitada. Se ha preferido la paginación sobre la segmentación porque la gestión de memoria es mas simple, y uno de los objetivos de Linux es la portabilidad: muchos procesadores soportan malamente la segmentación, así que la independencia de la plataforma se vería mermada en Linux.
Paginación en Linux
Linux gestiona la memoria central y las tablas de páginas utilizadas para convertir las direcciones lineales (virtuales) en direcciones físicas. Implementa una gestión de la memoria ampliamente independiente de la plataforma sobre la que se ejecuta. Este modelo no siempre se corresponde con el de la plataforma sobre el cual se ejecuta (ejemplo, el anteriormente visto procesador i386). Es tan sumamente extenso el modelo de paginación en linux que se hace imposible de abordar. No obstante, podemos consultar en el archivo fuente mm/memory.c la gestión de las tablas de página (las encargadas de realizar la traducción entre dos tipos de direcciones). Las funciones dependientes de la arquitectura se definen en asm/potable.h.
Paginación (swapping) en Linux
Si un proceso necesita cargar una página de memoria virtual a memoria física y no hay ninguna página de memoria física libre, el sistema operativo tiene que crear espacio para la nueva página eliminando alguna otra página de memoria física. Si la página que se va a eliminar de memoria física provenía de un archivo imagen o de un archivo de datos sobre el que no se ha realizado ninguna operación de escritura, entonces la página no necesita ser guardada. Tan sólo se tiene que desechar y si el proceso que estaba utilizando la vuelve a necesitar simplemente se carga nuevamente desde el archivo imagen o datos.
Por otra parte, si la página ha sido modificada, el sistema debe preservar su contenido para que pueda volver a ser accedido. Este tipo de página se conoce como página modificada y para poderla eliminar de memoria se ha de guardar en un dispositivo de swap. El tiempo de acceso al dispositivo de intercambio es muy grande en relación a la velocidad del procesador y la memoria física, y el sistema operativo tiene que conjugar la necesidad de escribir páginas al disco con la necesidad de retenerlas en memoria para ser usadas posteriormente.
Memoria en Win32
Cuando un proceso se ejecuta, el sistema establece un espacio de direcciones virtuales propio de 32 bits, que permite habilitar un espacio de hasta 4 gigabytes de memoria. Éste está formado por la suma de la memoria RAM instalada, más la memoria virtual asignada.
Windows es un sistema multiproceso, ya que permite la ejecución de varios procesos a la vez. Por norma general, no todos los procesos caben en memoria a la vez, ya sea porque existan muchos procesos, como que el tamaño de éstos sea demasiado grande. Cuando esto sucede, Windows alterna la permanencia de éstos en memoria sacando unos y poniendo otros para que todos puedan ejecutarse. Utiliza la memoria virtual asignada a cada proceso para guardar los datos cada vez que se saca de la memoria. A éste cambio entre memoria física y memoria virtual se le conoce como Swapping.