Sei sulla pagina 1di 46

Ensamblador

De Wikipedia, la enciclopedia libre

Saltar a navegación, búsqueda

El término ensamblador (del inglés assembler) se refiere a un tipo de programa


informático que se encarga de traducir un fichero fuente escrito en un lenguaje
ensamblador, a un fichero objeto que contiene código máquina, ejecutable directamente
por la máquina para la que se ha generado. El propósito para el que se crearon este tipo
de aplicaciones es la de facilitar la escritura de programas, ya que escribir directamente
en código binario, que es el único código entendible por la computadora, es en la
práctica imposible. La evolución de los lenguajes de programación a partir del lenguaje
ensamblador originó también la evolución de este programa ensamblador hacia lo que
se conoce como programa compilador.

Contenido
[ocultar]

• 1 Funcionamiento
• 2 Tipos de ensambladores
• 3 Véase también

• 4 Enlaces externos

Funcionamiento [editar]
El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de los
códigos nemotécnicos que aparecen por su código de operación correspondiente en
sistema binario para la plataforma que se eligió como destino en las opciones
específicas del ensamblador.

Tipos de ensambladores [editar]


Artículo principal: Ensamblador de alto nivel

Podemos distinguir entre tres tipos de ensambladores:

• Ensambladores básicos. Son de muy bajo nivel, y su tarea consiste básicamente


en ofrecer nombres simbólicos a las distintas instrucciones, parámetros y cosas
tales como los modos de direccionamiento. Además, reconoce una serie de
directivas (o meta instrucciones) que indican ciertos parámetros de
funcionamiento del ensamblador.

• Ensambladores modulares, o macro ensambladores. Descendientes de los


ensambladores básicos, fueron muy populares en las décadas de los 50 y los 60,
antes de la generalización de los lenguajes de alto nivel. Hacen todo lo que
puede hacer un ensamblador, y además proporcionan una serie de directivas para
definir e invocar macroinstrucciones (o simplemente, macros). Véase X86.

• Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que


aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits,
muchos de ellos teniendo compatibilidad hacia atrás pudiendo trabajar con
programas con estructuras de 16 bits. Además de realizar la misma tarea que los
anteriores, permitiendo también el uso de macros, permiten utilizar estructuras
de programación más complejas propias de los lenguajes de alto nivel.

Véase también [editar]

Lenguaje ensamblador
De Wikipedia, la enciclopedia libre

Saltar a navegación, búsqueda

Lenguaje de máquina del Intel 8088. El código de máquina se resalta en rojo, el


equivalente en lenguaje assembler en magenta, y las direcciones de memoria donde se
encuentra el código, en azul.

El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir


programas informáticos, y constituye la representación más directa del código máquina
específico para cada arquitectura de computadoras legible por un programador.

Fue usado principalmente en los inicios del desarrollo de software, cuando aun no se
contaba con los potentes lenguajes de alto nivel. Actualmente se utiliza con frecuencia
en ambientes académicos y de investigación, especialmente cuando se requiere la
manipulación directa de hardware, se pretenden altos rendimientos o un uso de recursos
controlado y reducido.

Muchos dispositivos programables (como los microcontroladores) aun cuentan con el


ensamblador como la única manera de ser manipulados.

Contenido
[ocultar]

• 1 Características
• 2 Ensambladores
• 3 Lenguaje
• 4 Código máquina
• 5 Ejemplos de lenguaje ensamblador
o 5.1 Ejemplo 1
o 5.2 Ejemplo 2
o 5.3 Ejemplo 3
o 5.4 Ejemplo 4
• 6 Referencias
• 7 Bibliografía
• 8 Véase también

• 9 Enlaces externos

[editar] Características
• El código escrito en lenguaje ensamblador posee una cierta dificultad de ser
entendido directamente por un ser humano ya que su estructura se acerca mas
bien al lenguaje máquina, es decir, lenguaje de bajo nivel.
• El lenguaje ensamblador es difícilmente portable, es decir, un código escrito
para un microprocesador en particular necesita ser modificado muchas veces en
su totalidad para poder ser usado en otro microprocesador.
• Los programas hechos en lenguaje ensamblador son generalmente más rápidos y
consumen menos recursos del sistema (memoria RAM y ROM). Al programar
cuidadosamente en lenguaje ensamblador se pueden crear programas que se
ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto
nivel.
• Con el lenguaje ensamblador se tiene un control muy preciso de las tareas
realizadas por un microprocesador por lo que se pueden crear segmentos de
código difíciles de programar en un lenguaje de alto nivel.

[editar] Ensambladores
Un ensamblador (assembler en inglés) es un programa que crea código objeto
traduciendo instrucciones nemónicas de un programa fuente escrito en ensamblador a
códigos ejecutables e interpretando los nombres simbólicos para direcciones de
memoria y otras entidades (ensamblado). El uso de referencias simbólicas es una
característica básica del lenguaje ensamblador, evitando tediosos cálculos y
direccionamiento manual después de cada modificación del programa. La mayoría de
los ensambladores también incluyen facilidades para crear macros, a fin de generar
series de instrucciones cortas que se ejecutan en tiempo real, en lugar de utilizar
subrutinas.1

Los ensambladores son por lo general más fáciles de programar que los compiladores de
lenguajes de alto nivel, y han estado disponibles desde la década de 1950. Los
ensambladores modernos, especialmente para arquitecturas basadas en RISC, como por
ejemplo MIPS, SPARC y PA-RISC optimizan las instrucciones para explotar al
máximo la eficiencia de segmentación2 de la CPU.

Los ensambladores avanzados ofrecen posibilidades de abstracción que incluyen:


• Control avanzado de estructuras.
• Procedimientos de alto nivel, declaración de funciones.
• Tipos de datos que incluyen estructuras, registros, uniones, clases y conjuntos.
• Sofisticado procesamiento de macros.

[editar] Lenguaje
Un programa escrito en lenguaje ensamblador consiste en una serie de instrucciones que
corresponden al flujo de órdenes ejecutables que pueden ser cargadas en la memoria de
un sistema basado en microprocesador.

Por ejemplo, un procesador x86 puede ejecutar la siguiente instrucción binaria como se
expresa en código de máquina:

• Binario: 10110000 01100001 (Hexadecimal: 0xb061)

La representación equivalente en lenguaje ensamblador es más fácil de recordar:

• MOV al, 061h

Esta instrucción significa:

• Asigna el valor hexadecimal 61 (97 decimal) al registro "al".

El mnemónico "mov" es un código de operación u "opcode", elegido por los


diseñadores de la colección de instrucciones para abreviar "move" (mover, pero en el
sentido de copiar valores de un sitio a otro). El opcode es seguido por una lista de
argumentos o parámetros, completando una instrucción de ensamblador típica.

La transformación del lenguaje ensamblador en código máquina la realiza un programa


Ensamblador, y la traducción inversa la puede efectuar un desensamblador. A diferencia
de los lenguajes de alto nivel, aquí hay usualmente una correspondencia 1 a 1 entre las
instrucciones simples del ensamblador y el lenguaje de máquina. Sin embargo, en
algunos casos, un ensamblador puede proveer "pseudo instrucciones" que se expanden
en un código de máquina más extenso a fin de proveer la funcionalidad necesaria. Por
ejemplo, para un código máquina condicional como "si X mayor o igual que" , un
ensamblador puede utilizar una pseudoinstrucción al grupo "haga si menor que" , y "si =
0" sobre el resultado de la condición anterior. Los Ensambladores más completos
también proveen un rico lenguaje de macros que se utiliza para generar código más
complejo y secuencias de datos.

El uso del ensamblador no resuelve definitivamente el problema de cómo programar un


sistema basado en microprocesador de modo sencillo ya que para hacer un uso eficiente
del mismo, hay que conocer a fondo el microprocesador, los registros de trabajo de que
dispone, la estructura de la memoria, y muchas cosas más referentes a su estructura
básica de funcionamiento.

Cada arquitectura de microprocesadores tiene su propio lenguaje de máquina, y en


consecuencia su propio lenguaje ensamblador ya que este se encuentra muy ligado al la
estructura del hardware para el cual se programa. Los microprocesadores difieren en el
tipo y número de operaciones que soportan; también pueden tener diferente cantidad de
registros, y distinta representación de los tipos de datos en memoria. Aunque la mayoría
de los microprocesadores son capaces de cumplir esencialmente las mismas funciones,
la forma en que lo hacen difiere y los respectivos lenguajes ensamblador reflejan tal
diferencia.

Pueden existir múltiples conjuntos de mnemónicos o sintáxis de lenguaje ensamblador


para un mismo conjunto de instrucciones, instanciados típicamente en diferentes
programas en ensamblador. En estos casos, la alternativa más popular es la provista por
los fabricantes, y usada en los manuales del programa.

[editar] Código máquina


El código máquina, o lenguaje de máquina, está formado por instrucciones sencillas,
que -dependiendo de la estructura del procesador- pueden especificar:

• Registros específicos para operaciones aritméticas, direccionamiento o control


de funciones.
• Posiciones de memoria específicas (offset).
• Modos de direccionamiento usados para interpretar operandos.

Las operaciones más complejas se realizan combinando estas instrucciones sencillas,


que pueden ser ejecutadas secuencialmente o mediante instrucciones de control de flujo.

Las operaciones disponibles en la mayoría de los conjuntos de instrucciones incluye:

• mover
o llenar un registro con un valor constante
o mover datos de una posición de memoria a un registro o viceversa
o escribir y leer datos de dispositivos
• computar
o sumar, restar, multiplicar o dividir los valores de dos registros, colocando
el resultado en uno de ellos o en otro registro
o realizar operaciones binarias, incluyendo operaciones lógicas
(AND/OR/XOR/NOT)
o comparar valores entre registros (mayor, menor, igual)
• afectar el flujo del programa
o saltar a otra posición en el programa y ejecutar instrucciones allí
o saltar si se cumplen ciertas condiciones (IF)
o saltar a otra posición, pero guardar el punto de salida para retornar
(CALL, llamada a subrutinas)

Algunas computadoras incluyen instrucciones complejas dentro de sus capacidades.


Una sola instrucción compleja hace lo mismo que en otras computadoras puede requerir
una larga serie de instrucciones, por ejemplo:

• salvar varios registros en la pila de una sola vez


• mover grandes bloques de memoria
• operaciones aritméticas complejas o de punto flotante (seno, coseno, raíz
cuadrada)

Mientras que una computadora reconoce la instrucción de máquina IA-32

10110000 01100001

para los programadores de microprocesadores x86 es mucho más fácil reconocer dicha
instrucción empleando lenguaje ensamblador:

movb 0x61,%al

Este código mueve el valor hexadecimal 61 (97 en decimal) al registro 'al'.

[editar] Ejemplos de lenguaje ensamblador


[editar] Ejemplo 1

El siguiente es un ejemplo del programa clásico Hola mundo escrito para la arquitectura
de procesador x86 (bajo el sistema operativo DOS).

.model small
.stack
.data
Cadena1 DB 'Hola Mundo.$'
.code

programa:
mov ax, @data
mov ds, ax
mov dx, offset Cadena1
mov ah, 9
int 21h
end programa

[editar] Ejemplo 2

Una selección de instrucciones para una computadora virtual3 ) con las correspondientes
direcciones de memoria en las que se ubicarán las instrucciones. Estas direcciones NO
son estáticas. Cada instrucción se acompaña del código en lenguaje ensamblador
generado (código objeto) que coincide con la arquitectura de computador virtual, o
conjunto de instrucciones ISA.

Etiquet
Dir. Instrucción Código máquina4
a

.begin
.org 2048

a_star
.equ 3000
t

2048 ld length,%

00000010 10000000 00000000


2064 be done
00000110

addcc %r1,- 10000010 10000000 01111111


2068
4,%r1 11111100

addcc %r1,%r2,% 10001000 10000000 01000000


2072
r4 00000010

11001010 00000001 00000000


2076 ld %r4,%r5
00000000

00010000 10111111 11111111


2080 ba loop
11111011

addcc %r3,%r5,% 10000110 10000000 11000000


2084
r3 00000101

10000001 11000011 11100000


2088 done: jmpl %r15+4,%r0
00000100

length 00000000 00000000 00000000


2092 20
: 00010100

addres 00000000 00000000 00001011


2096 a_start
s: 10111000
.org a_start

3000 a:</tt

[editar] Ejemplo 3

Código en lenguaje ensamblador para µC Intel 80C51:

ORG 8030H

T05SEG:
SETB TR0
JNB uSEG,T05SEG ;esta subrutina es utilizada
CLR TR0 ;para realizar una cuenta de
CPL uSEG ;0,5 segundos mediante la
MOV R1,DPL ;interrupción del timer 0.
MOV R2,DPH
CJNE R2,#07H,T05SEG
CJNE R1,#78H,T05SEG
MOV DPTR,#0000H
RET

[editar] Ejemplo 4

Código en lenguaje ensamblador para µC 16F84 de Microchip:

ORG 0
Inicio
bsf STATUS,RP0
clrf PORTB
movlw 0xFF
movwf PORTA
bcf STATUS,RP0
Principal
movf PORTA,W
movwf Contador
movf Contador,F
btfsc STATUS,Z
goto PuntoDecimal
sublw d'9'
btfss STATUS,C
END
Escalabilidad de los microprocesadores

Microprocesadores

Microprocesadores Introducción Procesador La unidad de procesamiento central


Unidad central de procesamiento (CPU) Avance tecnológico de los procesadores
8088/8086 80286 80386 DX y SX 80486DX/80486SX 80486DX2, 80486DX4,
80486SX2 Overdrives La familia Pentium Pentium Overdrive Pentium Pro Ejecución
dinámica El futuro próximo de Intel Anexos >>>>>>> INTRODUCCION

