Вы находитесь на странице: 1из 18

ESO. Tema 2.

Introduccin a la arquitectura i386


Juan Carlos Prez, Sergio Sez e Ismael Ripoll

ESO. Tema 2. Introduccin a la arquitectura i386

Table of Contents
Tema 2. Introduccin a la arquitectura i386....................................................................................................1
2.1 Introduccin histrica........................................................................................................................1
2.2 Entorno bsico de ejecucin..............................................................................................................3
2.2.1 Registros de propsito general.................................................................................................3
2.2.2 El registro EIP y el EFLAGS...................................................................................................4
2.3 Los niveles de privilegio....................................................................................................................5
2.4 Tablas de descriptores........................................................................................................................5
2.5 Manejo de memoria en el modo protegido........................................................................................8
2.5.1 Modelos de memoria................................................................................................................9
2.6 Manejo de interrupciones y excepciones.........................................................................................12
2.6.1 Invocacin de un manejador de interrupcin.........................................................................13
2.7 Invocacin de una funcin...............................................................................................................15

Tema 2. Introduccin a la arquitectura i386


Juan Carlos Prez y Sergio Sez
Sergio Sezssaez@disca.upv.es
Juan Carlos Prezjcperez@disca.upv.es

2.1 Introduccin histrica


Los procesadores Intel comenzarn su andadura en 1978 con el procesador 8086 (aunque previamente
haban aparecido el 4004, el 8080 y el 8085.).
Durante toda su evolucin, desde 1978, Intel ha mantenido la compatibilidad binaria con los
procesadores precedentes de la arquitectura IA32. Esta compatibilidad termina en los procesadores
Itanium e Itanium2, con arquitectura IA64, que son totalmente incompatibles con sus predecesores.
La evolucin de las caractersticas de los procesadores Intel se puede observar en las siguientes tablas:

Tema 2. Introduccin a la arquitectura i386

ESO. Tema 2. Introduccin a la arquitectura i386

El (80)386 fue el primer procesador de 32 bits de Intel. Tanto los operandos como el
direccionamiento en memoria utilizan 32 bits, por lo tanto, el 386 tiene un espacio de
direccionamiento de 4GB.
El 386 tambin es el primero en introducir la paginacin, con un tamao de pgina fijo de 4KB. Los
procesadores anteriores ya posean un esquema de segmentacin, que en el 386 se puede obviar
utilizando un esquema de memoria plano.
El 386 fue el primero de los procesadores segmentados, el 486 introdujo el coprocesador dentro del
propio chip y el Pentium un APIC (controlador de interrupciones programable avanzado).

Tema 2. Introduccin a la arquitectura i386

ESO. Tema 2. Introduccin a la arquitectura i386

2.2 Entorno bsico de ejecucin


Modos de funcionamiento
Modo protegido
Es el modo de funcionamiento normal del procesador, en el que estn disponibles todas sus
caractersticas.
Modo direccionamientoreal
Es un modo de compatibilidad con el 8086, salvo por la capacidad de cambiar a modo protegido. El
procesador siempre comienza su ejecucin en este modo (tras el arranque o un reset).
Modo de mantenimiento
Es un modo en el que se entra por una interrupcin del APIC, til slo para labores de mantenimiento
del sistema operativo (manejo del control de potencia o seguridad).

Caractersticas bsicas
El espacio de direcciones lineal es de 4GB, aunque la memoria fsica puede llegar hasta los 64GB en
algunos modelos.
Un programa normal dispone de 8 registros de propsito general de 32 bits, 6 registros de segmento
de 16 bits, un registro de estado EFLAGS y un puntero de instruccin EIP, ambos de 32 bits. Dichos
registros se pueden acceder desde las operaciones de propsito general, compuestas por las
intrucciones de aritmtica entera, las instrucciones de control de flujo, las de operaciones con bits y
con cadenas de bytes, y las instrucciones de acceso a memoria.
Un conjunto de 8 registros de coma flotante de 80 bits, un conjunto de 8 registros MMX y XMM, de
64 y 128 bits respectivamente, para realizar operaciones SIMD.
Un conjunto de recursos para el manejo de la pila y la invocacin de subrutinas.
El SO dispone adems de puertos E/S, registros de control, de manejo de memoria, de depuracin, de
monitorizacin, etc.

2.2.1 Registros de propsito general


Los registros de propsito general son los siguientes:

2.2 Entorno bsico de ejecucin

ESO. Tema 2. Introduccin a la arquitectura i386


