Arquitecturas de 16 bits de Intel

Anuncio
Arquitecturas de 16 bits de Intel:
8086, 8088, 80286
Patricia Borensztejn
Organización del Computador 2
Agosto 2016
Arquitecturas de los 70
Una arquitectura difícil de explicar e
imposible de amar (P&H: Computer
Organization and Design)
8086 : arquitectura de 16 bits
• Dos unidades funcionalmente
separadas:
– Unidad de Ejecución (EU)
– Unidad de Intercambio con el Bus
(BIU)
• Aparece (y nunca mas
desaparecerá) la segmentación de
direcciones:
– Una dirección de memoria se
construye con:
• Dirección Base de Segmento
• Desplazamiento respecto a algún
segmento (cuya base esta en un registro
de segmento)
8086: Segmentación
• Hay 20 señales para direccionar memoria, es
decir, se direcciona 220 bytes = ¡1 Megabyte!!
• Fantástico, mas memoria, pero el tema es :
¿como guardamos 20 bits en un camino de datos
de 16 bits?
– Aparece la idea de que los programas vean a toda la
memoria dividida en segmentos de 64K bytes y
direccionen datos e instrucciones relativas al principio
del segmento.
– Intel incorpora a su arquitectura los registros de
segmento. Son: CS, DS, ES, SS. Es el software el
encargado de darles un valor inicial.
8086: Segmentación
• Hay 20 señales para direccionar memoria, es
decir, se direcciona 220 bytes = ¡1 Megabyte!!
• Fantástico, mas memoria, pero el tema es :
¿como guardamos 20 bits en un camino de datos
de 16 bits?
– Aparece la idea de que los programas vean a toda la
memoria dividida en segmentos de 64K bytes y
direccionen datos e instrucciones relativas al principio
del segmento.
– Intel incorpora a su arquitectura los registros de
segmento. Son: CS, DS, ES, SS. Es el software el
encargado de darles un valor inicial.
8086: Segmentación
• Los segmentos tienen
longitud variable pero
su tamaño máximo es
64K bytes
• Los segmentos pueden
solaparse entre si
• Los segmentos deben
comenzar en
direcciones múltiplos
de 16
• En todo momento, el
programa puede tener
acceso simultáneo a 4
segmentos.
• Si no se especifica otra
cosa , hay un registro
de segmento por
defecto para
instrucciones (CS),
datos (DS) y pila (SS)
8086: Segmentación
• Entonces tenemos dos
tipos de direcciones:
– Direcciones físicas: 20
bits
– Direcciones lógicas:
Base de Segmento +
Offset dentro del
segmento
• La función de la Unidad
de Intercambio con el Bus
es la de :
– Convertir una dirección
lógica a física.
– Llevar a cabo las
transacciones con el
exterior.
8086: Cálculo del offset
• En el caso de las instrucciones, el offset está contenido en el registro PC.
(que está en la BIU). Su registro de segmento es CS.
• En el caso de la Pila, el SP apunta al tope de la pila y se usa como offset en
las instrucciones PUSH y POP.
• En el caso de los operandos : lo calcula la UE según el modo de
direccionamiento especificado en la instrucción. Intel llama dirección
efectiva (efective address) , al resultado de este cálculo.
• Caso particular, las instrucciones de strings obtienen su dirección efectiva
de los registros SI y DI (fuente, destino)
8086: Modos de Direccionamiento
8086: Modos de Direccionamiento
• Cosas:
– No todos los
registros pueden
utilizarse para
direccionar (AX, CX,
DX, no pueden ser
usados
– Los clks pueden ser
de 200nseg (5Mhz)
o 125nseg(8Mhz) o
100nseg (10Mhz)
Modos de Direccionamiento
• Directo: la dirección efectiva está en la instrucción
• Registro Indirecto: la dirección efectiva está en el registro.
Los registros pueden ser BX, BP, SI o DI
• Modo Base: La dirección efectiva se calcula sumando un
registro base (BX o BP) mas un desplazamiento. Si el
registro base es BP, el registro de segmento por defecto era
SS
• Modo Indexado: La dirección efectiva se calcula sumando
un registro índice (SI o DI) mas un desplazamiento.
• Modo Base Indexado: La dirección efectiva se obtiene
sumando un registro Base, un registro Índice y un
desplazamiento . Otra vez, si aparecía BP en la base, el
registro de segmento era SS.
• Nota: un chino era….uno cometía muchísimos errores! No
te alcanzaban nunca los registros! ¡Mi reino por un
registro!
Instrucciones y Formatos
• Hay alrededor de 100 instrucciones a nivel lenguaje
ensamblador. Y 300 a nivel lenguaje máquina. A veces,
según el ensamblador utilizado, una instrucción
lenguaje ensamblador puede generar dos traducciones
diferentes lenguaje máquina. Asombroso. Por ejemplo,
la instrucciones que utilizan al acumulador como
registro. Pueden codificarse de dos formas diferentes.
Obvio, eso no nos importa demasiado…
• Formatos: La longitud de la instrucción es variable y
conforme fue incrementándose el juego de
instrucciones, bits aislados empezaron a usarse para
codificar en forma conjunta… una mezcla. Lo que dicen
P&H, imposible de explicar.
La Memoria
• Una cosa que no debe pasar inadvertida de la
arquitectura 8086 (8088) es la cola de
instrucciones que hay en el BIU.
• Ya , en esa época, los diseñadores se dieron
cuenta que había que ganar tiempo accediendo a
memoria mientras el procesador estaba ocupado
haciendo otras cosas internamente.
• Asi fué que el 8086 usó una muy primitiva
segmentación en la ejecución de instrucciones .
Veamos.
8086
Fetch
Cola
Decodificación
Ejecución
• Fetch: Mueve 2 bytes de la cache a
la cola de prefetch (6 bytes)
• D: Determina la longitud de la
instrucción, decodifica prefijos y
códigos de operación. Solapa con
el último ciclo de la etapa de
ejecución.
• Ex: Computa direcciones de
operandos.Acceso a Memoria.
Lectura de Registros. Ejecución.
Actualización de los registros con
datos de la ALU o de memoria.
4.77Mhz PC
• Un acceso a memoria (ciclo de bus) comprendía 4 ciclos de
procesador.
– T1: el procesador presenta las señales de direcciones y control
– T2: cambian las señales de sentido de manera de transportar
datos
– T3 y T4: comienza la transferencia de datos que debe durar como
máximo dos ciclos.
• El ciclo del procesador es de 200 nseg por lo tanto se requieren
memorias de 400 nseg.
• La BIU llena la cola cuando hay dos (o mas) bytes libres en ella.
• El funcionamiento de la UE y la BIU es asíncrono.
• Las instrucciones necesitan para ejecutarse un número variable de
ciclos, por ejemplo:
– ADD , 4 ciclos
– MUL, 70 ciclos
8086: algo mas exacto
EU pide un
byte de
código
BIU trae 2
bytes y se los
da a la EU.
Queda la
cola vacía
EU calcula la dirección
en 7 ciclos y luego
pide el acceso al dato
BIU trae 4 bytes en 2
ciclos de bus y los
almacena en la cola
EU usa 9 ciclos para ejecutar la
operación aritmética
BIU trae el
dato pedido
por la EU
BIU trae 2
bytes de
código. La
cola se
llena
BIU está
ociosa
EU pide un
byte de
código.
BIU está
ociosa
La UE no espera por instrucciones, el 8086 ha eliminado (casi) el tiempo de fetch
de instrucción.
8088
• Es casi idéntico al 8086. Solo tiene dos
diferencias:
– La cola de instrucciones tiene una longitud de 4
bytes, 6 en el 8086
– El bus de datos es de 8 bits en el 8088, esto lo
hace mas fácil de integrar , y a menor costo,
dentro de un sistema. Por eso IBM prefirió al
8088
8088: el cerebro del IBM PC
• "In the mid-1970s, someone came to me with an idea
for what was basically the PC. The idea was that we
could outfit an 8080 processor with a keyboard and a
monitor and sell it in the home market. I asked, ‘What’s
it good for?’ And the only answer was that a housewife
could keep her recipes on it. I personally didn’t see
anything useful in it, so we never gave it another
thought." Gordon Moore.
• Entonces ….. ¡Lo hizo IBM!
• Citado en: The History of Intel, 30 years of Innovation
http://www.landley.net/history/mirror/intel/cn71898a.ht
m
8088: el cerebro de la IBM PC
• Without knowing the details of the
product, Intel sales engineers had to win
IBM’s confidence, since "Big Blue" had
never used an outside vendor for a key
microprocessor before. As the Intel sales
engineer who serviced the IBM account
recalled, "Everything was very secretive.
When we went in to provide technical
support, they’d have our technical
people on one side of a black curtain and
theirs on the other side, with their
prototype product. We’d ask questions,
they’d tell us what was happening and
we’d have to try to solve the problem
literally in the dark. If we were lucky,
they’d let us reach a hand through the
curtain and grope around a bit to try to
figure out what the problem was.“
Una última observación
• Al 8086 lo diseñó un ingeniero de software llamado Stephen
Morse
• "For the first time, we were going to look at processor features
from a software perspective," says Morse. "The question was
not 'What features do we have space for?' but 'What features
do we want in order to make the software more efficient?'"
That software-centric approach proved revolutionary in the
industry.
• Morse se fué de Intel , y luego Intel desarrolló el 8088, que
según Morse era “una versión mutilada del 8086”
• IBM elige a la versión mutilada para su IBM PC.
• Any assembly-language program written as far back as 1978 for
the Intel 8086 microprocessor will run, unmodified, on Intel's
latest Core 2 Extreme CPU--just 180,000 times faster.
• Fuente:
http://www.pcworld.com/article/146957/components/article.h
tml
Nos movemos de década: los 80
El 80286
80286
• Primer procesador que puede correr cualquier software
escrito para su predecesor. Empieza la compatibilidad.
• Introduce soporte por hardware para Memoria Virtual.
• Aumenta el espacio físico direccionable a 224 bytes, o sea
16 Megabytes
• Dos modos de funcionamiento:
– Modo real : los programas utilizan direcciones físicas de 20 bits,
tal cual explicamos en el 8086
– Modo protegido: los programas utilizan direcciones virtuales
que les permiten direccionar 1 Gigabyte. La traducción a
direcciones físicas la realiza la unidad de segmentación
generando una dirección física de 24 bits que da acceso a los 16
Megabytes
• Se agregan instrucciones y registros para trabajar en modo
protegido
80286: Modo Protegido
• Se llamó Modo Protegido pues no solo se trataba de soporte
para memoria virtual, sino también para multitarea, para que
los SO pudieran implementarla. Había que poder proteger a
las tareas de diferentes usuarios entre ellas, y también entre
los usuarios y el sistema operativo.
• La implementación de protección entre tareas es sofisticada
y permite a los SO soportar hasta 4 niveles de privilegio.
• Obviamente, esto lo estudiarán y lo practicarán en la
materia, mas adelante.
• Antes del 286 y su modo protegido, MS DOS era un sistema
operativo que nos permitía hacer de todo. En esa época, en
la materia orga 2 se desarrollaban todo tipo de programas
residentes, asi se llamaban. Se programaba el driver de la
impresora, del teclado, nos colgábamos de las
interrupciones, ¡se programaban virus! En fin, de todo.
Arquitecturas de 32 bits de Intel:
80386, i486, Pentium y sus
sucesoras de 32 bits
Arquitectura de 32 bits: Intel386
intel386
• Everbody hated the 64K byte segments, they limited the size of the data
structures and that was perceived to be and was actually a limitation in
certain applications. Programmers in particular and compiler writers and
others just saw that as a huge limitation.
• El 286 no fué un éxito, Bill Gates lo llamaba el “cerebro muerto” y IBM
decía que nada podía continuar de allí, que el 286 era el fin de la
arquitectura. El proyecto 386 parecía que se moría pero… resucitó…
• El equipo siguió adelante con la idea de resolver algunas cosas que no
gustaban del 286:
– Crear un espacio lineal de direcciones de 32 bits
– Aumentar el número de registros, pero eso no se hizo
– Hacer un conjunto completo de instrucciones de 32 bits
• Lo que también buscaban era competir con el 68000 de Motorola que se
veía como la máquina UNIX por excelencia. Nosotros queríamos darle al
386 atributos para que pueda correr unix bien. Teníamos que convertirla
en una máquina plana de 32 bits.
• La cuestión era como hacer compatible la segmentación del 8086 y del
286 con con un espacio plano de 32 bits no segmentado…
Intel 386
• Registros:
• Se extienden a 32 bits y se
eliminan las restricciones para
su uso. Ahora todos pueden
utilizarse como registros índice o
base. Se agrega un factor de
escala a los modos de
direccionamiento.
• Pueden ser de 8, 16 o 32. Hay
prefijos que modifican a la
instrucción y también directivas
que aplican a todo el código.
(use 16, use 32)
• Direcciones:
•
Los offset también pueden ser
de 16 o 32 bits.
386: Segmentación y Paginación
• Espacio Lineal de 232 bits:
– Los segmentos aumentan su longitud a 4 Gigabyes, es decir, a toda la memoria
física direccionable. (32 bits de direcciones)
– Unidad de Segmentación: Una dirección segmentada, selector + offset, se
traduce a una dirección lineal de 32 bits
– Unidad de Paginación: soporte de paginación generando la traducción entre
dirección lineal y dirección física.
•
La memoria se puede direccionar de dos maneras: modelo segmentado y
modelo chato (flat)
386: Modos de Funcionamiento
•
Modos de
funcionamiento:
–
–
–
Modo real: el
del 8088. Toda la
máquina te
pertenece.
Modo protegido
Modo virtual : es
como el real
pero dentro de
modo protegido,
es decir permite
diversas tareas
modo real
ejecutándose en
un entorno de
multitarea y
protegido.
i486
• 4ª generación de compatibles binarios
• Tres grandes innovaciones:
1. Segmentado para poder ejecutar una instrucción
por ciclo
2. On Chip Caché
3. Incorpora la Unidad de Coma Flotante
i486: Block Diagram
Pipeline en el i486
• El objetivo es ejecutar una instrucción por ciclo.
• La tecnología de memorias hace necesaria la
incorporación de la caché de nivel 1 dentro del chip.
Ejemplo: i486
Fetch
D1
D2
Ex
WB
• Fetch: Mueve 16 bytes de la cache a la cola de prefetch (5
instrucciones)
• D1: Determina la longitud de la instrucción, decodifica
prefijos y códigos de operación
• D2: Computa direcciones de operandos.
• Ex: Acceso a Caché. Lectura de Registros. Ejecución
• WB: Actualización de los registros con datos de la ALU o
de memoria. Incluye cortocircuito ALU-ALU.
i486: Retardo cero para cargas
cortocircuito
Fetch
D1
D2
Fetch
D1
Fetch
Ex
MOV Reg1, Mem1
WB
D2
D1
Ex
D2
ADD Reg1, Reg2
WB
Ex
WB
MOV Mem2, Reg1
i486: Retardo 1 para carga de
punteros
Fetch
D1
D2
Ex
Fetch
D1
D2
MOV Reg1, Mem1
WB
Ex
ADD Reg1, [Reg1]
WB
Cortocircuito
Fetch
D1
D2
Fetch
D1
Ex
MOV Reg1, Mem1
WB
D2
Ex
WB
ADD Reg1, [Reg1]
I486: Pipeline
• The i486 CPU: Executing Instructions in One Clock
Cycle. John Crawford, Intel Corporation. IEEE
Micro, February 1990
• Asi como en el caso de i386, la lucha fue contra
Motorola, que tenía excelentes procesadores de
32 bits, (68000 y 68020), en este caso estaban
peleando con los diseños RISC que se basaban en
el pipeline para optimizar rendimiento.
• El diseño del 486 demandó un enorme esfuerzo
donde estuvieron involucrados muchos grupos de
personas de toda la Corporación Intel..
Unidad de Coma Flotante
• Hasta ahora, para trabajar con números reales
había que integrar un chip al sistema:
– 8087, 80287, 80378 eran coprocesadores, con los
cuales el procesador se comunicaba usando el
bus, como con cualquier otro dispositivo de ES.
– El i486 integra esa unidad como unidad funcional
dentro del propio chip.
– La Unidad de Coma Flotante es bastante particular
y tiene un entorno de ejecución propio.
X87 FPU: Formatos de Datos
X87: Entorno de Ejecución
Arquitectura de Pila
• En la mayoría de las operaciones los operandos son
implícitos: el tope de la pila , por ej.
• Todas las operaciones operan en la precisión extendida, de
hecho, se almacenan los datos en la pila de registros en
precisión extendida. Si es necesario se realiza la conversión
pertinente.
Nos movemos de década: los 90
Intel Pentium
• 5ª generación compatible: P5
• Lo mas importante es que se vuelve superescalar, o sea, es
capaz de ejecutar hasta dos instrucciones por ciclo. Con
muchas restricciones, claro. Por algún motivo, decidieron
ahorrar área y no había una replicación completa de recursos,
por lo cual algunas instrucciones solo podían ejecutarse en una
de las dos vías (u y v)
• En 1995, el R10000 de MIPS (Machine without Interlocks
Stage) (Hennessey, Stanford, 1981 crea MIPS) era superescalar
de 4 vías ya. Incomparable arquitetura. Los Rxxx fueron el
cerebro de Silicon Graphics ( Jurasic Park, 1993) Además, eran
UNIX… MIPS llevaba 15 años de desarrollo cuando sale el
R10000. El R10000 tiene todo. Lo que poco a poco Intel fue, a
lo largo de los años, incorporando a sus microarquitecturas.
• Curiosidad: bug en la unidad de CF con la instrucción FDIV
(errata 23 floating point bug)
Arquitectura Pentium
Intel Pentium
• Para lograr el mejor rendimiento, había que escribir
código apareable.
• Intel clasifica las instruciones en 4 categorías:
–
–
–
–
NP : No apareables
UV: apareables en cualquier pipe
PU: solo apareables en U
PV : solo apareables en V
• El apareamiento no es posible cuando:
– Las siguientes dos instrucciones son NP
– Las siguientes dos instrucciones tienen algún tipo de
contención entre registros (implícita o explícita). (Hay
excepciones)
– Las instrucciones no están en la caché.
Clasificación de Instrucciones
• NP (No Apareables)
– Shift/Rotate con CL
– Operaciones largas: MUL, DIV
– Operaciones extendidas : CMOV, PUSHA, etc
– Instrucciones inter-segmento: CALL FAR, Jcc offset
32, PUSH sreg
Clasificación de Instrucciones
• UV (Pueden ejecutar en cualquier pipe)
– La mayoría de las operaciones de 8 y 32 bits:
•
•
•
•
•
•
•
•
•
•
•
MOV reg, reg/mem/inm
MOV reg/mem, reg
Aritméticas y de
ALU reg, reg/mem/inm
transferencia
ALU reg/mem, reg
INC/DEC reg/mem
LEA reg, mem
PUSH reg/inm
Operaciones de pila usando registros
POP reg
NOP
CMP reg, reg/mem/inm
Todas las comparaciones
TEST reg, reg/mem/inm
Clasificación de Instrucciones
• PU (Sólo pueden ejecutar en el pipe u)
– Instrucciones que suman/restan el carry
• ADC/SBB reg, reg/mem/inm
• ADC/SBB reg/mem, reg
– Instrucciones con prefijos
– Shifts con valores inmediatos
• SHIFT/ROT inm/1
• PV (Pueden ejecutar en cualquier pipe, pero sólo
aparean cuando están en el V)
– Instrucciones simples de control
• CALL/JMP near
• Jcc short
• OF Jcc near
Pentium con MMX
• Introducción de instrucciones MMX (modelo
SIMD ) las instrucciones pueden operar en
paralelo sobre varios datos a la vez.
• Curiosidad: para no gastar mas área, y
considerando que quien programara con enteros
en MMX no intercalaría en el mismo trozo de
código instrucciones de CF, entonces decidieron
implementar los registros de MMX sobre la pila
de CF, total, cabían !!(64 MMX, 80 CF)
P6: Pentium Pro y sucesoras
• 6ª Generación de Compatibles IA-32.
• El cambio mas importante se da a nivel de
microarquitectura, agregando técnicas superescalares ,
y , sobretodo, rompiendo las instrucciones de la
arquitectura en microinstrucciones tipo RISC
internamente: el modelo de ejecución y la arquitectura
que el programador usa NO ES MAS lo que sucede en el
chip realmente.
• Se continúa extendiendo el conjunto de instrucciones
SIMD. Aparece SSE, esta vez ocupando un área
idependiente.
P6: Pentium Pro y sucesoras
• Este cuadro es increible! P&H: Computer
Organization and Design
Procesadores de 64 bits
Arquitecturas de 64 bits
• La primera implementación fue en ¿2004?
IA-64: cambiamos de década
• Pongo los últimos del manual…. Hay mucho en el
medio!
IA-64: Itanium
• Se introduce en 2001. Era una arquitectura de 64 bits.
• Una arquitectura completamente nueva, NO
COMPATIBLE, pensada para el mercado de servidores y
computación de altas prestaciones.
• Basada en la arquitectura VLIW, que Intel la hizo suya
con otro nombre: EPIC
• EPIC quiere decir Explicit Parallelism Instruction
Computer.
• Es un mundo aparte… ¡Ni RISC, NI CISC, VLIW!
• No fue exitosa, pero Intel apostó por ella al principio..
AMD 64
• Mientras tanto, AMD mejora la arquitectura x86
extendiendo no solo el tamaño de memoria
direccionable (de eso se trata, de acceder mas y
mas memoria) sino también el tamaño de sus
registros.
• También resuelve un problema que venía de muy
lejos, y aumenta el número de registros a 16
(también los registros SSE)
• Enfin, Intel no tiene mas remedio que adoptar la
extension AMD-64 y la llama EM64T : Extended
Memory 64 Technology
Entornos o modos de funcionamiento
• IA-32:
– Modo Protegido, que incluye la habilidad de ejecutar
tareas en Modo 8086- Virtual
– Modo Real (8086) con la posibilidad de pasar a modo
protegido. Así arranca el procesador despues de un reset
– Modo Gestión Sistema: para tareas de mantenimiento
(seguridad, etc)
• IA-64: agrega modo IA-32e que tiene dos submodos
– Modo Compatible : permite ejecutar aplicaciones de 16
bits y de 32 bits sin compilar dentro de un SO de 64 bits
– Modo 64-bit : permite ejecutar aplicaciones escritas para
el espacio lineal de 64 bits.
Modo de
Ejecución
64 bits
Registros de Propósito General
•
•
IA-32
IA-64
– REX es el
prefijo que
permite
usar los
nuevos
registros y
extender los
viejos a 64
Esta es la diapositiva 64
FIN
Descargar