El microprocesador es uno de los logros más sobresalientes del siglo XX. Esas son
palabras atrevidas, y hace un cuarto de siglo tal afirmación habría parecido absurda.
Pero cada año, el microprocesador se acerca más al centro de nuestras vidas, forjándose
un sitio en el núcleo de una máquina tras otra. Su presencia ha comenzado a cambiar la
forma en que percibimos el mundo e incluso a nosotros mismos. Cada vez se hace más
difícil pasar por alto el microprocesador como otro simple producto en una larga línea
de innovaciones tecnológicas.

Ninguna otra invención en la historia se ha diseminado tan aprisa por todo el mundo o
ha tocado tan profundamente tantos aspectos de la existencia humana. Hoy existen casi
15,000 millones de microchips de alguna clase en uso (el equivalente de dos
computadoras poderosas para cada hombre, mujer y niño del planeta). De cara a esa
realidad, ¿quién puede dudar que el microprocesador no sólo está transformando los
productos que usamos, sino también nuestra forma de vivir y, por último, la forma en
que percibimos la realidad?
No obstante que reconocemos la penetración del microprocesador en nuestras vidas, ya
estamos creciendo indiferentes a la presencia de esos miles de máquinas diminutas que
nos encontramos sin saberlo todos los días. Así que, antes de que se integre de manera
demasiado imperceptible en nuestra diaria existencia, es el momento de celebrar al
microprocesador y la revolución que ha originado, para apreciar el milagro que es en
realidad cada uno de esos chips de silicio diminutos y meditar acerca de su significado
para nuestras vidas y las de nuestros descendientes.

Procesador

La unidad de procesamiento central La unidad de procesamiento central (CPU) es


donde se manipulan los datos. En una microcomputadora, el CPU completo está
contenido en un chip muy pequeño llamado microprocesador. Todas las CPU tienen por
lo menos dos partes básicas, la unidad de control y la unidad aritméticológica. Todos los
recursos de la computadora son administrados desde la unidad de control, cuya función
es coordinar todas las actividades de la computadora. La unidad de control contiene las
instrucciones de la CPU para llevar a cabo comandos. El conjunto de instrucciones, que
está incluido dentro de los circuitos de la unidad de control, es una lista de todas las
operaciones que realiza la CPU. Cada instrucción en el conjunto de instrucciones es
acompañado por un microcódigo, que son instrucciones muy básicas que le dicen a la
CPU cómo ejecutar las instrucciones. Cuando la computadora corre un programa, busca
los comandos del programa dentro del conjunto de instrucciones de la CPU y las ejecuta
en orden. La unidad aritmético-lógico (ALU)es cuando la unidad de control encuentra
una instrucción que involucra aritmética o lógica, le pasa el control al segundo
componente de la CPU. La ALU incluye un grupo de registros, es decir, memoria
construida directamente en la CPU que se usa para guardar datos que están siendo
procesados por la instrucción actual.

Unidad Central de Procesamiento (CPU) La CPU de una computadora contiene la


inteligencia de la máquina; es donde se realizan los cálculos y las decisiones. El
complejo procedimiento que transforma datos nuevos de entrada en información útil de
salida se llama procesamiento. Para llevar a cabo esta transformación, la computadora
usa dos componentes: el procesador y la memoria. El procesador es el cerebro de la
computadora, la parte que interpreta y ejecuta las instrucciones. El procesador casi
siempre se compone de varios circuitos integrados o chips, estos están insertados en
tarjetas de circuitos, módulos rígidos rectangulares con circuitos que los unen a otros
chips y a otras tarjetas de circuitos.

El microprocesador moderno contiene unos 20 millones de transistores y cada chip


terminado es el producto de procesos más complicados que los que se utilizaron en el
Proyecto Manhattan para construir la bomba atómica. Y no obstante, pese a un proceso
de manufactura extraordinariamente refinado, los microchips se producen en volumen a
razón de más de 1,000 millones de unidades por año. Para poner esta complejidad en
perspectiva, imagínese que dentro de cada microprocesador diminuto existe una
estructura tan compleja como una ciudad de tamaño mediano, incluidas todas sus líneas
de energía eléctrica, líneas telefónicas, líneas de drenaje, edificios, calles y casas. Ahora
imagine que en esa misma ciudad, millones de personas se desplazan a la velocidad de
la luz y con la sincronización perfecta en una danza de coreografía muy complicada.
Y eso es tan sólo un chip. De todas las estadísticas asombrosas que se utilizan para
describir el mundo del microprocesador, ninguna es más extraordinaria que ésta: el
número total de transistores que integran todos los microchips que se producirán en el
mundo este año es equivalente al número de gotas de lluvia que caerán en California
durante ese mismo periodo.

Avance Tecnológico de los procesadores.

8088 / 8086 En 1975 Intel decidió ponerse manos a la obra para construir su primer
micro de 16 bits que salió al mercado en 1978. Se trataba del 8086, que definió el inicio
de su gama de productos más famosa, la familia de microprocesadores x86.

La longitud de los registros del 8086 era de 16 bits (de ahí su denominación de 16 bits),
había versiones que funcionaban a 4.77 y 8 MHz, tenía un bus de datos de 16 bits y un
bus de direcciones de 20 bits, lo que le permitía acceder a un máximo de memoria de 1
Mb según el cálculo 2 elevado a 20. Seguidamente, en 1979, Intel sacó el 8088, que en
contra de lo que podamos pensar no es mejor que el 8086. La diferencia era sustancial;
el bus de datos era de 8 bits (la mitad). Este paso hacia atrás estuvo provocado por el
estado de la industria de la época. Utilizar un bus de datos de 16 bits suponía forzar al
mercado a desarrollar para 16 bits lo que implicaba un incremento en los costes de
desarrollo de controladores de periféricos y memorias. El síntoma fue que Intel se había
adelantado a su época.

Los japoneses, aprovechando la ocasión y dando fe a su fama de copiones fabricaron


unos clónicos de los 8086 y 8088. Fue NEC la que, por procedimientos de ingeniería
inversa, sacó el diseño de estos micros y creó sus modelos V20 y V30, que
incrementaban el rendimiento respecto a los de Intel en un 10–30 por ciento. Como os
podréis imaginar Intel demandó a NEC, pero perdió el juicio. La Justicia determinó que
el microcódigo del chip podía registrarse pero Intel no había marcado en el chip el
símbolo del copyright, con lo cual perdía los derechos de copia.

Se encuentra un error de diseño en el 8088 que afecta a la gestión de interrupciones y al


registro de pila SS (Stack Segment).

Intel fabricó variaciones de estos modelos, sacando al mercado los 80C86, 80C88,
80186 y 80188 cuyas modificaciones fueron el ahorro de energía en las versiones C
para su instalación en portátiles, y el rediseño interno para la optimización en las
versiones 1.

80286 En 1984 aparece el 80286 como base para una nueva generación de ordenadores
de IBM, el IBM AT (Advanced Technology). Supone un nuevo salto tecnológico.
Además de incrementar el bus de direcciones de 20 bits a 24, lo que permitía acceder
hasta los 16 Mb de RAM, se incrementaba la velocidad, llegando a ser hasta un 25 por
ciento más rápidos que los 8086 y 8088 originales.

La novedad más importante que se introdujo fue la gestión de memoria virtual. La


memoria virtual es una extensión de memoria en disco (o dispositivo de
almacenamiento secundario) añadida a la memoria física instalada. Así, el 80286 es
capaz de tratar hasta un total de 1 Gb, desglosado en 16 Mb de memoria física más 1008
Mb de memoria virtual. La memoria virtual solamente la utilizan los programas que
están preparados para ello.

Aparece también un nuevo modo de operación del microprocesador. Aparte del modo
real (el normal de operación) que direcciona hasta 1 Mb de memoria física y asegura la
compatibilidad para aplicaciones diseñadas par los 8086/8088, se tiene el modo
protegido que no es compatible con estos programas desarrollados para los micros antes
mencionados. El modo protegido es el que permite acceder a los 1.008 Mb de memoria
virtual.

El 80286 trabaja en su arranque en modo real. El cambio a modo protegido, lo que se


conoce técnicamente como upshift, no es reversible (downshift), siendo necesario hacer
un reset del microprocesador para volver al modo real; sin duda un gran fallo de diseño.

El 80286 se presentó con velocidades de reloj de 2, 8, 10, 12, 16 y 20 MHz.

80386 DX y SX Introducido en 1985, el 80386 DX supera un nuevo escalón en el


avance tecnológico en microprocesadores. Se incorpora una nueva ampliación y surge el
número mágico, el 32. Los buses de datos y de direcciones se amplían hasta 32 líneas de
datos, ocurriendo lo mismo con el tamaño de los registros. Esta ampliación supone un
incremento en la memoria RAM física instalada. Puede direccionar 4 Gb de memoria
física (DX significa Double word eXternal) y 64 Tb de memoria virtual, una cifra que
en la actualidad está aún muy por encima de las posibilidades económicas de los
usuarios (a ver quién instala 4.000 Megabytes de RAM, unos 20 millones de pesetas).

Arranca en modo real, al igual que el 80286, e incorpora un nuevo modo de operación:
el modo real virtual del 8086, que permite tener varias sesiones 8086 trabajando
simultáneamente simulando una especie de pseudomultitarea.

En los microprocesadores anteriores la gestión de memoria se realizaba en segmentos de


16 Kb. Con el 80286 este tamaño de los segmentos de la memoria se hacían muy
pequeños y el programador tenía que trabajar más para adaptarse a una gran cantidad de
segmentos. El 80386 permite la definición de segmentos de memoria de tamaño
variable. Aparte, Intel corrigió la deficiencia del downshifting, pudiéndose realizar por
software.

Otra de las innovaciones en la inclusión de una memoria cache interna en el chip


destinada a almacenar instrucciones provenientes de memoria sin necesidad de que la
unidad de ejecución intervenga. Intel comete un nuevo error en el diseño del micro que
genera inexactitudes en el cálculo de 32 bits, que se presentan en los micros lanzados al
mercado hasta mayo del 1987. Los modelos corregidos van etiquetados con una doble
sigma mayúscula o con el identificativo DX. Este error afectaba a las operaciones de
multiplicación de 32 bits. Ocurría bajo las siguientes circunstancias:

Se usa la memoria virtual y se produce una demanda de página.

El coprocesador matemático 80387 está instalado y en uso.

Debe ocurrir una operación de acceso directo a memoria (DMA).


El 80386 debe estar en estado de espera (Wait State).

Se detecta un segundo bug denominado POPAD bug. Su efecto es el vaciado del


registro acumulador EAX cuando se ejecuta una instrucción de acceso a memoria
inmediatamente después de la ejecución de la instrucción POPAD.

Aparecen variaciones que afectan al consumo de energía pensadas para portátiles, se


trataba de los 80386SL (Slow Low power) y 80386SLC (Slow Low power Cache), que
es propiedad de IBM aunque lo fabrique Intel. Las frecuencias de funcionamiento eran
de 12, 20, 25 y 33 MHz.

El 80386SX (SX significa Simple word eXternal) tiene las mismas características que el
80386DX, salvo que el bus de direcciones externo se reduce a 16 bits. Introducido en
1988 daba la potencia de un 80386 a precio de un 80286. Durante mucho tiempo se
rumoreó que el P9 podría ser compatible con los zócalos 80286, pero al final no fue así.
La razón es que el 80286 multiplexa todos sus buses para conseguir con menos líneas el
mismo resultado (menor coste) El 80386SX sólo multiplexa el bus de direcciones. Las
frecuencias de funcionamiento eran de 16, 20, 25 y 33 MHz.

80486DX 80486SX El 80486DX salió al mercado en 1989. La estructura interna


hablando en términos numéricos es igual a la de un 80386. El tamaño de los registros y
de los buses son de 32 bits. Mantiene los tres modos de operación: real, protegido y real
virtual. Las diferencias reales con los 80386DX son que tiene un flag más, un estado de
excepción más, 2 bits más en la tabla de entrada de páginas, 6 instrucciones y los
registros de control tienen una longitud de 9 bits.

Se realizan también cambios en la arquitectura interna. Se crea un mayor número de


líneas hardware lo que implica un incremento en la velocidad. Se imponen reglas de
diseño más estrictas, lo que supone un reducción del tamaño del chip. Al reducirse el
tamaño se reduce también el consumo y consiguientemente la temperatura que alcanza
el chip, con lo cual lo podemos hacer funcionar a un mayor número de ciclos de reloj, lo
que supondrá la aparición de los Overdrives.

Se incluye un coprocesador matemático interno que dobla las prestaciones de un 80387


trabajando a la misma velocidad. Se logra un diseño mejor y la comunicación entre el
chip principal y el coprocesador matemático es interna, lo que mejora la velocidad en
las transferencias y unas sincronizaciones más estrechas.

La memoria cache (8 Kb) del microprocesador está dividida en 4 caches de 2 Kb cada


una. Esto agiliza la ejecución de algunas aplicaciones. Si se asigna una memoria cache
secundaria (L2) el rendimiento del micro puede aumentar hasta un 30 por ciento más.

El 80486SX es igual que un 80486DX, sólo que el coprocesador matemático está


inhabilitado. El coprocesador matemático 80487SX es en realidad un 80486DX puro
que desactiva por completo el 80486SX, sin que podamos retirarlo de la placa. Las
velocidades a las que funcionan son de 25, 33, 40 y 50 MHz. Hay versión SL para
portátiles.

80486DX2, 80486DX4, 80486SX2 Estos modelos de microprocesadores en realidad


