Duda sobre manejo de interrupciones

Estoy leyendo sobre el manejo de interrupciones y tengo una duda que quisas me puedan ayudar.

Se que para atender una solicitud de interrupción la CPU realiza una serie de pasos:

1) Termina de ejecutar la instrucción actual.
2) Salva el valor actual del puntero de instrucción (IP o PC).
3) Identifica el controlador de E/S que realizó el pedido de interrupción.

Luego viene el paso que no entiendo que dice en mis notas de teórico lo siguiente:

4) Obtiene la dirección de la rutina de servicio de la interrupción correspondiente al controlador identificado. También hay distintas formas de implementar esto, aunque la mayoría son variaciones sobre el concepto de vector de interrupciones.

- la arquitectura Intel x86 utiliza un identificador de 8 bits del pedido de interrupción como índice a una tabla (el vector de interrupciones) que en cada entrada tiene la dirección absoluta de la rutina de interrupción asociada, formada por el segmento (valor a cargar en el registro de segmento de código) y el desplazamiento dentro del segmento (valor a cargar en el puntero de instrucción) de la dirección de memoria de la primer instrucción de la rutina de interrupción.

- la arquitectura SPARC utiliza también un identificador de 8 bits para el pedido de interrupción, el cuál multiplica por 16 antes de sumarle el valor contenido en un registro especial (el Trap Base Register, ó registro base de "traps", nombre que le da SPARC a las interrupciones) para formar la dirección a la cuál se va a pasar el control. De esta forma tenemos una especie de tabla que almacena las primeras 4 instrucciones (SPARC tiene instrucciones de largo fijo de 4 bytes) de cada rutina de interrupción.

Cuando dice "Obtiene la dirección de la rutina de servicio de la interrupción correspondiente al controlador identificado" ¿se refiere a que dicha rutina se encuentra en una posición de memoria del sistema? Es decir la CPU mantiene un puntero de instrucción (IP o PC) que va incrementando a medida que se van ejecutando las instrucciónes entonces si se está ejecutando una instrucción se procede como antes y obteniendo la dirección antes mensionada "saltaría" a otra posición de memoria y ejecutaría las instrucciones a partir de esa dirección? a eso se refiere ¿no? y no puedo entender las descripciones que están a continuación ya que hablan de un identificador de 8 bits para el pedido de interrupción cuando en un principio habla de que cada controlador de E/S tiene una salida que en mi caso la llaman INT que se pone a 1 cuando el controlador de E/S interrumpe y que la CPU también tiene una señal (que puede llamarse también INT) que es una señal de entrada que sirve para que la CPU pueda identificar un pedido de interrupción de algún controlador de E/S.

Si alguien puede explicarme esas descripciones le estoy eternamente agradecido ya que estoy bastante perdido con este tema.

Desde ya muchas gracias!
 
1º: Correcto con lo de 'saltar' a la rutina de interrupción (ISR de ahora en adelante). Cuando se produce una interrupción y la CPU está en condiciones de ejecutarla, mediante algún mecanismo obtiene el 'vector' o la dirección de memoria donde se encuentra dicha ISR, y salta a dicha rutina para ejecutarla.

2º: Hay más métodos que los que indicas. El más sencillo es el que usan los microcontroladores: cada interrupción tiene una dirección fija de la rutina. De esta manera, no hace falta obtener ninguna dirección, y se ejecuta dicha ISR de la manera más rápida posible (que es justo lo que interesa en dichos micros). Los más complejos llevan un controlador que permite no sólo programar dicha dirección (lo cual permite tener diferentes ISR's para una misma interrupción, según interese al soft) si no las prioridades. Cada controlador de ISR es un mundo, con sus ventajas e inconvenientes.

3º: No sólo hay interrupciones debido a periféricos. Los sistemas operativos tienden mucho a usar interrupciones 'software', además de otras que se pueden causar por la misma CPU, como errores de paridad o de instrucciones ilegales, por ejemplo.

Espero haberte podido ayudar un poco.
 
Muchas gracias por tu respuesta! Me quedó mucho mas claro. Ahora tengo una duda, según la arquitectura de Von Neumann se tienen tres bloques, la CPU, la memoria (RAM) y la entrada/salida (E/S) que se comunican mediante buses entonces mi duda es, en la RAM se tienen las instrucciones a ejecutar así como también las rutinas de interrupción y también la pila(o stack) para guardar el valor del puntero de instrucción actual para que una vez el pedido de interrupción fue atendido retornar al estado anterior? es decir todo se encuentra en la memoria en distintos segmentos de memoria (de la RAM) o están en otras unidades de memoria como pueden ser registros?

Gracias nuevamente, saludos!
 
Si la arquitectura es Von Neumann, instrucciones, datos, pila y stack estan en RAM.

Si la arquitectura es Harvard, Instrucciones, así como algunos datos están en memoria de programa, mientras el resto de datos, pila y stack están en RAM. También puede haber algunos datos en registros de E/S, e incluso hay sistemas que no tienen stack como tal en memoria (tienen unos registros especiales a tal efecto), y algunos trabajan sin pila.

Los vectores de interrupción pueden estar incluso en registros de E/S (en el periférico de control de ISR/IRQs).

El último sistema se usa muy mucho en microcontroladores y similares, mientras que el primero se usa mucho en microprocesadores.

Para acabar, está la arquitectura Motorola, que sólo tiene RAM, estando los registros de E/S y el resto como si fuese RAM. Es más sencillo, pero más limitado, y usualmente más lento. Sólo se aplica a microcontroladores, que yo sepa, y no lo recomiendo.

Por otro lado, están los sistemas multi bus (como los DSP, por ejemplo) o con espacio de direccionamiento multiuso (habitualmente se encuentra en procesadores o microcontroladores de alta gama, ARMs y similar) donde un mismo espacio de direccionamiento puede ubicar SRAM, DRAM, Flash, memoria de programa, pila, stack, periféricos de E/S, etc, y cada bloque tener sus propias características. Es el sistema más potente y flexible (y más complicado).

Y para rematar la faena, luego están las memorias caché de diferentes tipos... Otro mundo diferente.
 
hola saludos alguien me puede ayudar con un programa de interrupcion externa en el pic 18f4550 el programa lo quisiera en CSS Compiler.???
quiero hacer un contador del 0 al 99. quiero que se active un numero ala ves por cada interrupcion.(si le doy un pulso a la interrupcion, que se active un "1" en un display, si doy otro pulso, que se active el siguiente numero "2" y asi susesivamente hasta al 99)

si pudieras aportarme algun ejemplo por lo menos del 1 al cinco...graxiaz
 
Atrás
Arriba