Post on 06-Sep-2015
description
6.5.3 Segmentacin [SILB94] [DEIT93]
Un aspecto importante de la gestin de la memoria que la paginacin convierte en inevitable es la
separacin de la visin que el usuario tiene de la memoria y la memoria fsica real. La visin delusuario no coincide con la memoria fsica real. La visin del usuario se transforma en la memoria
fsica. La traduccin de direcciones permite esta diferencia entre la memoria lgica y la fsica.
6.5.3.1 Visin del usuario de la memoria
Cul es la visin de la memoria que tiene el usuario ? Concibe el usuario la memoria como unatabla lineal de palabras, algunas de las cuales contienen instrucciones mientras que otras contienen
datos, o bien se prefiere alguna otra visin de la memoria ? Hay un acuerdo general en que el
usuario o programador de un sistema no piensa en la memoria como una tabla lineal de palabras.
Ms bien prefieren concebirla como una coleccin de segmentos de longitud variable, no
necesariamente ordenados (fig. 6.14).
Consideremos cmo ve usted un programa cuando lo est escribiendo. Piensa en l como un
programa principal, con un conjunto de subrutinas, procedimientos, funciones o mdulos.
Tambin puede haber diversas estructuras de datos: tablas, matrices, pilas, variables, etc. Cada
uno de estos mdulos o elementos de datos se referencian por un nombre. Usted habla de la "tabla
de smbolos", A "la funcin Sqrt", "el programa principal", sin tener en cuenta qu direcciones de
memoria ocupan estos elementos. Usted no se preocupa de si la tabla de smbolos se almacena
antes o despus de la funcin Sqrt. Cada uno de estos elementos es de longitud variable; la
longitud est definida intrnsecamente por el propsito del segmento en el programa. Los elementos
dentro de un segmento estn identificados por su desplazamiento desde el principio del segmento:
la primera instruccin del programa, la decimosptima entrada de la tabla de smbolos la quintafuncin Sqrt, etc.
La segmentacin es un esquema de administracin de la memoria que soporta la visin que el
usuario tiene de la misma. Un espacio de direcciones lgicas es una coleccin de segmentos. Cada
segmento tiene un nombre y una longitud. Las direcciones especifican tanto el nombre del segmento
como el desplazamiento dentro del segmento. Por lo tanto, el usuario especifica cada direccin
mediante dos cantidades: un nombre de segmento y un desplazamiento. (Comprese este esquema
con la paginacin, donde el usuario especificaba solamente una nica direccin, que el hardware
particionaba en nmero de pgina y desplazamiento, siendo todo ello invisible al programador).
Por simplicidad de implementacin, los segmentos estn numerados y se referencian por un nmerode segmento en lugar de por un nombre. Normalmente el programa de usuario se ensambla (o
compila), y el ensamblador (o el compilador) construye automticamente segmentos que reflejan
el programa de entrada. Un compilador de Pascal podra crear segmentos separados para (1) las
variables globales, (2) la pila de llamada de procedimientos, para almacenar parmetros y devolver
direcciones, (3) el cdigo de cada procedimiento o funcin, y (4) las variables locales de cada
procedimiento y funcin. El cargador tomara todos esos segmentos y les asignara nmeros de
segmento.
6.5.3.2 Hardware
Aunque el usuario ahora puede referenciar los objetos del programa por medio de una direccin dedos dimensiones, la memoria fsica real es todava, por supuesto, una secuencia unidimensional de
palabras. La transformacin se efecta por medio de una tabla de segmentos.
El empleo de una tabla de segmentos se muestra en la figura 6.15. Una direccin lgica consta dedos partes: un nmero de segmento s y un desplazamiento dentro de ese segmento, d. El nmero
de segmento se utiliza como un ndice en la tabla de segmentos. Cada entrada de la tabla desegmentos tiene una base de segmento y un lmite. El desplazamiento d de la direccin lgica tiene
que estar comprendido entre 0 y el lmite de segmento. En caso contrario se produce unaexcepcin al sistema operativo (tentativa de direccionamiento lgico ms all del fin de
segmento). Si este desplazamiento es legal, se aade a la base para producir la direccin de la tabladeseada en la memoria fsica. La tabla de segmentos es as esencialmente una matriz de pares
registros base/lmite.
ENLACE A LA SIMULACIN DE MEMORIA SEGMENTADA
6.5.3.3 Implementacin de tablas de segmentos
Al igual que la tabla de pginas, la tabla de segmentos puede situarse bien en registros rpidos o
bien en memoria. Una tabla de segmentos mantenida en registros puede ser referenciada muyrpidamente: la adicin a la base y la comparacin con el lmite pueden realizarse simultneamente
para ahorrar tiempo. El PDP-11/45 utiliza este mtodo; tiene 8 registros de segmento. Unadireccin de 16 bits se forma a partir de un nmero de segmento de 3 bits y de un desplazamiento
de 13 bits. Esta disposicin permite hasta 8 segmentos; cada segmento puede ser de hasta 8 K-bytes. Cada entrada en la tabla de segmentos tiene una direccin base, una longitud y un conjunto
de bits de control de acceso que especifican acceso denegado, acceso de slo lectura, o accesode lectura/escritura al segmento.
El Burroughs B5500 permita 32 segmentos de hasta 1024 palabras cada uno. Estas
especificaciones definan un nmero de segmento de 5 bits y un desplazamiento de 10 bits. Sin
embargo, la experiencia con este sistema mostr que los segmentos eran pocos y que el lmite deltamao del segmento era demasiado pequeo (las tablas mayores de 1K tenan que fragmentarse
entre varios segmentos). Por ello, el GE 645 utilizado por Multics permite hasta 256 K-segmentos
de hasta 64 K-palabras.
Con tantos segmentos no es factible mantener la tabla de segmentos en registros, de modo que
tiene que mantenerse en memoria. Un registro de base de tabla de segmentos (STBR) apunta a
la tabla de segmentos. Puesto que el nmero de segmentos utilizado por un programa puede variar
ampliamente, tambin se utiliza un registro de longitud de tabla de segmentos (STLR). En el
caso de una direccin lgica (s, d) verificamos primero que el nmero de segmento s es legal (s