son iguales que sus hermanos menores. Internamente duplican la velocidad del reloj del
sistema. Es igual que revolucionar el motor de un coche para que corra más. Las
consecuencias son obvias: un sobrecalentamiento del micro con una reducción de
potencia. Por este motivo se recomienda utilizar un método de disipación de calor para
que el rendimiento no se vea reducido (laminillas disipadoras o ventiladores). Las
velocidades a las que trabajan son: 50, 66, 75 y 100 (sólo para el DX4) MHz para los
DX2 y 40 y 50 MHz para los SX2.

Los 80486 tampoco están libres del pecado original. En el 80486 cuando el
coprocesador matemático detecta un error de limite del tamaño de segmento, algunas
veces la CPU falla al generar la excepción 13. Este error se genera bajo las siguientes
condiciones:

Segmento de datos de 64 Kb.

Operandos de direccionamiento de 16 bits.

Almacenar un valor de 8 bytes desde el coprocesador cuando la mitad está fuera de los
limites del limite del segmento.

Un segundo bug aparece en el cálculo de la instrucción dedicada a calcular


arcotangentes.

Overdrives Intel comenzó una nueva política con la salida de los microprocesadores con
la denominación Overdrive. Los Overdrive eran actualizaciones para los
microprocesadores instalados en los sistemas que dispusieran de un segundo zócalo para
tal propósito. En esta primera generación de Overdrives los chips disponían de un
duplicador de frecuencia interno y tenían un pin más, el número 169. Este pin se
encargaba de inhabilitar el 80486 instalado en la placa dejando como único micro
funcionando el Overdrive. No era posible la retirada del micro anterior, puesto que el
sistema dejaba de funcionar. La política de actualización era buena, lo que no era tan
bueno era la trampa para los usuarios. Si se puede retirar el micro anterior se puede
vender a usuarios que necesiten menos potencia, no siendo tan gravosa la inversión de
más de 80.000 pesetas que costaban cuando salieron los primeros en 1991.

En la segunda generación de Overdrives se olvidó el pin 169, teniendo los 168 que los
hacían compatibles con los zócalos de los 80486. En estos casos la actualización es
sencillísima: quitar el que estaba y poner el nuevo en el mismo lugar.

La tercera generación de Overdrives trabaja con un consumo menor para reducir de este
modo su alta temperatura. El voltaje se reduce a 3.3 voltios de los 5 que necesitaban los
anteriores. Si vas a comprar un DX2 o DX4 fíjate bien qué voltaje utiliza vuestra placa.
los Overdrives etiquetados como tal funcionan a 5V, los etiquetados directamente como
DX4, sin disipador, funcionan a 3.3V.

La familia Pentium

La quinta generación de microprocesadores Intel tomó el nombre de Pentium.


Aparecido en marzo de 1993 en frecuencias de trabajo de 60 y 66 MHz llega a ser cinco
veces más potente que un 80486 a 33 MHz. Fabricados con un proceso BiCMOS de
geometría de 8 micras y con una arquitectura superescalar, los microprocesadores
Pentium se encuadran en un concepto RISC. Mientras que el 80386 y el 80486 tienen
una unidad de ejecución, el Pentium tiene dos, pudiendo ejecutar dos instrucciones por
ciclo de reloj con sus correspondientes cálculos, ya que también tiene dos unidades
aritmético-lógicas (ALU). El 80386 (CISC) ejecuta un instrucción en varios ciclos de
reloj y el 80486 ejecuta una instrucción por ciclo de reloj (en términos medios).

Intel toma como modelo la estructura separada para la memoria cache interna del
microprocesador. Consta de dos bloques de 8 Kb, uno para las instrucciones y otro para
los datos que funcionan bajo una estructura de asociación de conjuntos bidireccional.
Para los extremadamente curiosos el algoritmo de sustitución de datos en la cache es el
LRU (Least Recently Used, el menos utilizado recientemente).

El coprocesador matemático incluido utiliza algoritmos mejorados y añade


instrucciones de suma, multiplicación y división de números en punto flotante
integradas en el silicio, además de incorporar un pipeline de 8 niveles para lograr
ejecutar operaciones en punto flotante en un solo ciclo de reloj.

Se integran nuevos avances tecnológicos, además de los ya comentados, como por


ejemplo la predicción de ramificaciones, buses de datos internos de 256 bits, bus de
datos externo de 64 bits (que soporta transferencias de 258 Kbytes por segundo) y
memorias cache de escritura diferida.

La tecnología de bus PCI se presenta junto con el Pentium, que incorporaba una mejor
implementación del bus local. Permite tener hasta 10 conectores PCI en un primer nivel,
conectados al procesador a través de la circuitería controladora PCI (conexión no
directa).

Intel apunta ahora hacia el mercado del entorno cliente/servidor. Con el Pentium se
puede construir un ordenador multiprocesador con 16 Pentium instalados, pudiendo
actuar uno de ellos como agente supervisor del sistema para entornos que requieran un
estricto control de errores (Functional Redundancy Checking ). Aunque esto sirvió de
poco en un principio. Seguro que recordáis el famoso bug de Pentium. La nueva y
mejorada unidad de punto flotante cometía un error garrafal al hacer una simple
división. La siguiente función escrita para Visual Basic detecta si un Pentium genera un
fallo de cálculo:

Function Pentium Test () As Double

Dim x As Double, y As Double, z As Double

x = 4195835#

y = 3145727#

z = x - (x / y) * y

Pentium Test = z

End Function
Recientemente han aparecido versiones del Pentium a 75, 90, 100 y 133 MHz, siendo el
último, presentado el 23 de octubre, uno a 120 MHz diseñado especialmente para
ordenadores portátiles.

Pentium Overdrive

¡Cómo no íbamos a disponer de una versión “light” del Pentium compatible pin a pin
con nuestros microprocesadores 80486DX y DX2!

El 18 de septiembre de 1995 Intel anuncia la disponibilidad de un nuevo modelo


procesador de mejora Pentium Overdrive a 83 MHz (además del modelo a 63 MHz que
ya existía) que permite la actualización de los microprocesadores 80486 DX, DX2 y
SX. Compatible pin a pin con estos microprocesadores en Pentium Overdrive integra la
tecnología del Pentium en 3,3 voltios y 0′6 micras.

Aparte de ser como un Pentium genuino cabe destacar la presencia de una memoria
cache de 32 Kb, un regulador de tensión para reducir la tensión de 5 a 3,3 voltios,
disipador y ventilador integrado y una circuitería interna que incrementa en dos veces y
media la frecuencia del bus del sistema (33 MHz * 2′5 = 82′5 MHz). El incremento
medio en las prestaciones respecto a un 80486 a 66 MHz es de un 50 por ciento aunque
en aplicaciones puntuales (Auto CAD 13) puede ser de un 96 por ciento, lo que lo sitúa
en las prestaciones de un Pentium genuino a 75 MHz. El precio de venta al público es
de unas 40.000 pesetas más IVA.

Antes de comprarlo os recomiendo que llevéis el ordenador a la tienda para que sepan
qué zócalo tiene para su actualización.

Pentium Pro

El Pentium Pro a 133 MHz, que fue presentado el día 3 de noviembre de 1995 en el
hotel Ritz de Madrid es el primer microprocesador de la tercera generación de la gama
Pentium. Está preparado específicamente para ejecutar aplicaciones compiladas y
desarrolladas para 32 bits. Algunas aplicaciones desarrolladas para entornos de 16 bits
tienen una reducción de rendimiento en su ejecución en sistemas basados en un Pentium
Pro respecto a los Pentium normales a 133 MHz. Perfectamente compatible con sus
hermanos menores incorpora nuevas mejoras, de las cuales destaca la ejecución
dinámica, tema al que dedicaremos un apartado especial y la inclusión de una memoria
cache secundaria integrada en el encapsulado del chip.

Fabricado en una geometría de 0′6 micras, Intel está realizando sus desarrollos con
vistas a reducirla a 0′35 micras como la de los Pentium actuales a 133 MHz, lo que
reducirá su temperatura y podrá elevarse la frecuencia de reloj hasta los 200 MHz.

Intel ha puesto mucho esfuerzo en probar el Pentium Pro para intentar salvarse de los
numerosos bugs que manchan su gran prestigio. Intel nos ofreció participar en las
pruebas de sus Pentium Pro, petición a la cual respondimos afirmativamente, pero al
final, la drástica reducción de unidades nos hicieron quedar fuera de los elegidos (sólo
se probaron 100 unidades que estarían más que asignadas de las más de 10.000
peticiones que recibió Intel a través de Internet).
El Pentium Pro no es compatible con las placas que existen en el mercado. El motivo
principal es la inclusión de la memoria cache secundaria dentro del chip. Se utiliza un
bus interno que está optimizado para trabajar con las temporizaciones de conexión
directa, lo cual imposibilita la conexión de la memoria cache externa (a mi entender no
tiene la suficiente justificación, puesto que a nivel de SETUP la memoria cache
secundaria se puede desactivar e incluso anular retirando los integrados de sus zócalos.
El tema de la sincronización ya es otro cantar y probablemente sea el motivo real).

Este nuevo producto tiene un bus que ha sido diseñado para conectar varios Pentium
Pro en paralelo que soporta el protocolo MESI, es un microprocesador de 32 bits que
incorpora una instrucción más (mover datos condicionalmente) que supone una mayor
predicción de ramificaciones en la ejecución. Tiene 21 millones de transistores, 5′5
millones en el núcleo y 15′5 millones en la memoria cache secundaria. La CPU consta
de dos chips colocados en cavidades independientes conectadas internamente. El chip
correspondiente a la memoria cache es más pequeño que el del chip del núcleo, ya que
la disposición de los transistores permite una mayor concentración.

Ejecución dinámica La ejecución dinámica es uno de los dos elementos clave en la


ganancia de prestaciones del Pentium Pro. Esta nueva forma de “pensar” del
microprocesador está basada en la combinación de tres técnicas: la predicción de
ramificaciones múltiples, el análisis del flujo de datos y la ejecución especulativa.

Predicción de ramificaciones múltiples.

El Pentium Pro utiliza un algoritmo de predicción de ramificaciones múltiples para


anticipar saltos en la ejecución del flujo de instrucciones. Predice dónde puede
encontrar en la memoria las siguientes instrucciones que debe ejecutar con una precisión
del 90%. Esto lo logra porque además de extraer instrucciones para su ejecución, se
adelanta y busca anticipadamente posibles nuevas instrucciones de programa.

Análisis del flujo de datos

El análisis del flujo de datos permite saber al microprocesador en qué orden óptimo
puede o debe ejecutar las instrucciones, ya que sabe la dependencia de unas respecto a
otras.

Ejecución especulativa

Cuando el Pentium Pro ejecuta instrucciones (5 por ciclo de reloj) utiliza la ejecución
especulativa. Esto significa que las instrucciones no se ejecutan en el mismo orden con
el que entran al microprocesador, sino que se ejecutan en un “orden desordenado”, lo
que paradójicamente hace que sea más eficaz.

En el paso final, todos esos datos desordenados generados por la predicción de


ramificaciones, se ordenan y se ensamblan esos paquetes de unidades de proceso para
montar el orden lógico en la secuencia de ejecución del programa.

El futuro próximo de Intel


ntel está ya trabajando en sus modelos P 55 C?, P68 y P7. El P 55 C será una versión
Lite del Pentium Pro, presumiblemente compatible pin a pin con los zócalos de 80486 y
estará especialmente diseñado para ejecutar aplicaciones de Windows 95. ¿Para cuándo
tendrá el PC una ROM con rutinas gráficas preprogramadas para su uso por el sistema
operativo? Tendrá un precio inferior al del Pentium Pro y parece que estará disponible a
finales de 1996.

El P68 y el P7 corresponden a un nuevo escalón, ya que son micros de 64 bits que se


presentarán a lo largo de 1997. El primero es el sucesor del Pentium Pro compatible con
la familia x86, mientras que el P7 es una coproducción de Intel y Hewlett-Packard que
utilizará la tecnología PA-RISC de HP.

Resumiendo, Intel sigue con su política de “gástate un pastón en un ordenador para


después tirarlo”.

ANEXOS

TECNOLOGÍA

INTEL LANZA UN CHIP DE ALTA CAPACIDAD

Intel ha anunciado el lanzamiento al mercado de un chip que ha despertado esperanzas


de un gran desarrollo de la industria informática y de las capacidades de los
microprocesadores, pero cuyo principio fundamental ya existía desde 1995. El logro de
este prodigioso chip está en que dobla la capacidad de los transistores que lo forman.
Hasta ahora, para aumentar las capacidades de los procesadores se intentaba condensar
miles de microscópicos transistores en el menor espacio posible, para que cada uno de
ellos almacenara un bit. Lo que se consigue con esta tecnología es que cada transistor
almacene dos bits en vez de uno. Y se aspira a que en un futuro sean más de dos los bits
albergados en cada transistor.

El mayor fabricante de chips del mundo, presentó el nuevo chip el miércoles en Japón.
La novedad se aplicará en una primera fase a cámaras digitales, teléfonos móviles y
asistentes personales, pues consiste en memorias flash, las que no se borran aunque el
aparato se desconecte. Por ahora, no se usará en las memorias RAM, las que usan los
ordenadores, y que pierden lo almacenado cuando se corta el fluido eléctrico. De todos
modos, el nuevo chip abre un número ilimitado de posibilidades, y una carrera por su
aplicación con otros fabricantes de chips que conocen métodos parecidos o que trabajan
en otros sistemas para aumentar la capacidad de los microprocesadores.

La tecnología de Strata Flash ya se conocía. En 1994 Intel anunció este sistema,


