Sei sulla pagina 1di 5

La memoria segmentada.

Los segmentos son bloques de memoria de tamaño variable que contiene información de la
misma clase. La segmentación es eficaz para organizar la memoria en módulos lógicos de similares
características proveyendo mecanismos de protección. La unidad de segmentación de un
procesador Intel siempre esta activada.

La memoria en modo real.

En modo real para identificar la posición a la que hay que acceder a un segmento se nencitan de
dos indicadores: la base y el desplazamiento. Para poder conseguir la base se multiplica por 16 el
registro de segmento correspondiente (es lo mismo que agregarle 4 ceros), obteniendo asi 20 bits
para la base.

Dirección física = RS (Registro de segmento) * 16 + desplazamiento.

Para que un programa este en estado runnnig solo necesita un segmento de código, de pila y de
datos
La memoria en modo protegido.

La memoria en modo protegido distingue 3 Espacios:

 Espacio virtual o lógico.


 Espacio lineal.
 Espacio físico.

Espacio virtual o lógico

La dirección lógica o virtual se ve caracterizada por dos partes:

 Selector: campo de 14 bits, que selecciona un determinado segmento de la memoria


virtual.
 Desplazamiento: campo de 32 bits que determina la posición dentro del segmento.

El campo selector está contenido en los 14 bits de mayor peso del registro de segmento, sirviendo
los dos restantes para referenciar privilegios, a este campo lo llamamos RPL. A los 13 bits de más
peso del campo selector se lo suele llamar índice, al bit de menos peso del campo selector
(llamado bit TI) es el indicar de tabla. Si TI=1 es indica tabla global, TI=0 indica tabla local. El
desplazamiento es un campo de 32 bits cuyo resultado se suma con el de la base para obtener la
dirección a acceder. Si CS actúa como selector, EIP actúa como desplazamiento.

El Pentium dispone de una MMU (unidad de manejo de memoria), que es la encarga de traducir la
dirección virtual a física. La MMU comienza recogiendo la dirección virtual de 46 bits y la introduce
a la unidad de paginación que contiene las tablas de descriptores de segmentos, que determinan
que segmentos están cargados en memoria y su dirección. Si el segmento solicitado esta en
memoria se traduce la dirección virtual a dirección lineal y luego se accede en memoria. En caso
de fallo es el SO él es el encargo de cargar dicho segmento en memoria como también luego de
dicha acción actualizar la tabla de descriptores de segmentos.
Espacio lineal.

Si la unidad de paginación esta desactivada la dirección lineal coincide con la dirección física.
Recordamos que es la MMU la encarga de traducir la dirección virtual a dirección lineal, atreves de
la unidad de paginación que contiene la tabla de descriptores de segmentos. Los 14 bits de más
peso del selector de segmento actúan como entrada a la tabla.

Un descriptor de segmentos esta compuesto por 8 bytes (32 bits), contiene los parámetros que
define a un segmento:

 Base: campo de 32 bits, que contiene la dirección lineal donde comienza el segmento.
 Limite: campo de 20 bits que expresa el tamaño de segmento.
 Atributos o derecho de acceso: campo de 20 bits.

Bits que componen el campo atributo:

 Bit de presencia (P): indica si el segmento al que hacen referencia esta en memoria.
 Nivel de privilegio (DPL): es un campo que consta de 2 bits indica el privilegio de dicho
segmento.
 Clase de segmento(S): indica si es un segmento normal (de pila, dato, de código) o si es un
segmento de sistema.
 Tipo: distingue si los segmentos normales son de código, de dato o de pila.
 Accedido (A): indica si el segmento fie accedido. El SO lo utiliza para tener una cuanta de
cuantas veces se accedió para luego utilizar el algoritmo LRU.
 Granularidad (G): indica si el campo limite es expresado en unidades de Bytes o paginas
de 4 KB.
 Defecto / grande (D/B): utilizado para la compatibilidad con el 8086.
 Disponible (AVL): a disposición del programador de SO.

Tipos de segmentos normales.

Si un segmento es normal entonces S=1. De los 3 bits del campo Tipo, el bit de más peso (E) indica
si es o no ejecutable el segmento, es decir indica si es de código o de dato (de pila).

Dependiendo del valor de E los otros dos bits se pueden interpretar de diferentes formas.

Si E=1, es decir un segmento de código:

 Ajustable(C): indica si cambia el nivel de privilegio al ser accedido.


 Legible(R): indica si se puede leer.
Si E=0; es decir un segmento de dato:

 Expansión decreciente(ED): su usa para diferenciar un segmento de dato común con un


de pila debido, a que para al crecer uno decremento su dirección (pila) y el otro
incrementa su dirección (dato).
 Escribible (W): indica si se puede leer y escribir o solo leer.

Tabla de descriptores.

En un SO multitarea cada tarea esta dividía en segmentos. Pudiendo compartir recursos si los
segmentos están en el área global o restringido si esta en el área local. Cada segmento del área
local esta defino por un descriptor existente en la tabla de descriptores globales GDT. Asimismo
existe una tabla de descriptores locales o LDT que describe los segmentos de cada tarea en
particular.

Dos registros internos de la CPU, GDTR y LDTR apuntan a la GDT y a la LDT de la tarea activa o
runnnig.

Cada tabla de descriptores puede contener un total de 8K descriptores de 8 bytes cada uno (32
bits), es decir una tabla pesa en memoria 64KB.

La CPU tiene activa dos tablas la LDT y GDT, por eso hay un bit TI que indica a cuál de ellas se
refiere. Los 13 bits de más peso del campo selector (índice) apuntan a una de las entradas de la
tabla.

Para poder posicionarse en un descriptor de segmento se calcula así:

Dirección = LDTR + INDICE * 8


A partir del selector y a través de las tablas de descriptores es así como se puede obtener la base
del segmento para luego sumarle el desplazamiento.

El modo plano.

La segmentación no se puede desactivar, pero si se puede emular una inhabilitación para usar solo
la paginación. El problema es que la CPU por defecto asume que el tamaño máximo de un
segmento en modo real es de 64KB. Pero se puede engañar, pasando de modo real a modo
protegido, modificando dichos límites y luego volver a modo protegido de manera que la memoria
sea solo un solo segmento.

Potrebbero piacerti anche