Memoria virtual segmentada

Mientras que la paginación es transparente para el programador, y le proporciona un espacio de direcciones mayor, la segmentación es normalmente visible para el programador, y proporciona una forma lógica de organizar los programas y los datos, y asociarle los privilegios y atributos de protección.

La segmentación permite que el programador vea la memoria constituida por múltiples espacios de direcciones o segmentos. Los segmentos tienen un tamaño variable, dinámico. Usualmente, el programador o el sistema operativo asignará programas y datos a segmentos distintos.

Puede haber segmentos de programa distintos para varios tipos de programas, y también distintos segmentos de datos. Se pueden asignar a cada segmento derechos de acceso y uso. Las direcciones virtuales estarán constituidas en este caso por un número de segmento (NS) y un desplazamiento dentro del segmento (DP).

El proceso de traducción de dirección virtual a física es análogo al de la memoria virtual paginada, con la diferencia que ahora tenemos una tabla de segmentos (TS) cuyas entradas (denominadas también descriptores de segmento) contienen, además de los bits de control y la dirección real del segmento, la longitud L del mismo, ya que los segmentos tienen longitud variable. En la siguiente figura hemos representado esquemáticamente el proceso de traducción.

Memoria virtual segmentada

Esta organización tiene ciertas ventajas para el programador, frente a un espacio de direcciones no segmentado:

Simplifica la gestión de estructuras variables de datos. Si el programador no conoce a priori el tamaño que puede llegar a tener una estructura de datos particular, no es necesario que lo presuponga. A la estructura de datos se le asigna su propio segmento, y el sistema operativo lo expandirá o lo reducirá según sea necesario.

Permite modificar los programas y recompilarlos independientemente, sin que sea necesario volver a enlazar y cargar el conjunto entero de programas. De nuevo, esto se consigue utilizando varios segmentos.

Permite que varios procesos compartan segmentos. Un programador puede situar un programa correspondiente a una utilidad o una tabla de datos de interés en un segmento, que puede ser direccionado por otros procesos.

Se facilita la protección. Puesto que un segmento se construye para contener un conjunto de programas o datos bien definido, el programador o el administrador del sistema puede asignar privilegios de acceso de forma adecuada.

Fuente: Estructura de Computadores, Facultad de Informática, UCM