Aunque los registros de propsito general se pueden utilizar cas en cualquier caso, hay que tener
mucho cuidado con el puntero de pila ESP.
Adems estos registros tienen un uso especial en algunas instrucciones.
EAX Registro acumulador. Fuente y destino en algunas operaciones.
EBX Puntero a los datos en el segmento DS.
ECX Contador en las operaciones de cadena y bucles.
EDX Puntero a los puertos de E/S.
ESI Puntero fuente en las operaciones de cadena y puntero a datos en el segmento DS.
EDI Puntero destino en las operaciones de cadena y puntero a datos en el segmento ES.
ESP Puntero de pila.
EBP Puntero a los datos alojados en la pila.

2.2.2 El registro EIP y el EFLAGS


El registro EIP apunta a la siguiente instruccin a ejecutar del segmento de cdigo. Su valor se ve
modificado con la ejecucin de cada instruccin o como resultado de ejecutar una instruccin de
control de flujo (JMP, Jxx, CALL, RET, RET n, IRET). Al registro EIP se le conoce como el puntero
a instruccin o contador de programa.
El registro EFLAGS contiene el estado del procesador en un momento dado, incluyendo los bits de
condicin (S, Z, P, C, ...).

Uno de los bits ms importantes desde el punto de vista del SO es el bit de "interrupciones
habilitadas" (IF). Controla si el procesador debe responder a las peticiones de interrupcin
enmascarables. Activo (1) indica que s se atiende a las interrupciones. No debe modificarse
directamente, sino mediante las intrucciones CLI y STI, que inhabilitan y habilitan las
2.2.2 El registro EIP y el EFLAGS

ESO. Tema 2. Introduccin a la arquitectura i386


instrucciones respectivamente.
Otros elementos importantes son los dos bits del campo IOPL, que indican el nivel de
privilegio necesario para acceder a los puertos de E/S, y el bit TF que indica si el proceso
actual est siendo trazado para depuracin, en cuyo caso las instrucciones se ejecutan paso a
paso (producindose una excepcin tras la ejecucin de cada instruccin).

2.3 Los niveles de privilegio


Los procesadores de la arquitectura IA32 tienen 4 niveles de privilegio (03), siendo el PL 0 el de
mayor nivel de privilegio.

El nivel de privilegio 0 (PL 0) es el que permite mayor acceso a los recursos del procesador. Es el
utilizado por el SO, puesto que en l se pueden ejecutar todas las instrucciones del procesador y en l
se tiene acceso a los puertos de entrada/salida.
El nivel de privilegio 3 (PL 3) es el de acceso ms restringido. Las aplicaciones normalmente se
ejecutan en este nivel, en el que slo se pueden ejecutar las instrucciones de propsito general y no se
tiene acceso a los puertos de E/S. Existen instrucciones que otorgan el acceso a algunos puertos de
E/S y que permiten ejecutar instrucciones tales como STI o CLI. Por supuesto, estas instrucciones no
se pueden ejecutar en el PL 3 sino que las ejecuta el S.O. en PL 0 y su efecto se mantiene al volver al
proceso.
El sistema operativo Linux slo utiliza los niveles 0 y 3, que se denominan modo ncleo y modo
usuario.
El nivel de privilegio actual (CPL) se encuentra en los bits 0 y 1 de los registros CS y SS.

2.4 Tablas de descriptores


Cuando el procesador est en el nivel de privilegio 0 tiene acceso a una serie de registros y estructuras
de datos que permiten controlar el comportamiento del procesador, el manejo de memoria, etc.
La siguiente figura muestra un resumen de todas las estructuras de datos y registros implicados.

2.3 Los niveles de privilegio

ESO. Tema 2. Introduccin a la arquitectura i386

La tabla de descriptores globales (GDT) y la tabla de descriptores locales (LDT) contienen la


informacin (descriptores) referente a los diferentes segmentos existentes en el sistema.

2.3 Los niveles de privilegio

ESO. Tema 2. Introduccin a la arquitectura i386

Los registros de segmento (CS, DS, SS, ES, FS y GS) son indices (selectores) sobre dichas tablas.

La tabla de descriptores de interrupcin (IDT) contiene los vectores de interrupcin, junto con
informacin sobre permisos, inhabilitacin de interrupciones, etc. En los descriptores de interrupcin
hay selectores sobre la tabla GDT o LDT.

2.3 Los niveles de privilegio

ESO. Tema 2. Introduccin a la arquitectura i386

2.5 Manejo de memoria en el modo protegido


La arquitectura IA32 en el modo protegido tiene un esquema de memoria denominado
segmentacin+paginacin.
A las direcciones lgicas (las emitidas por los procesos) se les aplica primero un esquema de
segmentacin con el que se obtiene una direccin lineal.

