Anda di halaman 1dari 6

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 del
usuario 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 una
tabla 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 quinta
funcin 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 nmero
de 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 de
dos 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 de
dos 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 de
segmentos 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 una
excepcin 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 tabla
deseada 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 muy
rpidamente: 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. Una
direccin 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 Kbytes. 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 acceso
de 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 del
tamao 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 <
STLR), Entonces, aadimos el nmero de segmento al STBR resultando la direccin en memoria
de la entrada de la tabla de segmentos (STBR + s). Esta entrada se lee en la memoria y actuamos
igual que antes: se verifica el desplazamiento frente a la longitud de segmento, y se calcula la
direccin fsica de la palabra deseada como la suma de la base del segmento y el desplazamiento.
Igual que con la paginacin, esta transformacin requiere dos referencias a memoria por direccin
lgica, el ordenador disminuir su velocidad en un factor de 2, a menos que se haga algo para
evitarlo. La solucin normal consiste en utilizar un conjunto de registros asociativos para mantener
las entradas utilizadas ms recientemente en la tabla de segmentos. Un conjunto de registros
asociativos relativamente pequeo (8 \ 16) puede reducir generalmente el retardo a los accesos a
memoria hasta no ms all de un 10% o 15% ms lentos que los accesos a memoria "mapeada".

6.5.3.4 Comparticin y proteccin


Una ventaja importante de la segmentacin es la asociacin de la proteccin con los segmentos.
Puesto que los segmentos representan una porcin del programa definida semnticamente, es
probable que todas las entradas en el segmento se utilicen de la misma manera. De ah que
tengamos algunos segmentos que son instrucciones, mientras que otros son datos. En una
arquitectura moderna las instrucciones son no automodificables, de modo que los segmentos de
instrucciones pueden definirse como de slo lectura o slo ejecucin. El hardware verificar los
bits de proteccin asociados a cada entrada en la tabla de segmentos para impedir accesos ilegales
a memoria, tales como tentativas de escribir en un segmento de slo lectura o de utilizar un
segmento de slo ejecucin como datos. Situando una tabla en un segmento propio, el hardware
verificar automticamente que toda indexacin en la tabla es legal, y no sobrepasa los lmites de la
misma. As, muchos errores frecuentes en programas sern detectados por hardware antes de que
puedan ocasionar un dao serio.
Otra ventaja de la segmentacin est relacionada con la comparticin de cdigo y datos. Los
segmentos se comparten cuando las entradas en las tablas de segmentos de dos procesos
diferentes apuntan a las mismas posiciones fsicas.
La comparticin se produce a nivel de segmento. Por lo tanto, cualquier informacin puede
compartirse definindole un segmento. Pueden compartirse varios segmentos, de modo que es
posible compartir un programa compuesto de ms de un segmento.
Por ejemplo, consideremos el uso de un editor de textos en un sistema de tiempo compartido.
Un editor completo podra resultar bastante largo, y formado por muchos segmentos. Estos
segmentos pueden compartirse entre todos los usuarios, limitando la memoria fsica necesaria para
soportar las tareas de edicin. En lugar de necesitar n copias del editor, precisamos solamente una.
An necesitamos segmentos nicos e independientes para almacenar las variables locales de cada
usuario. Estos segmentos, por supuesto, no deben ser compartidos.
Tambin es posible compartir solo partes de programas. Por ejemplo, subrutinas de uso frecuente

pueden compartirse entre muchos usuarios definindolas como segmentos de slo lectura
compartibles. Por ejemplo, dos programas Fortran pueden utilizar la misma subrutina Sqrt, pero
slo ser precisa una copia fsica de la rutina Sqrt.
Aunque esta comparticin parece ser bastante sencilla, tiene algunas sutilezas. Tpicamente, los
segmentos de cdigo tienen referencias a s mismos. Por ejemplo, un salto condicional tiene
normalmente una direccin de transferencia. La direccin de transferencia es un nombre de
segmento y un desplazamiento. El nmero de segmento de la direccin de transferencia ser el del
segmento de cdigo. Si tratamos de compartir este segmento, todos los procesos que lo
compartan tienen que definir el segmento de cdigo compartido con el mismo nmero de
segmento.
Por ejemplo, si queremos compartir la rutina Sqrt y un proceso quiere definirla como segmento 4 y
otro lo hace como segmento 17, cmo podra la subrutina Sqrt referenciarse a s misma? Puesto
que solamente hay una copia fsica de Sqrt, tiene que referenciarse a s misma de la misma manera
para ambos usuarios: tiene que tener un nmero de segmento nico. A medida que crece el nmero
de usuarios que comparten el segmento, tambin crece la dificultad de encontrar un nmero de
segmento aceptable.
Los segmentos de datos de slo lectura (sin punteros) pueden compartirse an usando nmeros
de segmento diferentes; lo mismo puede hacerse con segmentos de cdigo que no se referencian
directamente a s mismos, sino slo indirectamente. Por ejemplo, la bifurcacin condicional que
especifica la direccin de desplazamiento a partir del valor actual del contador de programa o
respecto a un registro que contiene el nmero de segmento actual, permite que el cdigo no tenga
que realizar una referencia al nmero de segmento actual.
El ordenador GE 645 utilizado con Multics tena 4 registros que contenan los nmeros de
segmento del segmento actual, del segmento de pila, del segmento de enlace y de un segmento de
datos. Los programas pocas veces hacen referencia directamente a un nmero de segmento, sino
siempre indirectamente a travs de estos cuatro registros de segmento. Esto permite que el cdigo
pueda compartirse libremente.

6.5.3.5 Fragmentacin
El sistema operativo tiene que encontrar y asignar memoria para todos los segmentos de un
programa de usuario. Esta situacin es similar a la paginacin, excepto en el hecho de que los
segmentos son de longitud variable; las pginas son todas del mismo tamao. Por tanto, como en
el caso de las particiones dinmicas, la asignacin de memoria es un problema de asignacin
dinmica de almacenamiento, resuelto probablemente mediante un algoritmo del mejor o primer
ajuste.
La segmentacin puede ocasionar entonces fragmentacin externa, cuando todos los bloques libres
de memoria son demasiado pequeos para acomodar a un segmento. En este caso, el proceso
puede simplemente verse obligado a esperar hasta que haya disponible ms memoria (o al menos
huecos ms grandes), o puede utilizarse la compactacin para crear huecos mayores. Puesto que la

segmentacin es por naturaleza un algoritmo de reubicacin dinmica, podemos compactar la


memoria siempre que queramos.
En qu medida es mala la fragmentacin externa en un esquema de segmentacin ? La respuesta
a estas preguntas depende principalmente del tamao medio de segmento. En un extremo, se
podra definir cada proceso como un segmento; este esquema es el de las particiones dinmicas.
En el otro extremo, cada palabra podra situarse en su propio segmento y reubicarse por separado.
Esta disposicin elimina la fragmentacin externa. Si el tamao medio de segmento es pequeo, la
fragmentacin externa tambin ser pequea. (Por analoga, consideremos la colocacin de las
maletas en el maletero de un coche; parece que nunca encajan bien. Sin embargo, si se abren las
maletas y se colocan en el maletero los objetos sueltos, todo encaja). Puesto que los segmentos
individuales son ms pequeos que el proceso en conjunto, es ms probable que encajen en los
bloques de memoria disponibles.

ENLACE al tema anterior: INTERBLOQUEOS


ENLACE al siguiente tema: MEMORIA VIRTUAL

Anda mungkin juga menyukai