presentando un año después un prototipo que luego no desarrolló. Desde entonces hasta
hoy, otros fabricantes como Sandisk e ISD han utilizado tecnología similar, aunque
Intel ha sido la primera empresa en hacer su uso posible a gran escala. Tanto que espera
colocar en el mercado de 1 a1 10 millones de unidades de estos Strata Flash en 1998. La
competencia no está parada: ISD ya tiene chips que almacenan varios bits por transistor
de manera similar a Strata Flash, San Disk dispone de un sistema parecido en sus
tarjetas PC, alcanzando capacidades de almacenamiento similares. Lucent Technologies
prepara para muy pronto otro tipo de procesadores de señal digital (DSP), un tipo de
chips utilizados en teléfonos celulares y estaciones de comunicación digital, que siendo
un 30% más baratos de los usados hoy, requieren sólo una quinta parte de energía y
memoria que los chips de la competencia. En el terreno académico, la Universidad de
North Carolina en Charlotte anunció el descubrimiento de un chip capaz de usar
tecnología eléctrica y óptica a la vez, lo que aumenta su velocidad 100.000 veces en
relación a los modelos actuales, aunque de momento se trata sólo de un prototipo
desarrollado por Raphael Su y Qi Zhang, ingenieros eléctricos.

TECNOLOGÍA

EL ÚLTIMO CHIP DE SUN ALCANZA LOS 600 MHZ

En una carrera imparable plagada de nuevos chips cada vez más potentes y métodos de
fabricación innovadores, Sun Microsystems presentó el lunes un potente
microprocesador que alcanza los 600 Mhz de velocidad de reloj, un rendimiento que
dobla la nueva generación Pentium II recién estrenada por Intel, que se presentó como
un gran éxito con “sólo” 300 Mhz.

El nuevo chip de Sun, el Ultra Sparc?-III constituye la tercera generación de su familia


Sparc, el corazón de las estaciones de trabajo y de los servidores de Sun. Una de sus
características más destacables es su escalabilidad, es decir, la posibilidad de añadir más
chips al mismo sistema, de manera que trabajando en paralelo, multipliquen las
posibilidades de esta tecnología. La empresa asegura que mil de estos chips
funcionando juntos pueden rivalizar con los superordenadores más potentes de hoy. Las
aplicaciones para la red forman parte de la comercialización del prodigioso chip que,
aplicado a los servidores, les permitiría soportar un mayor número de usuarios,
abasteciéndolos de más información y más rápidamente que los modelos actuales. Los
primeros de estos servidores estarán preparados para el próximo verano, y se
gobernarán por el sistema operativo de la casa, el Solaris.

Sun se adelanta así a Intel, ya que el Ultra Sparc-III utiliza una tecnología de 64 bits,
que Intel planeaba presentar como novedad en breves días bajo el nombre clave de
“Merced”. Sin embargo, el gigante de los microprocesadores no se ha quedado atrás y
ha presentado a su vez una nueva generación de chips para servidores conocidos como
i960 RISC que, diseñados exclusivamente para redes de telecomunicaciones, aceleran el
tráfico de datos a través de este tipo de máquinas gracias al protocolo I20. Marcas como
Acer America, AST Computer, Compaq, Dell, IBM, y Hewlett-Packard han anunciado
ya que utilizarán este chip en sus nuevos modelos de servidores, a presentar durante los
próximos tres meses.

Intel: un gigante en el Valle del Silicio

Pocas compañías pueden desafiar el claro dominio de Intel en la industria de los


semiconductores, ni siquiera las rivales de Japón y Corea del Sur

Louise Kehoe FT Intel es una organización única en su categoría. El gigante del Valle
del Silicio _el fabricante de chips más grande del planeta, con un valor de mercado
superior a los 134 millardos de dólares_ produce la mayoría de los microprocesadores
empleados por la industria de la computación personal en todo el planeta.
La enorme escala de las operaciones de Intel empequeñecen las de casi todos sus
rivales. La compañía cerró 1997 con un volumen de ventas anual de 25,1 millardos de
dólares, un aumento significativo en comparación con los 20,8 millardos de dólares
facturados en 1996. Gracias a un margen bruto de ganancias cercano a 60%, la
compañía genera ingresos a un ritmo que supera con creces el de cualquiera de sus
competidores.

Esto le permite a Intel invertir fuertes sumas en investigación y desarrollo de productos,


además de nuevas plantas y equipos. Este año, por ejemplo, Intel tiene un presupuesto
de investigación y desarrollo de 2,8 millardos de dólares y planea desembolsar otros 5,3
millardos de dólares en nuevas líneas de producción. Este monto triplica las inversiones
que realizará en este campo cualquier otro fabricante de semiconductores.

Si se toman en cuenta la participación dominante en el mercado de los


microprocesadores Pentium y el rápido ritmo de avance de la compañía en el desarrollo
de nuevas tecnologías, el liderazgo de Intel pudiera parecer inexpugnable.

Sin embargo, varios cambios en el mercado de las computadoras personales están


creando nuevos desafíos para Intel, los cuales pudieran mermar su crecimiento en el
futuro. En particular, el lanzamiento al mercado de la ‘PC básica’, que se vende en
Estados Unidos por menos de mil dólares, ha obligado a Intel a replantear su estrategia.
La compañía mejora incesantemente el rendimiento de sus microprocesadores, por lo
que una PC comprada un año o incluso seis meses atrás queda opacada por los nuevos
modelos de mayor velocidad.

En el pasado, con el lanzamiento al mercado de cada nueva generación de


microprocesadores, Intel solía disminuir los precios de las versiones anteriores, por lo
que los precios de PC permanecían bastante estables, al tiempo que el rendimiento se
incrementaba con celeridad. Microsoft y otras compañías de software colaboraban en el
ascenso de Intel mediante el desarrollo de programas cada vez más complejos que
requieren hardware más moderno.

Luego vino la ‘PC básica’ que, en términos generales, tiene como base un
microprocesador menos potente que alguno de los rivales de Intel. Al principio, Intel
restó importancia a esta nueva competencia. ‘¿Quién desearía una PC de menor
capacidad?’, se preguntó retóricamente Intel. Empero, el precio de estas máquinas
resultaba muy conveniente y los compradores corrieron a comprarlas. Se estima que el
año pasado 25% de las computadoras personales vendidas en EEUU se ubicaron en el
segmento de equipos con precios inferiores a los mil dólares. El crecimiento de este
nuevo mercado tomó a Intel por sorpresa, lo que obligo a la compañía a reevaluar la
situación. Intel podía ofrecer sus microprocesadores viejos para que se usaran en estas
PC, pero ello mermaría los márgenes de ganancias que constituyen el orgullo de la
compañía. Fue por ello que Intel anunció recientemente planes para desarrollar chips
específicamente diseñados para las PC de bajos precios.

En noviembre, Intel reorganizó sus grupos de productos para reflejar la nueva


estrategia. La compañía ‘abarcará todos los segmentos’ del mercado de la computación,
señaló Andrew Grove, director y presidente ejecutivo de Intel. A mediados de año la
empresa planea ofrecer una versión de su microprocesador Pentium II para máquinas
PC de bajo precio. La compañía reducirá el costo de sus microprocesadores de máximo
rendimiento mediante la eliminación de los costosos chips de memoria que acompañan
la versión actual. Esto colocará el Pentium II en el mismo nivel de precios que los chips
más lentos de sus competidores.

Otro truco para reducir costos que Intel guarda bajo la manga es convertir funciones
actualmente realizadas por los chips en software que puede ser ejecutado por el
microprocesador. Aunque esto incrementa la carga de trabajo del procesador central,
también implica que incluso las computadoras personales baratas necesitarán los
microprocesadores de alto rendimiento de Intel.

La compañía también aspira liderar el mercado de chips para las nuevas generaciones de
codificadores de TV, los cuales permitirán a los suscriptores de televisión por cable
conectarse a Internet. Asimismo, ha realizado importantes incursiones en el mercado de
servidores. El año pasado, la mayoría de los servidores vendidos por menos de 25 mil
dólares tenían microprocesadores Intel.

En 1999, Intel lanzará al mercado una nueva generación de microprocesadores


identificados con el nombre clave de Merced, orientada hacia servidores más complejos.
Hewlett-Packard, que ocupa la segunda posición entre las compañías de computación
más grandes de Estados Unidos, colabora con Intel en el desarrollo de Merced y planea
diseñar sus próximos productos para que utilicen chips de Intel.

Esto establecería los chips de Intel como el estándar dominante para servidores y
convertiría a la compañía en el máximo fabricante de microprocesadores de toda la
industria, un papel al que ninguna empresa puede aspirar.

Debido a que los fabricantes de chips más grandes de Japón y Corea del Sur enfrentan
una situación de inestabilidad económica, pocas compañías pueden desafiar seriamente
el dominio de Intel en la industria. Incluso si otro fabricante de chips diseña un producto
mejor que los de Intel, ninguno posee su capacidad de producción.

Tipos De Ensambladores
Aunque todos los ensambladores realizan básicamente las mismas tareas, podemos
clasificarlos de acuerdo a características.

Así podemos clasificarlos en:

Ensambladores Cruzados (Cross-Assembler).

Se denominan así los ensambladores que se utilizan en una computadora que posee un
procesador diferente al que tendrán las computadoras donde va a ejecutarse el programa
objeto producido.

El empleo de este tipo de traductores permite aprovechar el soporte de medios físicos


(discos, impresoras, pantallas, etc.), y de programación que ofrecen las máquinas
potentes para desarrollar programas que luego los van a ejecutar sistemas muy
especializados en determinados tipos de tareas.

Ensambladores Residentes.
Son aquellos que permanecen en la memoria principal de la computadora y cargan, para
su ejecución, al programa objeto producido. Este tipo de ensamblador tiene la ventaja de
que se puede comprobar inmediatamente el programa sin necesidad de transportarlo de
un lugar a otro, como se hacía en cross-assembler, y sin necesidad de programas
simuladores.

Sin embargo, puede presentar problemas de espacio de memoria, ya que el traductor


ocupa espacio que no puede ser utilizado por el programador. Asimismo, también
ocupará memoria el programa fuente y el programa objeto. Esto obliga a tener un
espacio de memoria relativamente amplio. Es el indicado para desarrollos de pequeños
sistemas de control y sencillos automatismo empleando microprocesadores(1).

La ventaja de estos ensambladores es que permiten ejecutar inmediatamente el


programa; la desventaja es que deben mantenerse en la memoria principal tanto el
ensamblador como el programa fuente y el programa objeto.

Macroensambladores.

Son ensambladores que permiten el uso de macroinstrucciones (macros). Debido a su


potencia, normalmente son programas robustos que no permanecen en memoria una vez
generado el programa objeto. Puede variar la complejidad de los mismos, dependiendo
de las posibilidades de definición y manipulación de las macroinstrucciones, pero
normalmente son programas bastantes complejos, por lo que suelen ser ensambladores
residentes.

Microensambladores.

Generalmente, los procesadores utilizados en las computadoras tienen un repertorio fijo


de instrucciones, es decir, que el intérprete de las mismas interpretaba de igual forma un
determinado código de operación.

El programa que indica al intérprete de instrucciones de la UCP cómo debe actuar se


denomina microprograma. El programa que ayuda a realizar este microprograma se
llama microensamblador. Existen procesadores que permiten la modificación de sus
microprogramas, para lo cual se utilizan microensambladores.

Ensambladores de una fase.

Estos ensambladores leen una línea del programa fuente y la traducen directamente para
producir una instrucción en lenguaje máquina o la ejecuta si se trata de una
pseudoinstrucción. También va construyendo la tabla de símbolos a medida que van
apareciendo las definiciones de variables, etiquetas, etc.

Debido a su forma de traducción, estos ensambladores obligan a definir los símbolos


antes de ser empleados para que, cuando aparezca una referencia a un determinado
símbolo en una instrucción, se conozca la dirección de dicho símbolo y se pueda
traducir de forma correcta. Estos ensambladores son sencillos, baratos y ocupan poco
espacio, pero tiene el inconveniente indicado(1).

Ensambladores de dos fases.


Los ensambladores de dos fases se denominan así debido a que realizan la traducción en
dos etapas. En la primera fase, leen el programa fuente y construyen una tabla de
símbolos; de esta manera, en la segunda fase, vuelven a leer el programa fuente y
pueden ir traduciendo totalmente, puesto que conocen la totalidad de los símbolos
utilizados y las posiciones que se les ha asignado. Estos ensambladores son los más
utilizados en la actualidad.

Clasificación de memorias semiconductoras de acceso aleatorio

Las memorias se clasifican, por la tecnología empleada y, además según la


forma en que se puede modificar su contenido, A este respecto, las memorias
se clasifican en dos grandes grupos:

1) Memorias RAM: Son memorias en las que se puede leer y escribir, si bien
su nombre (Random access memory) no representa correctamente este hecho.
Por su tecnología pueden ser de ferritas (ya en desuso) o electrónicas. Dentro
de éstas últimas hay memorias estáticas (SRAM, static RAM), cuya célula de
memoria está basada en un biestable, y memorias dinámicas (DRAM, dinamic
RAM, en las que la célula de memoria es un pequeño condensador cuya carga
representa la información almacenada. Las memorias dinámicas necesitan
circuitos adicionales de refresco ya que los condensadores tienen muy poca
capacidad y, a través de las fugas, la información puede perderse, por otra
parte, son de lectura destructiva.

2) Memorias ROM (Read 0nly Memory): Son memorias en las que sólo se
puede leer. Pueden ser:

a) ROM programadas por máscara, cuya información se graba en fábrica y no


se puede modificar.

b) PROM, o ROM programable una sola vez.