Posteriormente, a la direccin lineal se le aplica el esquema de paginacin, si est activado, para


obtener la direccin fsica.

Las tablas de descriptores utilizadas en la segmentacin se acceden utilizando los registros GDTR y
LDTR, y se indexan con los registros de segmento o mediante las entradas en la IDT.

2.5 Manejo de memoria en el modo protegido

ESO. Tema 2. Introduccin a la arquitectura i386

Aunque la paginacin s que puede desactivarse en la arquitectura IA32, la segmentacin est


siempre activa.

2.5.1 Modelos de memoria


En el modo protegido existen dos posibles modelos de memoria:
Modelo plano: Todos los segmentos se solopan apuntando a la direccin 0 y con el lmite a
4GB. Es el modelo utilizado por Linux, ya que la segmentacin no puede desactivarse.

2.5.1 Modelos de memoria

ESO. Tema 2. Introduccin a la arquitectura i386

Modelo segmentado: Cada zona de memoria est contenida en un segmento, con unas
caractersticas concretas, y del cual no se puede salir.

Adems la arquitetcura tiene un tipo de segmento especial, el segmento de estado de tarea, dnde se
mantiene la informacin sobre una tarea. La arquitectura IA32 tiene su propio concepto de tarea
implementado en el procesador y no tiene por que coincidir con el modelo utilizado por el SO.

2.5.1 Modelos de memoria

10

ESO. Tema 2. Introduccin a la arquitectura i386

En este segmento se almacenan los registros de segmento, los registros de propsito general,
los registros EIP, EFLAGS y la direccin base del directorio de pginas (CR3), la direccin
de la tabla LDT, los punteros a las pilas de los niveles de privilegio del 0, 1 y 2, etc.

2.5.1 Modelos de memoria

11

ESO. Tema 2. Introduccin a la arquitectura i386

2.6 Manejo de interrupciones y excepciones


La arquitectura IA32 utiliza un tratamiento de las interrupciones vectorizado.
El controlador de interrupcin enva un identificador de la interrupcin producida, y ste se
utiliza como ndice en la tabla de vectores de interrupcin para seleccionar el cdigo del
manejador de interrupcin adecuado.
La tabla de descriptores de interrupcin (IDT) contiene una entrada para cada posible excepcin o
interrupcin que se pueda producir. La direccin base de dicha tabla se encuentra en el registro IDTR.

Cada entrada contiene un descriptor que indica qu zona de cdigo es la que se debe ejecutar cuando
se produzca la interrupcin o excepcin correspondiente.

2.6 Manejo de interrupciones y excepciones

12

ESO. Tema 2. Introduccin a la arquitectura i386

2.6.1 Invocacin de un manejador de interrupcin


La invocacin de un manejador de interrupcin se muestra en la siguiente figura:

2.6.1 Invocacin de un manejador de interrupcin

13

ESO. Tema 2. Introduccin a la arquitectura i386

Cuando se lleva a cabo la invocacin de una interrupcin, el procesador automticamente almacena


en la pila de la tarea actual el valor de algunos registros. De esta forma, el procesador es capaz de
recuperar el estado de la tarea interrumpida una vez termine el manejador de interrupcin (ejecutando
la instruccin IRET).

2.6.1 Invocacin de un manejador de interrupcin

14

ESO. Tema 2. Introduccin a la arquitectura i386

La diferencia entre una invocacin a travs de una trap gate o una interrupt gate es que las rutinas de
tratamiento de interrupcin invocadas a travs de una interrupt gate desactivan automticamente las
interrupciones.

2.7 Invocacin de una funcin


En C normalmente se utiliza la pila para pasar parmetros entre funciones. Antes de realizar la
llamada a una funcin se insertan en la pila todos los parmetros luego se invoca a la funcin y sta
lee los parmetros de la pila.
Cuando se realiza la invocacin de una funcin utilizando las instrucciones CALL y RET, la
estructura tpica de la pila es la que se muestra en la figura:

2.7 Invocacin de una funcin

15

ESO. Tema 2. Introduccin a la arquitectura i386

El orden en el que se insertan los parmetros en la pila es importante. Los ltimos parmetros en
insertarse en la pila son los primeros parmetros en la declaracin de la funcin C.
Como ya veremos, el compilador gcc posee algunas directivas que permiten especificar que una
funcin recibir los parmetros a travs de los registros de propsito general.

2.7 Invocacin de una funcin

16

Вам также может понравиться