Sie sind auf Seite 1von 6

Memoria virtual segmentada

Hay otra forma en la que puede subdividirse la memoria direccionable, conocida


como segmentación. Mientras que la paginación es invisible para el programador
y sirve para proporcionar al programador un espacio de direcciones mayor, la
segmentación es usualmente visible para el programador y proporciona una
forma conveniente de organizar los programas y los datos, para asociar los
privilegios y los atributos de protección con las instrucciones y los datos.
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 (denominados
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.

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.

Políticas de ubicación para memorias segmentadas


Se identifican los huecos de memoria principal por su tamaño (longitud) y
dirección inicial, y se reúnen en una lista. La política de ubicación determinará la
ordenación previa de la lista. Una vez que se decide el hueco donde se ubica el
segmento, se actualiza la lista de huecos con el que se acaba de crear (a no ser
que el segmento mida exactamente igual que el hueco de memoria utilizado). Si
no se puede encontrar un hueco apropiado para el segmento, interviene la
política de sustitución. Las tres políticas de ubicación de segmentos más
utilizadas son las siguientes:
Mejor ajuste
La lista de huecos se mantiene ordenada en orden creciente de tamaño y se
ubica el segmento en el primer hueco con capacidad suficiente para albergarlo.
Peor ajuste
La lista de huecos se mantiene ordenada en orden decreciente de tamaño y se
ubica el segmento en el primer hueco con capacidad suficiente para albergarlo.
Primer ajuste
La lista de huecos se mantiene ordenada en orden creciente de las direcciones
iniciales de los huecos, y se ubica el segmento en el primer hueco con capacidad
suficiente para albergarlo. Con esta política, cuando transcurre un cierto tiempo,
se acumulan un número elevado de huecos
pequeños próximos a la cabeza de la lista, penalizando las búsquedas. Esto se
puede evitar adelantando cíclicamente, después de cada búsqueda un hueco la
posición inicial de la lista.

Enfatizamos que un segmento es una entidad lógica, de la cual el programador


está consciente y la utiliza como entidad lógica. Un segmento podría contener
un procedimiento, o un arreglo, o una pila, o una colección de variables
escalares, pero por lo general no contiene una mezcla de distintos
tipos.
Una memoria segmentada tiene otras ventajas además de simplificar el manejo
de estructuras de datos que aumentan o reducen su tamaño. Si cada
procedimiento ocupa un segmento separado, con la dirección 0 como su
dirección inicial, la vinculación de procedimientos que se compilan por separado
se simplifica de manera considerable. Después de que se han compilado y
vinculado todos los procedimientos que constituyen un programa, una llamada
al procedimiento en el segmento n utilizará la dirección en dos partes (n, 0) para
direccionar la palabra 0 (el punto de entrada).
Si el procedimiento en el segmento n se modifica y recompila posteriormente, no
hay necesidad de cambiar los demás procedimientos (ya que no se han
modificado direcciones iniciales), aun si la nueva versión es más grande que la
anterior. Con una memoria unidimensional, los procedimientos se empaquetan
estrechamente, uno al lado del otro, sin espacio de direcciones entre ellos. En
consecuencia, al cambiar el tamaño de un procedimiento se puede afectar la
dirección inicial de otros procedimientos (no relacionados). Esto a su vez
requiere la modificación de todos los procedimientos que llamen a cualquiera de
los procedimientos que se movieron, para poder incorporar sus nuevas
direcciones iniciales. Si un programa contiene cientos de procedimientos, este
proceso puede ser costoso. La segmentación también facilita la compartición de
procedimientos o datos entre varios procesos. Un ejemplo común es la biblioteca
compartida. Las estaciones de trabajo modernas que operan sistemas de
ventanas avanzados tienen a menudo bibliotecas gráficas en extremo extensas
que se compilan en casi todos los programas. En un sistema segmentado, la
biblioteca gráfica se puede colocar en un segmento y varios procesos pueden
compartirla, eliminando la necesidad de tenerla en el espacio de direcciones de
cada proceso. Aunque también es posible tener bibliotecas compartidas en
sistemas de paginación puros, es más complicado. En efecto, estos sistemas lo
hacen mediante la simulación de la segmentación.
Como cada segmento forma una entidad lógica de la que el programador está
consciente, como un procedimiento, un arreglo o una pila, los distintos
segmentos pueden tener diferentes tipos de protección. Un segmento de
procedimiento se puede especificar como de sólo ejecución, para prohibir los
intentos de leer de él o almacenar en él. Un arreglo de punto flotante se puede
especificar como de lectura/escritura pero no como de ejecución, y los intentos
de saltar a él se atraparán. Dicha protección es útil para atrapar errores de
programación.
En una memoria segmentada, el usuario está consciente de lo que hay en cada
segmento. Por lo general, un segmento no contendría un procedimiento y una
pila, por ejemplo, sino uno o el otro, no ambos. Como cada segmento contiene
sólo un tipo de objeto, puede tener la protección apropiada para ese tipo
específico. El contenido de una página es, en cierto sentido, accidental. El
programador ni siquiera está consciente del hecho de que está ocurriendo la
paginación. Aunque sería posible poner unos cuantos bits en cada entrada de la
tabla de páginas para especificar el acceso permitido, para utilizar esta
característica el programador tendría que llevar registro del lugar en el que se
encontraran los límites de página en su espacio de direcciones. La paginación
se inventó para eliminar precisamente ese tipo de administración. Como el
usuario de una memoria segmentada tiene la ilusión de que todos los segmentos
se encuentran en memoria principal todo el tiempo (es decir, que puede
direccionarlos como si estuvieran) puede proteger cada segmento por separado
sin tener que preocuparse con la administración por tener que superponerlos.

Memoria con segmentos paginados


Como vimos en el apartado anterior, la segmentación presenta una serie de
propiedades
ventajosas para el programador, sin embargo, la paginación proporciona una
forma más eficiente de gestionar el espacio de memoria. Para combinar las
ventajas de ambas, algunos sistemas permiten una combinación de ambas, es
decir, un sistema virtual con segmentos paginados. El mecanismo de traducción
de Direcciones Virtuales a Direcciones Físicas no es más que la composición del
mecanismo de la memoria segmentada y el de la paginada, tal como se muestra
en la siguiente figura:
Biblio
Organización y arquitectura
de computadores
Séptima Edición
WILLIAM STALLINGS
SISTEMAS OPERATIVOS
MODERNOS
TERCERA EDICIÓN
ANDREW S. TANENBAUM

Das könnte Ihnen auch gefallen