Este documento describe la memoria virtual segmentada, que divide la memoria en segmentos lógicos de tamaño variable para simplificar la gestión de datos y permitir la protección y compartición de segmentos. Los programas y datos se asignan a segmentos separados, cada uno con sus propios derechos de acceso. Las direcciones virtuales constan de un número de segmento y un desplazamiento dentro del segmento, y se traducen a direcciones físicas mediante una tabla de segmentos.
0 calificaciones0% encontró este documento útil (0 votos)
138 vistas6 páginas
Este documento describe la memoria virtual segmentada, que divide la memoria en segmentos lógicos de tamaño variable para simplificar la gestión de datos y permitir la protección y compartición de segmentos. Los programas y datos se asignan a segmentos separados, cada uno con sus propios derechos de acceso. Las direcciones virtuales constan de un número de segmento y un desplazamiento dentro del segmento, y se traducen a direcciones físicas mediante una tabla de segmentos.
Este documento describe la memoria virtual segmentada, que divide la memoria en segmentos lógicos de tamaño variable para simplificar la gestión de datos y permitir la protección y compartición de segmentos. Los programas y datos se asignan a segmentos separados, cada uno con sus propios derechos de acceso. Las direcciones virtuales constan de un número de segmento y un desplazamiento dentro del segmento, y se traducen a direcciones físicas mediante una tabla de segmentos.
Este documento describe la memoria virtual segmentada, que divide la memoria en segmentos lógicos de tamaño variable para simplificar la gestión de datos y permitir la protección y compartición de segmentos. Los programas y datos se asignan a segmentos separados, cada uno con sus propios derechos de acceso. Las direcciones virtuales constan de un número de segmento y un desplazamiento dentro del segmento, y se traducen a direcciones físicas mediante una tabla de segmentos.
Descargue como DOCX, PDF, TXT o lea en línea desde Scribd
Descargar como docx, pdf o txt
Está en la página 1de 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