c) EPROM (erasable PROM) o RPROM (reprogramable ROM), cuyo contenido
puede borrarse mediante rayos ultravioletas para regrabarlas.

d) EAROM (electrically alterable ROM) o EEROM (electrically erasable ROM),


que son memorias que está en la frontera entre las RAM y las ROM ya que su
contenido puede regrabarse por medios eléctricos, estas se diferencian de las
RAM en que no son volátiles. En ocasiones a este tipo de memorias también se
las denomina NYRAM (no volátil RAM).

e) Memoria FLASH, denominada así por la velocidad con la que puede


reprogramarse, utilizan tecnología de borrado eléctrico al igual que las
EEPROM. Las memorias flash pueden borrar-e enteras en unos cuantos
segundos, mucho más rápido que las EPROM.

Básicamente las memorias ROM se basan en una matriz de diodos cuya unión
se puede destruir aplicando sobre ella una sobretensión (usualmente
comprendida ente -12.5 y -40 v.). De fábrica la memoria sale con 1's en todas
sus posiciones, para grabarla se rompen las uniones en que se quieran poner
0's. Esta forma de realizar la grabación se denomina técnica de los fusibles.

Bibliografía: Bastida, J.: Introducción a la Arquitectura de Computadores.


Secretariado de Publicaciones de la Universidad de Valladolid, 1995

Entrada/salida
De Wikipedia, la enciclopedia libre

Saltar a navegación, búsqueda

Dispositivos de entrada de un ordenador

En computación, entrada/salida, también abreviado E/S o I/O (del original en inglés


input/output), es la colección de interfaces que usan las distintas unidades funcionales
(subsistemas) de un sistema de procesamiento de información para comunicarse unas
con otras, o las señales (información) enviadas a través de esas interfaces. Las entradas
son las señales recibidas por la unidad, mientras que las salidas son las señales enviadas
por ésta. El término puede ser usado para describir una acción; "realizar una
entrada/salida" se refiere a ejecutar una operación de entrada o de salida. Los
dispositivos de E/S los usa una persona u otro sistema para comunicarse con una
computadora. De hecho, a los teclados y ratones se los considera dispositivos de entrada
de una computadora, mientras que los monitores e impresoras son vistos como
dispositivos de salida de una computadora. Los dispositivos típicos para la
comunicación entre computadoras realizan las dos operaciones, tanto entrada como
salida, y entre otros se encuentran los módems y tarjetas de red.

Es importante notar que la designación de un dispositivo, sea de entrada o de salida,


cambia al cambiar la perspectiva desde el que se lo ve. Los teclados y ratones toman
como entrada el movimiento físico que el usuario produce como salida y lo convierten a
una señal eléctrica que la computadora pueda entender. La salida de estos dispositivos
son una entrada para la computadora. De manera análoga, los monitores e impresoras
toman como entrada las señales que la computadora produce como salida. Luego,
convierten esas señales en representaciones inteligibles que puedan ser interpretadas por
el usuario. La interpretación será, por ejemplo, por medio de la vista, que funciona
como entrada.

En arquitectura de computadoras, a la combinación de una unidad central de


procesamiento (CPU) y memoria principal (aquélla que la CPU puede escribir o leer
directamente mediante instrucciones individuales) se la considera el corazón de la
computadora y cualquier movimiento de información desde o hacia ese conjunto se lo
considera entrada/salida. La CPU y su circuitería complementaria proveen métodos de
entrada/salida que se usan en programación de bajo nivel para la implementación de
controladores de dispositivos.

Los sistemas operativos y lenguajes de programación de más alto nivel brindan


conceptos y primitivas de entrada/salida distintos y más abstractos. Por ejemplo, un
sistema operativo brinda aplicativos que manejan el concepto de archivos. El lenguaje
de programación C define funciones que les permiten a sus programas realizar E/S a
través de streams, es decir, les permiten leer datos desde y escribir datos hacia sus
programas.

Una alternativa para las funciones primitivas especiales es la mónada de E/S, que
permite que los programas describan su E/S y que las acciones se lleven a cabo fuera
del programa. Esto resulta interesante, pues las funciones de E/S introducirían un efecto
colateral para cualquier lenguaje de programación, pero ahora una programación
puramente funcional resultaría práctica.

Dispositivos de entrada y salida [editar]


• Entrada:
o Teclado
o Ratón
o Joystick
o Lápiz óptico
o Micrófono
o Webcam
o Escáner
o Escáner de código de barras
o Pantalla táctil

• Salida:
o Monitor
o Altavoz
o Auriculares
o Impresora
o Plotter
o Proyector

• Entrada/salida:
o Unidades de almacenamiento
o CD
o DVD
o Módem
o Fax
o Memory cards
o USB
o Router

Microprocesador
De Wikipedia, la enciclopedia libre

Saltar a navegación, búsqueda

Uno de los actuales microprocesadores de 64 bits y doble núcleo, un AMD Athlon 64


X2 3600.
El microprocesador es un circuito integrado que contiene algunos o todos los
elementos hardware, y el de CPU, que es un concepto lógico. Una CPU puede estar
soportada por uno o varios microprocesadores, y un microprocesador puede soportar
una o varias CPU. Un núcleo suele referirse a una porción del procesador que realiza
todas las actividades de una CPU real.

La tendencia de los últimos años ha sido la de integrar más núcleos dentro de un mismo
empaque, además de componentes como memorias cache y controladores de memoria,
elementos que antes estaban montados sobre la placa base como dispositivos
individuales.1

Contenido
[ocultar]

• 1 Funcionamiento
• 2 Rendimiento
• 3 Empaquetado
o 3.1 Disipación de calor
• 4 Conexión con el exterior
o 4.1 Buses del procesador
• 5 Arquitecturas
• 6 Véase también
• 7 Referencias

• 8 Enlaces externos

[editar] Funcionamiento
Desde el punto de vista lógico, singular y funcional, el microprocesador está compuesto
básicamente por: varios registros, una unidad de control, una unidad aritmético-lógica, y
dependiendo del procesador, puede contener una unidad en coma flotante.

El microprocesador ejecuta instrucciones almacenadas como números binarios


organizados secuencialmente en la memoria principal. La ejecución de las instrucciones
se puede realizar en varias fases:

• PreFetch, pre lectura de la instrucción desde la memoria principal.


• Fetch, envío de la instrucción al decodificador-
• Decodificación de la instrucción, es decir, determinar qué instrucción es y por
tanto qué se debe hacer.
• Lectura de operandos (si los hay).
• Ejecución, lanzamiento de las máquinas de estado que llevan a cabo el
procesamiento.
• Escritura de los resultados en la memoria principal o en los registros.

Cada una de estas fases se realiza en uno o varios ciclos de CPU, dependiendo de la
estructura del procesador, y concretamente de su grado de segmentación. La duración de
estos ciclos viene determinada por la frecuencia de reloj, y nunca podrá ser inferior al
tiempo requerido para realizar la tarea individual (realizada en un solo ciclo) de mayor
coste temporal. El microprocesador se conecta a un circuito PLL, normalmente basado
en un cristal de cuarzo capaz de generar pulsos a un ritmo constante, de modo que
genera varios ciclos (o pulsos) en un segundo. Este reloj, en la actualidad, genera miles
de MHz.

