Está en la página 1de 4

GESTIN DE MEMORIA EN EL MODO PROTEGIDO DEL 386

Cuando se cre el microprocesador 386, al ser un micro de 32 bits se vari la estructura del modo protegido para darle una mayor potencia, aparte de permitirle direccionar los 4GBytes que permite su bus de direcciones de 32 bits. En principio, el modo protegido del 386 funciona igual que el del 286: tenemos un registro de selector de 16 bits y uno de offset, esta vez de 32 bits, y en la tabla de selectores disponemos esta vez de 32 bits para indicar la posicin base de cada segmento. Sin embargo, disponemos solamente de 20 bits para indicar la longitud de cada segmento. Esto nos la limitara, en principio, a una longitud mxima de 1 mega por segmento. Sin embargo, los diseadores de Intel reservaron un bit de granularidad entre los muchos reservados del registro de estado. Este bit permite conseguir segmentos de hasta 4 GBytes con solo 20 bits. El truco consiste en que, si el bit est a cero, la unidad de longitud ser 1 byte, con lo que solo podremos tener segmentos de hasta 1 mega. En este modo se es compatible con el 286. Pero si este bit se pone a 1, la unidad ser 4 KBytes. Esto significa que un segmento puede tener una longitud mltiplo de esta: 4, 8, 12, 16, 20, 24, 28, 32, etc KBytes. En total, podemos disponer de hasta 64 TeraBytes de memoria para cada programa. Sin embargo, cuando usamos memoria virtual, este mtodo tiene un inconveniente que ya comentamos: dado que los segmentos pueden tener un tamao variable, puede ser necesario liberar varios pequeos para hacer sitio a uno grande. Adems, la memoria puede fragmentarse con facilidad, lo que obliga a reorganizarla para juntar pequeos huecos libres en uno solo grande. Todo esto consume tiempo extra durante el intercambio a disco. Para evitarlo, se incluy el modo paginado. Si este modo est activo, las direcciones que salen de la suma del selector y del offset son pasadas por un esquema como el siguiente:

Aqu vemos que el sistema se ha complicado mucho ms. Mediante este, podemos dividir la memoria en bloques de 4KBytes, e intercambiar solo aquellos que nos interese. De esta forma, si tenemos que cargar un segmento de 24 KBytes, solo liberaremos 24 KBytes de otro segmento, y no un segmento completo. Esto acelera las transferencias, elimina la fragmentacin (los bloques de 4KBytes que forman un segmento no tienen por qu ser consecutivas) y evita el crecimiento incontrolado del fichero de Swap. Sin embargo, hace el sistema algo ms lento, pues tiene que hacer ms accesos a la RAM (todas estas

tablas se sitan en la RAM normal). Para evitarlo, se incluyeron una serie de Buffers que retienen las pginas de direccin y de tabla ms usadas. En OS/2 2.0 y posteriores se define un nico segmento para cada programa, de 4 GBytes de longitud (si bien la cantidad de memoria disponible para uso propio es de 'solo' 512 MBytes) y se activa el modo paginado. De esta forma el acceso es ms rpido, pues no es necesario cargar mltiples valores en el registro de selector, y conservamos la capacidad de memoria virtual. Esta es la razn de que, cada vez que se hace una reserva de memoria (con DosAllocMem o similar) la cantidad se redondea al mltiplo de 4KBytes superior.

MODO DE OPERACIN
El 80386 tiene dos modos de operacin: modo de direccionamiento real (modo real), y modo de direccionamiento virtual protegido (modo protegido). En modo real el 80386 opera como un 8086 muy rpido, con extensiones de 32 bits si se desea. El modo real se requiere primariamente para preparar el procesador para que opere en modo protegido. El modo protegido provee el acceso al sofisticado manejo de memoria y paginado. Dentro del modo protegido, el software puede realizar un cambio de tarea para entrar en tareas en modo 8086 virtual (V86 mode) (esto es nuevo con este microprocesador). Cada una de estas tareas se comporta como si fuera un 8086 el que lo est ejecutando, lo que permite ejecutar software de 8086 (un programa de aplicacin o un sistema operativo). Las tareas en modo 8086 virtual pueden aislarse entre s y del sistema operativo (que debe utilizar instrucciones del 80386), mediante el uso del paginado y el mapa de bits de permiso de entrada/salida (I/O Permission Bitmap).

Finalmente, para facilitar diseos de hardware de alto rendimiento, la interfaz con el bus del 80386 ofrece pipelining de direcciones, tamao dinmico del ancho del bus de datos (puede tener 16 32 bits segn se desee en un determinado ciclo de bus) y seales de habilitacin de bytes por cada byte del bus de datos. Hay ms informacin sobre esto en la seccin de hardware del 80386.

SEGMENTACIN
Cuando se usa paginacin, el sistema divide la memoria para poder administrarla, no para facilitarle la vida al programador. La vista lgica que el programador tiene de la memoria no tiene nada que ver con la vista fsica que el sistema tiene de ella. El sistema ve un slo gran arreglo dividido en pginas, pero el programador piensa en trminos de un conjunto de subrutinas y estructuras de datos, a las cuales se refiere por su nombre: la funcin coseno, el stack, la tabla de smbolos, sin importar la ubicacin en memoria, y si acaso una est antes o despus que la otra. La segmentacin es una forma de administrar la memoria que permite que el usuario vea la memoria como una coleccin de segmentos, cada uno de los cuales tiene un nombre y un tamao (que, adems, puede variar dinmicamente). Las direcciones lgicas se especifican como un par (segmento, desplazamiento).

IMPLEMENTACIN DE LA SEGMENTACIN
Similar a paginacin: en vez de tabla de pginas, tabla de segmentos; para cada segmento, hay que saber su tamao y dnde comienza (base). Una direccin lgica (s,d), se traduce a base(s)+d. Si d es mayor que el tamao del segmento, entonces ERROR. Ventajas:

Al usuario se le simplifica el manejo de estructuras de datos de tamao dinmico. Se facilita el que los procesos compartan memoria. Los segmentos pueden estar protegidos segn la semntica de su contenido. Por ejemplo, un segmento que contiene cdigo, puede especificarse como slo para ejecucin (y nadie puede copiarlo ni sobreescribirlo); un arreglo puede especificarse como read/write but not execute. Esto facilita enormemente la deteccin de errores en el cdigo. Libreras compartidas de enlace dinmico (DLLs).
Pero la memoria sigue siendo, fsicamente, un slo arreglo de bytes, que debe contener los segmentos de todos los procesos. A medida que se van creando y eliminando procesos, se va a ir produciendo, inevitablemente fragmentacin externa. Si consideramos cada proceso como un slo gran segmento, tenemos el mismo caso que el de las particiones variables. Como cada proceso tiene varios segmentos, puede que el problema de la particin externa se reduzca, pues ya no necesitamos espacio contiguo para todo el proceso, sino que slo para cada segmento. Para eliminar completamente el problema de la fragmentacin interna, se puede usar una combinacin de segmentacin y paginacin, en la que los segmentos se paginan.

También podría gustarte