Breve introducción a la
arquitectura de 32 bits intel
Modos de Operación

Modo Protegido (Protected)


Modo Virtual x86


Modo real dentro de un contexto protegido y multitarea
Modo Real (Real-address)



Todas las características del procesador son aprovechadas.
Modo 8086 con extensiones.
(El arranque del procesador siempre se inicia en este modo)
Modo Gestion de sistema (management system)


Permite implementar funciones específicas dependientes de
la plataforma (gestión de la alimentación, seguridad)
Se entra a este modo con la interrupción SMI#
Entorno básico de ejecución









Espacio de direcciones lineal 4GB (232)
Espacio de direcciones físico 64GB (236)
Puertos I/O
8 registros de propósito general
6 registros de segmento
EFLAGS, EIP
X87 FPU unidad de punto flotante
MMX ejecución de instrucciones SIMD enteras
XMM ejecución de insturcciones SIMD p.flot
Recursos del sistema para la
gestión de la ejecución

Registros de control: CR*[0..4]


Registros de control de acceso a memoria


GDTR, IDTR, LDTR
Registros de depuración


Permiten monitorizar operaciones de depuración de procesos
Registros para asignar características a regiones de
memoria


Determinan el modo operativo del procesador y las características
de la tarea actual
MTRR’s (memory type range regs)
Etc.
Organización de la memoria

Modelo Plano de memoria (+ paginado opcional)


Modelo Segmentado de memoria ( + paginado
opcional)



Un simple espacio de direcciones contiguas (0..232-1).
Contiene datos, código y stack. Dirección lineal.
El espacio de direcciones es dividido en secciones
llamadas segmentos. Dirección lógica
(Segmento+Offset). Un Selector de Segmento
identica el segmento al que se quiere acceder.
Es posible manejar 16383 segmentos de hasta 232
bytes cada uno
Modelo Real-address de memoria
Registros de propósito general
Registros de proposito general








EAX- Acumulador para operandos y resultados
EBX-Puntero a datos en segmento DS
ECX-Contador para strings y bucles
EDX-Puntero para operaciones I/O
ESI-Puntero para datos en DS y fuente en
operaciones de cadena
EDI-Puntero para datos en ES y destino en
operaciones de cadena
ESP-Puntero de pila
EBP-Puntero para datos en la pila
Registros de segmento

Más propiamente contienen selectores de
segmento.

El selector apunta a una estructura en
memoria que se denomina Descriptor de
Segmento

El descriptor de segmento contiene entre otras
cosas la dirección lineal del segmento.
Registros selectores de segmento
Registro de Flags
Algunos flags

IOPL


Indica el nivel de privilegio que debe tener una
tarea para poder ejecutar instrucciones de entrada
salida
VM

Se activa para entrar en modo virtual x86
Modos de direccionamiento
Modo Protegido.
Niveles de protección

Se basan en niveles de privilegio:


Los mecanismos operan:



0..3. 0 mayor privilegio, 3 menor privilegio
A nivel de segmento
A nivel de página
Cada referencia a memoria es chequeada para verificar
que satisface una serie de requerimientos.






Comprobación de límites
Comprobación de tipo de datos
Chequeo de niveles de privilegio
Restriccion de dominios accesibles
Restricción de puntos de entrada a procedimientos
Restricción del conjunto de instrucciones ejecutable según nivel de
privilegio
Niveles de privilegio
Chequeo de privilegios
CPL: Current Privilege Level Nivel de privilegio de la tarea que se
ejecuta en un determinado momento.
DPL: Descriptor Privilege Level Indica habitualmente el mínimo nivel
de privilegio que debe tener una tarea para acceder a un segmento.
RPL: Request Privilege Level Indica el nivel de privilegio del selector
con el cual se accede a un segmento. Puede sobreescribir a CPL
según el caso.
Chequeo de privilegio para acceso
a segmento de datos
-El menor privilegio entre CPL y RPL es el que domina
-Procesos o descriptores con mayor privilegio acceden a segmentos
con menor requerimiento de privilegios
Chequeo de privilegios para
accesos segmentos de código
Conforming-NonConforming

Conforming- non conforming es una
característica de los segmentos de código




Relacionada con la capacidad de ese segmento para ser
invocado desde otros niveles.
El acceso a un segmento nonconforming solo (?)
es permitido a un código con su mismo nivel de
privilegio (CPL==DPL)
El acceso a un segmento conforming está
permitido a todo proceso con menor o igual
nivel de privilegio
En ningún caso implica un cambio del nivel de
privilegio del proceso invocante.
Puertas

Las puertas facilitan la transferencia del
control de ejecución entre niveles de
privilegio.


La capacidad de un proceso con determinado
nivel de privilegio de invocar a una tarea
ejecutándose en un nivel más (¿o menos?)
privilegiado.
Se invocan mediante un call o jump, pero
en lugar de aportar un selector de
segmento aportan un descriptor de
puerta.
Descriptor de Puerta
1. Especifica el segmento de código a ser accedido
2. Define un punto de entrada a un procedimiento
3. Especifica el nivel de privilegio que requiere el proceso
invocante
4. Define el número de parámetros requerido
Selectores, Descriptores y Tablas
de descriptores.



Un selector, que se carga en un registro
de segmento, es un apuntador a una
Tabla de Descriptores
Una Tabla de Descriptores es una lista de
posibles descriptores de segmento que
puede utilizar la tarea que se ejecuta
actualmente.
El Descriptor es una estructura de datos
que describe un segmento
Selector
Selector.


Para confeccionar una dirección lineal hace
falta acceder al descriptor de segmento y
obtener los datos de chequeo, dirección
base y límite.
La parte oculta del registro de segmento
se cargan tras el primer acceso y quedan
almacenadas para los sucesivos
Descriptor de segmento
Tablas de descriptores
La Tabla Local
(LDT) es propia del
proceso actual,
mientras que la
Tabla Global es
compartida por
todos los procesos
del sistema.
Vector de interrupciones o IDT
(Tabla de descriptores de
interrupción)
Las rutinas de atención a las interrupciones se ejecutan en niveles
altos de protección, por lo que se requieren puertas en vez de simples
descriptores de segmento.
Vector de
interrupciones
Gestion de Tareas. TSS
El procesador proporciona mecanismos para gestionar las
tareas: lanzar su ejecución, suspenderla conservando el
estado, conmutar a otra tarea. Para ello mantiene una
estructura de datos conveniente, TSS
Descriptor de la tarea

Los datos que permiten conservar el estado de una tarea
son:







El espacio de ejecución actual de la tarea definido por sus
registros de segmento
El estado de los registros de propósito general, los flags y el
puntero de instrucción.
El estado de registros de control como CR3 (paginado) y TR
El estado del registro apuntador a la tabla de descriptores
locales LDTR
El mapa de I/O accesible.
El estado de los puntero a los stacks en cada nivel de privilegio
Un apuntador a la tarea previamente ejecutada
El descriptor de todas las tareas que se están ejecutando actualmente en el
sistema está almacenado en la tabla de descriptores Global.
Acceso a I/O

Las instrucciones de in/out no son
privilegiadas, sin embargo el acceso al
espacio de entrada salida está regulado.

Flag IOPL


Establece el nivel de privilegio mínimo para
ejecutar instrucciones I/O
Mapa de permisos I/O en el TSS

Salvaría la prohibición de IOPL solo para aquellas
direcciones permitidas
Mapa de permisos I/O
fin

Bibliografía


IA-32 Developers Manual
Arquitectura IA-32
Descargar

Breve introducción a la arquitectura de 32 bits