2. IA-32 Modo Protegido
Permite tener acceso a todas las características
del procesador
Se introdujo en la arquitectura Intel en los
procesadores 286 y se mejoró notablemente con el
386
En su aspecto básico, en los procesadores actuales
funciona de la misma forma que en un 386
A partir de este modo se puede pasar al modo
extendido de 32 bits (para procesadores de 64 bits)
3. IA-32 Modo Protegido
Características más importantes que se pueden
usar en modo protegido:
Protección (niveles de privilegios)
Modo segmentado *
Espacio de direcciones lineal de 32 bits (registros de
propósito general)
Multitarea
Acceso a otros modos de operación (modo virtual 8086,
modo extendido, modo real)
Paginación de memoria
4. Paso de Modo Real a Modo
Protegido
Para pasar de modo real a modo protegido se debe
realizar por lo menos los siguientes pasos:
• Definir la organización de la memoria, por medio de
la Tabla Global de Descriptores (GDT)
• Habilitar la línea de direcciones A20, para poder
especificar direcciones de memoria de más de 20
bits.
• Modificar el registro CR0 para habilitar el flag PE.
• Saltar a una instrucción que se encuentre dentro
de un segmento de código válido.
5. Organización de la memoria
La memoria se maneja en un esquema segmentado.
Cada segmento puede tener cualquier un tamaño de: 1
a 232 bytes
La memoria se controla mediante descriptores de
segmento, que se almacenan en una estructura de
datos denominada GDT.
Los registros de segmento se denominan “selectores” y
funcionan de forma diferente al modo real.
El valor almacenado en los registros de segmento se
usa como subíndice en la GDT.
6. Organización de la memoria
Dirección Lógica
Dirección Lineal
Selector Offset
(16 bits) (32 bits)
Segmento
Descriptor de Segmento
Offset
Base
Límite (tamaño)
Nivel de privilegios
GDT
7. Tabla Global de Descriptores (GDT)
Tabla (arreglo) que contiene una serie de estructuras de
datos llamadas Descriptores.
La GDT puede contener hasta 213 descriptores. Cada
descriptor tiene un tamaño de 8 bytes (64 bits).
Entre los diferentes tipos de descriptores que se puede
almacenar en la GDT se encuentran los Descriptores
de Segmento. Estos almacenan la información de un
segmento en la memoria:
• Dirección base
• Tamaño
• Privilegios
• Estado
8. Tabla Global de Descriptores (GDT)
El GDT es una estructura de
datos que se almacena en
memoria. Debe estar alineada
a un límite de 8 bytes.
Su ubicación y tamaño se
describen en el registro GDTR.
Tabla Global de
Descriptores Descriptor
Descriptor
Registro GDTR
Descriptor NULO
Base Límite
9. Descriptores de Segmento
Dentro de la GDT se almacenan (entre otros)
descriptores de segmento. En modo protegido, se
requiere que la GDT contenga al menos tres
descriptores:
• El primer descriptor de la GDT siempre es nulo
• Un descriptor para el segmento de código
• Un descriptor para el segmento de datos
Por simplicidad, la mayoría de sistemas operativos
configuran sólo estos tres segmentos.
Los segmentos de código y datos se configuran con
base = 0 y con límite (tamaño) = 4 GB, lo que
significa que se utiliza el modo Flat (plano).
10. Formato de un Descriptor de
Segmento
Imagen tomada de: Manual de Intel IA32-3a : Systems Programmer’s Guide Part 1
11. Registros de Segmento
(Selectores)
En modo protegido el valor almacenado en un
registro de segmento (selector) tiene el
siguiente formato:
Imagen tomada de: Manual de Intel IA32-3a : Systems Programmer’s Guide Part 1
12. Línea de Direcciones A20
(A20 Gate)
• Por razones históricas, cuando el procesador se
encuentra en modo real, su línea de direcciones
20 (A20 Gate) se encuentra deshabilitada.
• Cualquier dirección de memoria mayor a 220
(1MB), se “trunca” al limite de 1 MB.
• Anteriormente la línea A20 se podía habilitar
mediante un pin en el teclado.
• En la actualidad este pin no existe, pero se
puede programar el controlador 8042 (teclado)
para habilitar la línea A20.
13. Línea de Direcciones A20
(A20 Gate)
Para habilitar la línea de direcciones A20 se debe realizar el siguiente
proceso:
1. Leer el bit de estado del controlador 8042, disponible en el puerto de
E/S 0x64.
2. Si el controlador del teclado se encuentra listo, el segundo bit de su
estado debe ser cero. En caso contrario, ir al paso 1.
3. Escribir el valor 0xd1 en el puerto de E/S 0x64. El valor 0xd1 le
indica al controlador que posteriormente se enviará otro byte que
contiene la configuración a establecer.
4. Repetir los pasos 1 y 2 para verificar que el controlador de teclado
haya recibido el comando.
5. Escribir el valor 0xdf en el puerto de E/S 0x60. Este valor habilita el
bit A20 dentro del controlador del teclado.
6. Repetir los pasos 1 y 2 para verificar que el controlador ha aceptado
el comando.
14. Registro CR0
Este registro controla la ejecución del procesador.
Su formato se muestra en la siguiente figura:
Imagen tomada de: Manual de Intel IA32-3a : Systems Programmer’s Guide Part 1
El bit 0 de CR0 (Protection Enable) permite
habilitar el modo protegido. No obstante antes
de habilitar este bit se debe configurar la GDT y
habilitar la línea de direcciones A20.
15. Secuencia para paso a modo
protegido
1. Deshabilitar las interrupciones
a. Habilitar la línea de direcciones A20
2. Cargar el registro GDTR con la dirección base y el tamaño
del GDT configurado con anterioridad.
3. Habilitar el bit 0 (PE) del registro CR0
4. Saltar mediante ljmp o lcall a una instrucción que se
encuentre dentro de un segmento de código válido en modo
protegido.
5. Si es necesario, cargar el registro LDTR con un LDT válido.
6. Si se pretende usar multi-tarea, cargar un registro de tareas
válido en el registro TR.
7. Actualizar los registros de segmento DS, ES, FS, GS y SS
para que contengan un selector válido.
16. Pasos adicionales
Al pasar a modo protegido, no se pueden usar los
servicios de la BIOS.
Se debe configurar una estructura llamada IDT
(Interrupt Descriptor Table), la cual define las
rutinas de manejo de interrupción.
Sólo después de configurar una IDT válida se pueden
habilitar las interrupciones. Si accidentalmente se
habilitan, el procesador se reiniciará
automáticamente en la próxima ejecución de reloj
debido a que no se ha definido una rutina de
manejo de interrupción.
17. Referencias
Manuales de Intel
http://www.intel.com/products/processor/manuals/
Intel® 64 and IA-32 Architectures Software Developer's
ManualSystem Programming Guide, Part 1, Order Number
253668