[editar] Rendimiento
El rendimiento del procesador puede ser medido de distintas maneras, hasta hace pocos
años se creía que la frecuencia de reloj era una medida precisa, pero ese mito ("mito de
los megahertz") se ha visto desvirtuado por el hecho de que los procesadores no han
requerido frecuencias más altas para aumentar su poder de cómputo.

Durante los últimos años esa frecuencia se ha mantenido en el rango de los 1,5 a 4 [[]],
dando como resultado procesadores con capacidades de proceso mayores comparados
con los primeros que alcanzaron esos valores. Además la tendencia es a incorporar más
núcleos dentro de un mismo encapsulado para aumentar el rendimiento por medio de
una computación paralela, de manera que la velocidad de reloj es un indicador menos
fiable aún.

Medir el rendimiento con la frecuencia es válido únicamente entre procesadores con


arquitecturas muy similares o iguales, de manera que su funcionamiento interno sea el
mismo: en ese caso la frecuencia es un índice de comparación válido. Dentro de una
familia de procesadores es común encontrar distintas opciones en cuanto a frecuencias
de reloj, debido a que no todos los chip de silicio tienen los mismos límites de
funcionamiento: son probados a distintas frecuencias, hasta que muestran signos de
inestabilidad, entonces se clasifican de acuerdo al resultado de las pruebas.

La capacidad de un procesador depende fuertemente de los componentes restantes del


sistema, sobre todo del chipset, de la memoria RAM y del software. Pero obviando esas
características puede tenerse una medida aproximada del rendimiento de un procesador
por medio de indicadores como la cantidad de operaciones de punto flotante por unidad
de tiempo FLOPS, o la cantidad de instrucciones por unidad de tiempo MIPS. Una
medida exacta del rendimiento de un procesador o de un sistema, es muy complicada
debido a los múltiples factores involucrados en la computación de un problema, por lo
general las pruebas no son concluyentes entre sistemas de la misma generación.

El proceso de fabricación de un microprocesador es muy complejo. Todo comienza con


un buen puñado de arena (compuesta básicamente de silicio), con la que se fabrica un
monocristal de unos 20 x 150 centímetros. Para ello, se funde el material en cuestión a
alta temperatura (1.370 °C) y muy lentamente (10 a 40 Mm por hora) se va formando el
cristal.

De este cristal, de cientos de kilos de peso, se cortan los extremos y la superficie


exterior, de forma de obtener un cilindro perfecto. Luego, el cilindro se corta en obleas
de menos de un milímetro de espesor (una capa de unas 10 micras de espesor, la décima
parte del espesor de un cabello humano), utilizando una sierra de diamante. De cada
cilindro se obtienen miles de obleas, y de cada oblea se fabricarán varios cientos de
microprocesadores.
Silicio.

Estas obleas son pulidas hasta obtener una superficie perfectamente plana, pasan por un
proceso llamado “annealing”, que consiste en someterlas a un calentamiento extremo
para remover cualquier defecto o impureza que pueda haber llegado a esta instancia.
Luego de una supervisión mediante láseres capaz de detectar imperfecciones menores a
una milésima de micrón, se recubren con una capa aislante formada por óxido de silicio
transferido mediante deposición de vapor.

De aquí en adelante, comienza el proceso del “dibujado” de los transistores que


conformarán a cada microprocesador. A pesar de ser muy complejo y preciso,
básicamente consiste en la “impresión” de sucesivas máscaras sobre la oblea,
sucediéndose la deposición y eliminación de capas finísimas de materiales conductores,
aislantes y semiconductores, endurecidas mediante luz ultravioleta y atacada por ácidos
encargados de remover las zonas no cubiertas por la impresión. Salvando las escalas, se
trata de un proceso comparable al visto para la fabricación de circuitos impresos.
Después de cientos de pasos, entre los que se hallan la creación de sustrato, la
oxidación, la litografía, el grabado, la implantación iónica y la deposición de capas; se
llega a un complejo "bocadillo" que contiene todos los circuitos interconectados del
microprocesador.

Un transistor construido en tecnología de 45 nanómetros tiene un ancho equivalente a


unos 200 electrones. Eso da una idea de la precisión absoluta que se necesita al
momento de aplicar cada una de las mascaras utilizadas durante la fabricación.

Una oblea de silicio grabada

Los detalles de un microprocesador son tan pequeños y precisos que una única mota de
polvo puede destruir todo un grupo de circuitos. Las salas empleadas para la fabricación
de microprocesadores se denominan salas limpias, porque el aire de las mismas se
somete a un filtrado exhaustivo y está prácticamente libre de polvo. Las salas limpias
más puras de la actualidad se denominan de clase 1. La cifra indica el número máximo
de partículas mayores de 0,12 micras que puede haber en un pie cúbico de aire (0,028
metros cúbicos). Como comparación, un hogar normal sería de clase 1 millón. Los
trabajadores de estas plantas emplean trajes estériles para evitar que restos de piel, polvo
o pelo se desprendan de sus cuerpos.

Una vez que la oblea ha pasado por todo el proceso litográfico, tiene “grabados” en su
superficie varios cientos de microprocesadores, cuya integridad es comprobada antes de
cortarlos. Se trata de un proceso obviamente automatizado, y que termina con una oblea
que tiene grabados algunas marcas en el lugar que se encuentra algún microprocesador
defectuoso.

La mayoría de los errores se dan en los bordes de la oblea, dando como resultados chips
capaces de funcionar a velocidades menores que los del centro de la oblea. Luego la
oblea es cortada y cada chip individualizado. En esta etapa del proceso el
microprocesador es una pequeña placa de unos pocos milímetros cuadrados, sin pines ni
cápsula protectora.

Cada una de estas plaquitas será dotada de una cápsula protectora plástica (en algunos
casos pueden ser cerámicas) y conectada a los cientos de pines metálicos que le
permitirán interactuar con el mundo exterior. Cada una de estas conexiones se realiza
utilizando delgadísimos alambres, generalmente de oro. De ser necesario, la cápsula es
dotada de un pequeño disipador térmico de metal, que servirá para mejorar la
transferencia de calor desde el interior del chip hacia el disipador principal. El resultado
final es un microprocesador como el que equipa nuestro ordenador.

[editar] Empaquetado

Empaquetado de un procesador Intel 80486 en un empaque de cerámica

Los microprocesadores son circuitos integrados y como tal están formados por un chip
de silicio y un empaque con conexiones eléctricas. En los primeros procesadores el
empaque se fabricaba con plásticos epoxicos o con cerámicas en formatos como el DIP
entre otros. El chip se pegaba con un material térmicamente conductor a una base y se
conectaba por medio de pequeños alambres a unas pistas terminadas en pines.
Posteriormente se sellaba todo con una placa metálica u otra pieza del mismo material
de la base de manera que los alambres y el silicio quedaran encapsulados.

En procesadores como los Intel y AMD de las series Pentium I (mediados de los 90) y
compatibles aún se usaba el empaque cerámico que tenia un arreglo de pines PGA y una
cavidad en el espacio de ese arreglo, donde se introducía el chip del procesador y se
soldaba con pequeños alambres a los pines. La cavidad se sellaba con una lamina de
cobre.

Empaquetado de un procesador PowerPC con Flip-Chip, se ve el chip de silicio

En la actualidad los microprocesadores de diversos tipos (incluyendo procesadores


gráficos) se ensamblan por medio de la tecnología Flip chip. El chip semiconductor es
soldado directamente a un arreglo de pistas conductoras (en el substrato laminado) con
la ayuda de unas microesferas que se depositan sobre las obleas de semiconductor en las
etapas finales de su fabricación. El substrato laminado es una especie de circuito
impreso que posee pistas conductoras hacia pines o contactos, que a su vez servirán de
conexión entre el chip semiconductor y un socket de CPU o una placa base.2

Antiguamente las conexión del chip con los pines se realizaba por medio de
microalambres de manera que quedaba boca arriba, con el método Flip Chip queda boca
abajo, de ahí se deriva su nombre. Entre las ventajas de este método esta la simplicidad
del ensamble y en una mejor disipación de calor. Cuando la pastilla queda bocabajo
presenta el substrato base de silicio de manera que puede ser enfriado directamente por
medio de elementos conductores de calor. Esta superficie se aprovecha también para
etiquetar el integrado. En los procesadores para computadores de escritorio, dada la
vulnerabilidad de la pastilla de silicio, se opta por colocar una placa de metal, por
ejemplo en los procesadores Athlon como el de la primera imagen. En los procesadores
de Intel también se incluye desde el Pentium III de más de 1 Ghz.

[editar] Disipación de calor

Artículo principal: disipador

Con el aumento en el número de transistores incluidos en un procesador, el consumo de


energía se ha elevado a niveles en los cuales la disipación natural del procesador no es
suficiente para mantener temperaturas aceptables en el material semiconductor, de
manera que se hace necesario el uso de mecanismos de enfriamiento forzado, como son
los disipadores de calor.

Entre ellos se encuentran los sistemas sencillos como disipadores metálicos que
aumentan el área de radiación, permitiendo que la energía salga rápidamente del
sistema. También los hay con refrigeración líquida, por medio de circuitos cerrados.
[editar] Conexión con el exterior
Artículo principal: Socket de CPU

Superficies de contacto en un procesador Intel para Zocalo LGA775

El microprocesador posee un arreglo de elementos metálicos (pines, esferas, contactos)


que permiten la conexión eléctrica entre el circuito integrado que conforma el
microprocesador y los circuitos de la placa base. Dependiendo de la complejidad y de la
potencia, un procesador puede tener desde 8 hasta más de 1000 elementos metálicos en
la superficie de su empaque. El montaje del procesador puede ser con la ayuda de un
Socket de CPU o soldado sobre la placa base.

Entre las conexiones eléctricas están las de alimentación eléctrica de los circuitos dentro
del empaque, las señales de reloj, señales relacionadas con datos, direcciones y control;
estas funciones están distribuidas en un esquema asociado al Socket, de manera que
varias referencias de procesador y placas base son compatibles entre ellos, permitiendo
distintas configuraciones.

[editar] Buses del procesador

Todos los procesadores poseen un bus principal o de sistema por el cual se envían y
reciben todos los datos, instrucciones y direcciones desde los integrados del chipset o
desde el resto de dispositivos. Como puente de conexión entre el procesador y el resto
del sistema, define mucho del rendimiento del sistema, su velocidad se mide en bytes
por segundo.

Ese bus puede ser implementado de distintas maneras, con el uso de buses seriales o
paralelos y con distintos tipos de señales eléctricas. La forma más antigua es el bus
paralelo en el cual se definen líneas especializadas en datos, direcciones y para control.

En la arquitectura tradicional de Intel (usada hasta modelos recientes), ese bus se llama
el Front Side Bus y es de tipo paralelo con 64 líneas de datos, 32 de direcciones además
de múltiples líneas de control que permiten la transmisión de datos entre el procesador y
el resto del sistema. Este esquema se ha utilizado desde el primer procesador de la
historia, con mejoras en la señalización que le permite funcionar con relojes de 333 Mhz
haciendo 4 tranferencias por ciclo.3

En algunos procesadores de AMD y en el Intel Core i7 se han usado otros tipos para el
bus principal de tipo serial. Entre estos se encuentra el bus HyperTransport que maneja
los datos en forma de paquetes usando una cantidad menor de líneas de comunicación,
permitiendo frecuencias de funcionamiento más altas.

Los microprocesadores de última generación de Intel y muchos de AMD poseen además


un controlador de memoria DDR en el interior del encapsulado lo que hace necesario la
implementación de buses de memoria del procesador hacia los módulos. Ese bus esta de
acuerdo a los estándares DDR de JEDEC y consisten en líneas de bus paralelo, para
datos, direcciones y control. Dependiendo de la cantidad de canales pueden existir de 1
a 3 buses de memoria.

[editar] Arquitecturas
• 65xx
o MOS Technology 6502
o Western Design Center 65xx
• ARM
• Altera Nios, Nios II
• AVR (puramente microcontroladores)
• EISC
• RCA 1802 (aka RCA COSMAC, CDP1802)
• DEC Alpha
• Intel
o Intel 4556, 4040
o Intel 8970, 8085, Zilog Z80
o Intel Itanium
o Intel i860
o Intel i515
• LatticeMico32
• M32R
• MIPS
• Motorola
o Motorola 6800
o Motorola 6809
o Motorola c115, ColdFire
o corelduo 15485
o sewcret ranses 0.2457
o Motorola 88000 (antecesor de la familia PowerPC con el IBM POWER)
• IBM POWER (antecesor de la familia PowerPC con el Motorola 88000)
o Familia PowerPC, G3, G4, G5
• NSC 320xx
• OpenRISC
• PA-RISC
• National Semiconductor SC/MP ("scamp")
• Signetics 2650
• SPARC
• SuperH family
• Transmeta Crusoe, Transmeta Efficeon (arquitectura VLIW, con emulador de la
IA32 de 32-bit Intel x86)
• INMOS Transputer
• x86
o Intel 8086, 8088, 80186, 80188 (arquitectura x86 de 16-bit con sólo
modo real)
o Intel 80286 (arquitectura x86 de 16-bit con modo real y modo protegido)
o IA-32 arquitectura x86 de 32-bits
o x86-64 arquitectura x86 de 64-bits
• Cambridge Consultants XAP

Interrupciones

§1 Sinopsis

Una petición de interrupción IRQ ("Interrupt Request") es una señal que se origina en un
dispositivo hardware (por ejemplo, un periférico), para indicar al procesador que algo requiere
su atención inmediata; se solicita al procesador que suspenda lo que está haciendo para
atender la petición.

Hemos señalado ( H2) que las interrupciones juegan un papel fundamental, en especial en
la operación de dispositivos E/S, ya que les permite enviar estas peticiones a la UCP. Sin ellas
el sistema debería chequear constantemente los dispositivos para comprobar su actividad, pero
las interrupciones permiten que los dispositivos puedan permanecer en silencio hasta el
momento que requieren atención del procesador. ¿Podría figurarse un sistema telefónico
donde hubiera que levantar periódicamente el auricular para comprobar si alguien nos llama?
[4].

Nota: Veremos que estas peticiones pueden ser generadas no solo por dispositivos
hardware, también por los programas, e incluso en circunstancias especiales (errores
generalmente) por el propio procesador. Resumimos que existen tres posibles orígenes de
estas peticiones: Hardware, Software, y del procesador.

§2 Principio de funcionamiento
Cuando un dispositivo reclama atención del procesador es para que este haga algo. Este
"algo" es lo que se conoce como servicio; controlador o gestor de la interrupción, ISR
("Interrupt service routine"). En cualquier caso se trata siempre de ejecutar un programa
situado en algún lugar de la memoria RAM o en la ROM-BIOS. Ocurre que las direcciones de
inicio de estos programas, que se conocen como vectores de interrupción, se copian en una
tabla de 1024 Bytes que se carga al principio de la memoria de usuario (direcciones 0000h a
0400h) durante el proceso de inicio del sistema ( H4), razón por la cual estas rutinas se
conocen también como servicios del BIOS.

La citada tabla se denomina tabla de vectores de interrupción IDT ("Interrupt Description


Table") y en sus 1024 bytes pueden almacenarse 256 vectores de 4 bytes. Es decir, los
vectores de interrupción son punteros de 32 bits, numerados de 0 a 255, que señalan las
direcciones donde comienza la rutina que atiende la interrupción [3].

Como veremos a continuación, el diseño del PC solo permite 16 interrupciones distintas, por lo
que puede parecer extraño que se hayan previsto 256 vectores para atenderlas. La razón es
que además de los servicios del BIOS propiamente dichos, se cargan las direcciones de inicio
de otras rutinas del Sistema Operativo, los denominados servicios del Sistema ( Servicios
del Sistema). Incluso es posible cargar direcciones para rutinas específicas de usuario.

Al diseñar el 8088, Intel estableció un reparto de estos vectores, reservando los 5 primeros
para uso interno del procesador (precisamente para atender las excepciones ). A
continuación estableció otros 27 de uso reservado, aunque no desveló ningún uso específico
para algunos de ellos. A partir de aquí, los vectores 32 a 255 estaban disponibles. El esquema
resultante se muestra en la tabla adjunta.

Vector
Dec. Hex Uso
0 0 Error: División por cero
Excepciones para depuración (ejecución paso a
1 1
paso)
2 2 Interrupción no enmascarable
3 3 Punto de ruptura interrupción (Instrucción INT)
4 4 Desbordamiento ("Overflow"). Utilizado cuando un
cálculo aritmético se desborda. Instrucción INTO
5 5 (reservado)
6 6 Código de instrucción no válido
7 7 Coprocesador no disponible
8 8 Fallo doble
9 9 (reservado -Rutina de atención del Teclado-)
10 A TSS no válido
11 B Segmento no disponible
12 C Excepción de pila
13 D Protección general
14 E Fallo de página
15 F (reservado)
16 1A Error de coprocesador
17-31 1B-1F (reservado)
32-
20-FF Disponibles para interrupciones enmascarables
255
Sin embargo, aunque teóricamente las interrupciones 0 a 31 estaban restringidas, IBM y
Microsoft utilizaron algunas de ellas sin respetar las indicaciones de Intel. En concreto, IBM y
Microsoft utilizaron algunas para los servicios BIOS ( H2.4.1). Es significativo que, a pesar
de haber sufrido ampliaciones, la especificación inicial se mantiene para las 31 interrupciones
iniciales. Lo que hace posible que pueda cargarse un Sistema PC-DOS 1.0 en una máquina
Pentium.

El "modus operandi" es como sigue: Cuando se recibe la petición de interrupción, el


procesador termina la instrucción que está ejecutando; guarda el contenido de los registros;
deshabilita el sistema de interrupciones; ejecuta el "servicio", y vuelve a su punto de ejecución.
El servicio suele terminar con una instrucción IRET ("Interrupt Return") que restituye el
contenido de los registros y vuelve a habilitar el sistema de interrupciones. En cierto sentido, el
proceso es similar al que ocurre cuando aparece la invocación de una función en el código de
un programa ( 4.4.6b).

En el párrafo anterior hemos indicado someramente el proceso cuando "se recibe" una petición,
pero cabe una cuestión: ¿Como se recibe la petición?. Hemos adelantado que estas peticiones
pueden ser generadas desde el software o incluso por el procesador, lo que nos conduce a que
en realidad las únicas que deben recibirse (desde el exterior) son las que denominadas
interrupciones hardware (que se originan en dispositivos externos al procesador). Antes de
describir brevemente el camino hasta que la solicitud es recibida por la UCP, permitidme
adelantar que para su gestión existen tres tipos de elementos de soporte:

• Ciertas líneas específicas (IRQ's) en el bus de control

• El controlador de interrupciones (PIC). Un procesador específico que realiza cierta


elaboración previa de las peticiones antes de entregar la señal a la UCP .

• Ciertas patillas específicas en el procesador .

El resumen del proceso es como sigue: Un periférico, tarjeta o dispositivo necesita atención; a
tal efecto pone en tensión baja una de las líneas IRQ del bus de control (que le había sido
asignada). La señal es recogida por el PIC, que la procesa, la clasifica, y envía una señal a
una de las patillas del procesador. A continuación el procesador se da por notificado y
pregunta que tipo de excepción debe atender. Como respuesta, PIC asigna un número de
servicio (0-256) en forma de un octeto que es colocado en el bus de datos, con lo que estamos
en el punto inicial del proceso.

Para la asignación del número de servicio a partir de una de las 16 solicitudes de las IRQ, el
PIC realiza un cierto proceso ("Interrupt Handling Routine") a partir de los datos de
programación iniciales y del estado actual del propio sistema de interrupciones. Por ejemplo,
puede estar procesándose el servicio de una interrupción, pero la rutina esta suspendida
momentáneamente porque se ha solicitado otra interrupción de prioridad más alta, o tal vez se
recibe otra interrupción del mismo periférico antes de haber atendido la anterior, Etc.

§3 Líneas de petición de interrupción

El bus de control dispone de líneas específicas para el sistema de interrupciones ( H2). En


el PC XT existen 8, numeradas del 0 al 7, aunque las dos primeras están asignadas al
temporizador y al teclado, con lo que solo quedaban 6 líneas para otros dispositivos, que
aparecen como tales en el bus de control (IRQ2- IRQ7). A partir del modelo AT se añadieron
otras 8 líneas, numeradas del 8 al 15, mediante un segundo procesador PIC , aunque la
tecnología empleada exigió colgarlo de la línea IRQ2, de forma que esta línea se dedica a
atender las interrupciones del segundo controlador a través de la línea 9 de este último, y la
línea 8 se dedicó al reloj de tiempo real, un dispositivo que no existía en los modelos XT.

Aunque internamente se manejan 16 líneas, no todas tienen contacto en los zócalos del bus
externo; Son las marcadas con asterisco (*) en la tabla que sigue . La razón de esta
ausencia en los zócalos de conexión es que son de asignación fija, y nadie más que ciertos
dispositivos instalado en la propia placa tiene que utilizarlas. En concreto la línea NMI está
asignada al mecanismo de control de paridad de la memoria; la línea 0 está asignada al
cronómetro del sistema ( H2) y la línea 1 al chip que controla el teclado (dispositivos que
pueden requerir atención urgente por parte del procesador). Es costumbre denominar IRQx a
las que tienen prolongación en el bus.

Teóricamente las restantes líneas podrían ser asignadas a cualquier nuevo dispositivo, pero en
la práctica algunas están reservadas a dispositivos estándar. Por ejemplo, IRQ3 está casi
siempre asignado al puerto serie COM2 y IRQ4 a COM1; IRQ6 al controlador estándar de
disquetes y IRQ7 al puerto de impresora LPT1. La tabla 1 muestra las asignaciones clásicas
para el XT y el AT.

Tabla-1
Nombre Int (hex) XT: Descripción AT: Descripción
NMI --- Paridad* Paridad*
0 08 Temporizador* Temporizador*
1 09 Teclado* Teclado*
IRQ2 0A Reservado Interrupciones 8 a 15 (PIC#2)
IRQ3 0B Puertos serie COM2/COM4 Puerto serie COM2/COM4
IRQ4 0C Puertos serie COM1/COM3 Puerto serie COM1/COM3
IRQ5 0D Disco duro Impresora secundaria LPT2
IRQ6 0E Disquete Disquete
IRQ7 0F Impresora primaria LPT1 Impresora primaria LPT1 [8]
8 70 No aplicable Reloj de tiempo real*
9 71 No aplicable Redirigido a IRQ2*
IRQ10 72 No aplicable no asignado
IRQ11 73 No aplicable no asignado
IRQ12 74 No aplicable Ratón PS2
13 75 No aplicable Coprocesador 80287*
IRQ14 76 No aplicable Contr. disco IDE primario
IRQ15 77 No aplicable Contr. disco IDE secundario

Cuando se instala un dispositivo E/S que puede necesitar atención del procesador, debe
asignársele una IRQ adecuada. Dicho en otras palabras, cuando requiera atención debe enviar
una señal en la línea IRQ especificada. Inicialmente esta asignación se efectuaba de forma
manual, por medio de puentes ("Jumpers") en la placa o dispositivo, pero actualmente esta
selección puede hacerse por software. Los dispositivos son de enchufar y usar PnP ("Plug and
play" ).

§3.1 A continuación se nuestra la distribución de líneas IRQ en un ordenador típico (AT), bajo
Windows-98SE [7].
Nota: Los usuarios de Windows 98 pueden comprobar la asignación de IRQ's a los
diversos dispositivos del sistema mediante el programa msinfo032.exe. Generalmente en
C:\Archivos de programa\Archivos comunes\Microsoft Shared\MSINFO

IRQ Utilización
0 Cronómetro del sistema
1 Teclado estándar de 101/102 teclas o MS Natural Keyboard
2 Controlador programable de interrupciones
3 Puerto de infrarrojos rápidos ThinkPad de IBM
4 Puerto de comunicaciones (COM1)
5 Crystal SoundFusion(tm) Game Device
6 Controlador estándar de disquetes
7 Puerto de impresora (LPT1)
8 Sistema CMOS/reloj en tiempo real
9 (libre)
10 (libre)
11 Marcador IRQ para manejo de PCI
11 Marcador IRQ para manejo de PCI
11 Marcador IRQ para manejo de PCI
11 Marcador IRQ para manejo de PCI
11 Controlador universal de host Intel 82371AB/EB PCI a USB
11 Crystal SoundFusion(tm) PCI Audio Accelerator
11 Lucent Win Modem
11 Intel(R) PRO/100 SP Mobile Combo Adapter
11 Texas Instruments PCI-1450 CardBus Controller
11 Texas Instruments PCI-1450 CardBus Controller
11 RAGE MOBILITY-M AGP (English)
12 Puerto de mouse compatible con PS/2
13 Procesador de datos numéricos
14 Controlador estándar para disco duro Bus Mastering IDE
15 Controlador estándar para disco duro Bus Mastering IDE

§3.2 Interrupciones en el ordenador anterior bajo Linux:

Nota: Los usuarios de Linux pueden consultar las interrupciones utilizadas en el sistema
en el fichero /proc/interrupts mediante el comando cat /proc/interrupts.
También mediante la utilidad dmesg en la forma dmesg | grep -i irq

IRQ Utilización
CPU0
0: 3407670 XT-PIC timer
1: 7149 XT-PIC keyboard
2: 0 XT-PIC cascade
8: 2 XT-PIC rtc
9: 1461 XT-PIC acpi
11: 2508 XT-PIC usb-uhci, Texas Instruments PCI1450, Texas
Instruments PCI1450 (#2), CS46XX
12: 74331 XT-PIC PS/2 Mouse
14: 90666 XT-PIC ide0
15: 50966 XT-PIC ide1
NMI: 0
LOC: 0
ERR: 0
MIS: 0

§4 Controlador PIC

Las peticiones hardware de interrupción del PC son manejadas por un chip, conocido como
PIC#1 ("Programmable Interrupt Controller"). Originariamente era un 8259A, que puede
manejar 8 peticiones (IRQ0/IRQ7), pero pronto se hizo evidente que eran un número
excesivamente corto, por lo que en 1984 IBM añadió un segundo controlador PIC#2 en el
modelo AT, que podía manejar las peticiones IRQ8 a IRQ15, aunque las interrupciones
utilizables resultantes no fuesen de 16 como cabría suponer, por las razones apuntadas en el
párrafo anterior.

§4.1 Nivel de prioridad

El PIC dispone de 16 niveles de prioridad, numerados del 0 al 15, de forma que los de número
más bajo se atienden antes que los de número más alto. La asignación a cada nivel es como
sigue:

Nivel Asign. Nivel Asign. Nivel Asign. Nivel Asign.


0 NMI 1 IRQ0 2 IRQ1 3 IRQ8
4 IRQ9 5 IRQ10 6 IRQ11 7 IRQ12
8 IRQ13 9 IRQ14 10 IRQ15 11 IRQ3
12 IRQ4 13 IRQ5 14 IRQ6 15 IRQ7

Como puede verse, la prioridad más alta se asigna a las interrupciones no enmascarables (NMI
), a las que nos referimos más adelante. A continuación se atienden IRQ0 e IRQ1; asignadas
como hemos visto al cronómetro del sistema y al teclado (el cronómetro no puede ser
interrumpido por nadie porque perdería la hora). Después se atienden las peticiones IRQ8 a
IRQ15 del controlador esclavo, que hereda la prioridad de IRQ2 de la que está colgado (en
realidad no existe IRQ2). A continuación se atienden las IRQ3 a IRQ7 de PIC#1. Las
peticiones de prioridad más baja son las del controlador estándar de disquetes (IRQ6) y las del
puerto de impresora LPT1 (IRQ7).

Físicamente, el 8259A es un chip de 28 patillas, 8 de las cuales conectan con las líneas IRQ0-
IRQ7; ocho para el bus de datos (D0-D7), una entrada INTA ("Interrupt Acknowledge") y una
salida INTR ("Interrupt Request"). Aparte de otras auxiliares, como tensión de alimentación y
masa. Como veremos a continuación , cuando el 8259A recibe una señal IRQ, activa la
señal INTR que es recibida por el procesador. Cuando este responde con un INTA, pone en el
bus de datos un byte en el rango 0/256, que es identificado a su vez por el procesador como un
número de interrupción.

Desde el punto de vista lógico, PIC #1 responde a las direcciones 020h-021h, mientras que
PIC#2 lo hace en 0A0h-0A1h. Cada PIC dispone de tres registros de 1 byte; IRR, ISR e IMR,
que en conjunto gobiernan las decisiones del dispositivo:
Registro de solicitud de interrupción IRR ("Interrupt Request Register"). Cada bit de este
registro controla el estado de una línea IRQ. Cuando se detecta una petición en una de estas
líneas, el bit correspondiente del IRR es pueto a 1.

Registro de interrupciones activas ISR ("In Service Register"). Cada bit indica si ya existe
una interrupción activada en la línea correspondiente.

Registro de máscara de interrupciones IMR ("Interrupt Mask Register"). También aquí cada
bit corresponde a una línea IRQ, e indica si esta permitida un interrupción de ese nivel en ese
momento.

El PIC es un dispositivo complejo que realiza varias tareas; a continuación se muestra un


resumen de ellas:

• Puesto que existen muchos dispositivos que pueden solicitar interrupciones, es


responsabilidad del PIC priorizarlas según el esquema indicado en el punto anterior,
cuando existen varias IRQ's simultáneas [5].

• Después de enviar una solicitud de interrupción y el procesador contesta que está listo
para atenderla, debe enviar un número de interrupción (número de vector).

• Mantiene un registro de que se está procesando una interrupción. Cuando esto


sucede, no envía más peticiones del mismo dispositivo al procesador hasta que este le
responde con una señal EOI ("End Of Interrupt"), indicando que la rutina de servicio
precedente ha terminado, o puede aceptar otra interrupción.

• Puede enmascarar de forma selectiva cualquiera de las 8 IRQ's que tiene conectadas
(como se verá más adelante, es la única forma de enmascarar las interrupciones no
enmascarables).

El 8259A tiene distintos modos de operación, uno de los cuales es el utilizado por los
diseñadores del PC; esta selección se realiza vía software en los momentos iniciales.
También se decide en este momento que número de interrupción deberá devolver el PIC en
respuesta a las señales recibidas en las líneas IRQ.

Puntos importantes a destacar es que, como se ha señalado, se trata de un dispositivo


programable; que esta programación es realizada por el BIOS en la fase de inicio, y que el PIC
es una parte fundamental del mecanismo de excepciones hardware.

§5 Patillas del procesador

Otro elemento que interviene en el mecanismo de excepciones son ciertas patillas del
procesador. Todos los miembros de la saga 8088 disponen de dos patillas, designadas INTR
y NMI, para este servicio específico ( H3.2.1). Sirven respectivamente para atender las
interrupciones enmascarables y no enmascarables (nos referimos a ellas inmediatamente). A
su vez, el procesador utiliza ciertas señales en algunas de sus patillas para generar un ciclo
INTA ("Interrupt Acknowledge"), que sirve para notificar al PIC que ha recibido la interrupción.

§6 Tipos de interrupción

Atendiendo a su origen, en el PC existen tres tipos de interrupciones: Interrupciones hardware;


interrupciones software , y excepciones del procesador .
§6.1 Las interrupciones hardware ocurren cuando un dispositivo necesita atención del
procesador y genera una señal eléctrica en la línea IRQ que tiene asignada. Esta señal es
recogida y procesada por el controlador de excepciones PIC antes de ser enviada al
procesador, lo que puede realizarse de dos formas, según el tipo de interrupción sea
enmascarable o no enmascarable.

§6.1.1 Interrupción enmascarable significa que, bajo control del software, el procesador
puede aceptar o ignorar (enmascarar) la señal de interrupción. Para ello se envía una señal a
la patilla INTR , y el procesador la atiende o la ignora en función del contenido de un bit (IF)
en un registro (FLAGS) que puede estar habilitado o deshabilitado ( H3.2). En el primer
caso, cuando se recibe la señal, el procesador concluye la instrucción que estuviese en
proceso y a continuación responde con una combinación de señales en algunas de sus patillas
componiendo una sucesión de dos señales INTA ("Interrupt Acknowledge" H3.2.1).

La primera señal es simplemente un aviso; la segunda es una petición para que el PIC
coloque en el bus de datos un Byte con el número de interrupción, de forma que el procesador
pueda localizar el servicio solicitado.

El valor recibido (0-255) es multiplicado por 4 para calcular la dirección del vector
correspondiente en la tabla de vectores de interrupción, lo que se realiza mediante un
desplazamiento binario de dos posiciones a la izquierda ( 4.9.3). A continuación, el
procesador salva en la pila los valores del registro de estado ( H3.2), del contador de
programa (PC) y del segmento de código (CS); deshabilita el bit IF del registro de estado, para
que la interrupción no pueda ser molestada con una nueva interrupción enmascarable hasta
que sea específicamente permitido, y finalmente ejecuta el servicio.

La penúltima secuencia de la rutina de servicio es enviar una señal de que la interrupción ha


terminado (EOI) para que el PIC pueda seguir enviando interrupciones. A continuación debe
restaurar los registros a su estado inicial (existente antes de que se produjera la interrupción).

La señal de terminación del servicio de la interrupción EOI ("End of interrupt") es la siguiente


secuencia:

MOV DX, PIC0


MOV AL, EOI
OUT DX, AL

La primera instrucción mueve el contenido PIC0 al registro DX (PIC0 es el nemónico de la


dirección más baja de puerto A0 = 0).

La segunda mueve el valor EOI (nemónico del valor 20h) al registro AL.

La tercera es una sentencia de escritura a puerto; escribe el contenido del registro AL (el valor
EOI puesto en la sentencia anterior) en el puerto señalado por el contenido del registro DX
(establecido en la primera instrucción).

Para facilitar el manejo de interrupciones, el 8088 y sucesores disponen de algunas


instrucciones específicas:

• IRET Retorno de interrupción ("Interrupt Return"). Recupera de la pila el contador de


programa PC; el segmento de código CS (lo que supone devolver el programa al punto
de ejecución original), y el registro de estado FLAGS (lo que supone devolver las
interrupciones enmascarables al estado inicial).

• CLI Limpiar la interrupción ("Clear Interrupt"); pone a cero el registro IF,


deshabilitando las interrupciones enmascarables.

• STI Es la instrucción opuesta ("Set Interrupt") pone a 1 el registro IF habilitando las


interrupciones enmascarables.

La idea importante a resaltar aquí, es que el PIC asocia un número entre 0 y 255 a cada
petición. Este número, que se conoce como número de interrupción, no debe ser confundido
con el número de línea IRQ's que realizó la solicitud. El número de interrupción sirve para
identificar el servicio mediante la tabla IDT . Una vez ejecutado el servicio, deben dejarse
las cosas como estaban para que el programa original pueda continuar su ejecución.

§6.1.2 Interrupción no enmascarable significa que la interrupción no puede ser deshabilitada


por software. Este tipo de interrupciones ocurren cuando se recibe una señal en la patilla NMI
("Nonmaskable Interrupt" §5 ) del procesador. Se reservan para casos en que es crítica la
respuesta, por ejemplo que se detecte un error de paridad en la memoria. Además son de
prioridad más alta que las enmascarables.

Nota: La única forma de enmascarar estas interrupciones es a través de circuitos externos


al procesador, por ejemplo a nivel del PIC.

Cuando el procesador recibe una de estas instrucciones no se genera ningún ciclo de


reconocimiento de la instrucción (INTA), y el procesador le asigna un 2 como número de
excepción.

§6.2 Interrupciones software

Los procesadores Intel de la gama x86 y compatibles, disponen de una instrucción INT que
permite generar por software cualquiera de los 256 tipos de interrupción anteriormente
descritos (§2 ). El proceso seguido es exactamente el mismo que si se recibe una
interrupción hardware en la patilla INTR, salvo que en este caso se conoce el tipo de
interrupción, y no se requiere ningún ciclo INTA. Por ejemplo, en lenguaje ensamblador, la
instrucción INT 21 invoca la interrupción 33d (21h), que en MS-DOS es la llamada a los
servicios del Sistema.

Este tipo de interrupciones son de prioridad más alta que las de hardware (enmascarables y no
enmascarables), de forma que si se recibe una interrupción hardware mientras que se ejecuta
una software, esta última tiene prioridad.

Este tipo de interrupciones son utilizadas tanto por el Sistema Operativo como por los
programas de usuario que pueden instalar las suyas particulares (hemos señalado , que
algunas de las 255 posiciones de la tabla de vectores de interrupción están desocupadas).
Precisamente, aquellas posiciones de la IDT que señalan a posiciones dentro de la ROM-BIOS
(por encima de la dirección F0000h H5.1) se refieren a interrupciones relacionadas con
servicios de la BIOS, mientras que las situadas en la zona de memoria convencional, se
refieren a interrupciones instaladas por el Sistema o los programas de aplicación.

§6.3 Excepciones del procesador


Durante el funcionamiento del procesador pueden ocurrir circunstancias excepcionales; es
usual citar como ejemplo el caso de una división por cero. En estos casos, el procesador
genera una excepción, que es tratada como si fuese una interrupción software (§6.2 ), con
la diferencia de que el número de interrupción asociado depende del tipo de excepción.

En el caso de la división por cero el número asociado es cero. Este era el único tipo de
excepción de procesador prevista en el 8088, pero en los modelos sucesivos de la saga x86 y
Pentium esta posibilidad fue ampliándose paulatinamente.

§6.5 Orden de prioridad

Las interrupciones tienen un orden de prioridad, de forma que si ocurren dos de forma
simultánea es atendida la de prioridad más alta. El orden en que se atienden es el siguiente:

1º: Excepciones del procesador.


2º: Interrupciones software.
3º: Interrupciones hardware no enmascarables.
4º: Interrupciones hardware enmascarables.

§7 Evolución

§7.1 El estándar PnP

El sistema de interrupciones es una excepción en lo que a evolución se refiere. A partir de la


introducción del segundo controlador 8259A en 1.984, el diseño ha permanecido invariable. La
razón es que su modificación supondría un cambio demasiado drástico en la arquitectura del
PC, con un parque de millones de sistemas y periféricos instalados con millones de programas
y Sistemas Operativos funcionando que no podrían ser trasladados "tal cual" a las nuevas
máquinas [6].

Puede decirse que desde su nacimiento, el PC arrastraba ciertas carencias congénitas, que
podían resumirse en escasez de Líneas de acceso directo a memoria DMA's ( H2.3); líneas
de interrupciones IRQ's; direcciones de puertos, y memoria convencional ( H5.1). El
resultado era que la configuración de los primeros sistemas era una pesadilla para los
instaladores, que debían configurar manualmente los dispositivos instalados poniendo y
quitando los fastidiosos "Jumpers" [1]. A pesar de todo, muchas veces el resultado era que
sencillamente no podía instalarse el nuevo dispositivo porque los canales DMA o líneas IRQ
que podían seleccionarse estaban ya ocupadas por otros.

Como consecuencia de tales deficiencias, en una conferencia sobre hardware para Windows
celebrada en marzo de 1.993, Microsoft e Intel propusieron un nuevo estándar que intentaba
simplificar el problema. Conocido como Plug and Play (PnP), enchufar y usar (precisamente
el "sueño" de los instaladores en la época), que se basa en varias premisas. La principal, que
los dispositivos fueran configurables por software mediante un programa especial de "Set-up".
Además tanto el hardware como el software (controladores de dispositivos cargados por el
Sistema), deberían ser reconfigurables dinámicamente para adaptarse a los cambios de
configuración. Por ejemplo, insertar o retirar un dispositivo PC-Card de un bus PCMCIA [2].

§7.2 Compartir IRQs


La especificación PnP antes comentada, aunque simplificaba las cosas, en realidad no resolvía
el problema de fondo: la escasez de ciertos recursos, principalmente líneas de interrupción.
Por lo que al desarrollar la interfaz PCI ( 6.4), Intel incluyó la posibilidad de que estos
dispositivos pudieran compartir la misma IRQ.

A continuación se muestra la distribución de IRQs en un sistema Linux dotado de bus PCI, tal
como se obtiene con el comando dmesg señalado anteriormente . (se han resaltado las
sentencias interesantes) :

PCI: Using IRQ router PIIX [8086/7110] at 00:02.0


PCI: Found IRQ 11 for device 00:03.0
PCI: Sharing IRQ 11 with 00:03.1
PCI: Sharing IRQ 11 with 01:00.0
Serial driver version 5.05c (2001-07-08) with HUB-6 MANY_PORTS
MULTIPORT SHARE_IRQ SERIAL_PCI enabled
PIIX4: not 100% native mode: will probe irqs later
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
PCI: Found IRQ 11 for device 00:02.2
usb-uhci.c: USB UHCI at I/O 0x1060, IRQ 11
PCI: Found IRQ 11 for device 00:03.0
PCI: Sharing IRQ 11 with 00:03.1
PCI: Sharing IRQ 11 with 01:00.0
PCI: Found IRQ 11 for device 00:03.1
PCI: Sharing IRQ 11 with 00:03.0
PCI: Sharing IRQ 11 with 01:00.0
Yenta IRQ list 0698, PCI irq11
Yenta IRQ list 0698, PCI irq11
eth0: AboCom FE2000VX (RealTek RTL8139) at 0xd0afa000,
00:4f:62:01:5c:7a, IRQ 11
eth1: Xircom: port 0x300, irq 3, hwaddr 00:10:A4:01:FF:F1
ttyS03 at port 0x02e8 (irq = 3) is a 16550A
PCI: Found IRQ 5 for device 00:07.0

Puede apreciarse que los dispositivos PCI comparten las IRQ11 e IRQ5. Como es habitual, las
controladoras IDE primaria y secundaria, identificadas aquí como ide0 e ide1, utilizan IRQ14 e
IRQ15. Los dispositivos identificados como eth0 y eth1 son sendas tarjetas de red. ttyS03 es
un puerto serie cuya UART es una 16550A ( 2.5.11). Yenta se refiere al tipo de
controladora de conexión de los dispositivos PCMCIA (se trata de un equipo portátil que
dispone de este tipo de bahías).

§8 Interrupciones en Windows

La descripción anterior corresponde a lo que ocurre en el hardware, o lo que es lo mismo, en


una aplicación trabajando en modo real ( H5.1); es la descripción clásica del mecanismo de
interrupciones de una aplicación bajo MS-DOS.

Hemos señalado que en los sistemas Windows, cada aplicación corre en una máquina virtual
MV ( 0.2), de modo que está más alejada del hardware que las aplicaciones que se ejecutan
en modo real. En este caso, las aplicaciones interactúan con dispositivos virtuales VDs
("Virtual devices") a través de controladores virtuales de dispositivos VxDs.
En concreto, el controlador PIC es virtualizado por el VPICD ("Virtual PIC Device"); este es
un controlador virtual proporcionado de forma estándar por Windows que emula las funciones
del auténtico controlador programable de interrupciones. Esta simulación implica reflejar las
interrupciones en las máquinas virtuales y simular E/S, por ejemplo, reconocer cuando una MV
emite un final de interrupción EOI ("End of interrupt").

Lo mismo que ocurre en modo real, durante la inicialización del controlador virtual VPICD, se
establece un manejador de excepciones por defecto para cada petición de interrupción (IRQ).
Estos manejadores determinan que máquina virtual será afectada y con que interrupción.
También arbitran los posibles conflictos cuando diversas máquinas virtuales intentan
desenmascarar la misma interrupción.

Cualquier interrupción no enmascarada cuando se inicia Windows es considerada una


interrupción global. Este tipo de interrupciones serán reflejadas en la máquina virtual que esté
en ejecución en ese momento (a su vez la MV puede enmascarar o no enmascarar esta IRQ).

Si una MV desenmascara una IRQ que fue enmascarada cuando se inició Windows, es
declarada propietaria de dicha interrupción, y la IRQ será reflejada exclusivamente en su
máquina propietaria (si alguna otra MV intenta desenmascarar dicha interrupción, Windows
terminará la segunda MV, y puede señalar la necesidad de reiniciar el sistema).

Si algún otro VxD virtualiza una petición IRQ, es su responsabilidad determinar que MV debe
recibir las interrupciones y arbitrar los posibles conflictos. Además, el controlador por virtual por
defecto VPICD dejará de proporcionar soporte para dicha IRQ.

§9 Webografía

The x86 interrupt list ftp.cs.cmu.edu/

Conocida también como RBIL ("Ralf Brown's Interrupt List"), esta página de la
universidad Carnegie Mellon en Pittsburg (Pensilvania - USA), es quizás la más
famosa y extensa fuente de información respecto al asunto de las
interrupciones; puertos Entrada/Salida; posiciones de memoria y otros detalles
técnicos de diseño de los PCs IBM y compatibles. Casi seis Megabytes de
información que incluyen algunos programas de utilidad.

Inicio.

[1] Un estudio de 1.993 sobre el costo total a 5 años para las empresas que utilizaban
sistemas PC-Windows, revelaba que este se elevaba a 37.000 USD, debidos principalmente a
su complejidad.

[2] PCMCIA "Personal Computer Memory Card International Association". Un estándar para
conexión de dispositivos en el PC, especialmente difundido en los portátiles, aunque también
existen adaptadores para los buses ISA y PCI de los equipos de sobremesa.

[3] Estas direcciones se guardan en forma segmentada ( H5.1) y la forma real de


almacenamiento es de palabras invertidas ("Back-words" H5), de forma que los dos bytes
más bajos contienen el desplazamiento, y los dos más altos el segmento. Esto supone que al
recuperarlos para ejecutar la interrupción, los dos bytes más bajos pasan al registro de
instrucción IP, y los dos siguientes al registro de segmento de código CS ( H3.2).

[4] El sistema opuesto al de interrupciones requiere que el procesador interrogue


periódicamente a los dispositivos, lo que evidentemente requiere mucho tiempo si el número de
candidatos potenciales es elevado. Este sistema se denomina de encuesta o interrogación
("Polling"); también como entrada programada, ya que la información llega del exterior cuando
se ha decidido aceptarla.

[5] El PIC puede incluso rotar las prioridades de forma que las de prioridad más baja tengan
alguna posibilidad de ser atendidas incluso si hay muchas de prioridades más altas. La
rotación de prioridad se ha comparado a dar la posibilidad de conectar a un teléfono que
estuviese siempre comunicando.

[6] De acuerdo con ciertos autores, una de las razones del tremendo éxito de la plataforma PC,
ha sido precisamente la estabilidad de su arquitectura, que ha posibilitado ejecutar programas
desarrollados hace 25 años en las máquinas actuales.

[7] Se trata de un equipo dotado de bus PCI ( 6.4) donde puede apreciarse como algunas
IRQs son compartidas por varios dispositivos. Esta capacidad de compartir una IRQ entre
distintos dispositivos (a la que nos referimos más adelante), es una característica del bus PCI,
que no es compartida por el bus tradicional ISA.

[8] Cuando está en modo ECP ( 2.5.2)

Potrebbero piacerti anche