Ensamblador
Ensamblador
Ensamblador
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.
Lenguaje ensamblador
De Wikipedia, la enciclopedia libre
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.
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.
[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:
• 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)
10110000 01100001
para los programadores de microprocesadores x86 es mucho más fácil reconocer dicha
instrucción empleando lenguaje ensamblador:
movb 0x61,%al
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,%
3000 a:</tt
[editar] Ejemplo 3
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
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
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
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.
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.
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.
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.
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.
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:
Almacenar un valor de 8 bytes desde el coprocesador cuando la mitad está fuera de los
limites del limite del segmento.
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
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).
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:
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!
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.
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.
ANEXOS
TECNOLOGÍA
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.
TECNOLOGÍA
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.
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.
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.
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.
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.
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.
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.
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.
Macroensambladores.
Microensambladores.
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.
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:
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.
Entrada/salida
De Wikipedia, la enciclopedia libre
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.
• 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
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.
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.
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.
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
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.
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.
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
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.
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.
[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.
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.
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:
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.
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
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.
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:
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.
• 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).
• 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.
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
§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 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).
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.
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.
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.
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:
§7 Evolución
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].
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) :
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
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.
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
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.
[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.