viernes, 25 de abril de 2008

IRQ y otras cuestiones

From acastells@... Wed Nov 19 18:24:16 1997
Bueno vamos por partes (como dijo Jack el Destripador):

TEMA IRQ:

Una IRQ és una interrupción. Una interrupción no es nada fisico que
exista en una placa o en un dispositivo. Una interrupción realmente no
es mas que una señal que envia un periferico a la CPU del PC, para
indicarle que está listo para realizar una transferencia de datos.

Cuando la CPU recibe una IRQ, ejecuta una RSI(Rutina de Servicio a la
Interrupcion). La RSI es un programa que esta fuera del programa
principal y unicamente se ejecuta si se recibe una interrupcion.

Una vez ejecutada totalmente la RSI se continua ejecutando el programa
principal hasta que la CPU reciba otra IRQ y vuelve a comenzar el
proceso.

Pero, si hay varios dispositivos conectados y cada uno utiliza una IRQ,
¿como identifica la CPU al dispositivo que la ha interrumpido?.

Esto se puede resolver utilizando varios métodos:

-Polling: una vez la CPU recibe una IRQ, entonces ve preguntando a todos
los perifericos quien ha interrumpido, hasta que encuentra uno que
contesta afirmativamente. Entonces ejecuta la RSI asignada a la IRQ que
utiliza el dispositivo.

-Utilización de hardware: Se trata de colocar un dispositivo (PIC) que
tiene conectado a sus entradas, todos y cada uno de los perifericos.
Cuando un periferico interrumpe, el PIC sabe por cual de sus entradas se
ha producido la interrupcion y entonces se lo dice a la CPU. Este es el
metodo usado por los PCs (aunque usan dos PICS en lugar de uno).

-Daisy-Chain: Se trata de interconectar todos los perifericos. Cada
periferico tiene una entrada (IEI) y una salida (IEO), ademas de las
salidas de datos, etc. Cuando uno de los perifericos interrumpe, activa
su salida IEO. Esto hace que la IEI del siguiente periferico se active,
activando a su vez su IEO. De esta forma se propagan estas señales y se
van desactivando los perifericos excepto el que ha interrumpido.

Existen otras cuestiones acerca de este tema: ¿como sabe la CPU donde
encontrar la RSI de cada periferico?, ¿La CPU debe atender SIEMPRE al
periferico que interrumpe? Si interrumpe mas de un periferico a la vez,
¿Cual debe ser atendido en primer lugar?......

Si te interesa el tema dimelo que intentare explicartelo. No se tu nivel
de conocimientos, asi que no se si te habra servido de algo todo lo que
he escrito (espero que si).

TEMA DIRECCION DEL PUERTO DE E/S

La direccion de un puerto de E/S no es mas que una direccion de memoria.
Cuando realizas un acceso a un puerto de E/S, la misma CPU ya sabe que
no es un direccion "normal" de memoria sino que te diriges a un
periferico. Esta direccion de memoria normalmente es una zona de memoria
que lleva incorporada el propio periferico.

Ademas un periferico puede tener mas de un puerto accesible de una forma
u otra. Puede que exista una zona en la memoria destinada a proporcionar
informacion a la CPU (o al usuario) del estado actual del periferico
(registro de estado). Suele haver otra zona de memoria en la que la CPU
escribe datos para indicarle al periferico lo que debe hacer en cada
momento (o simplemente para configurar un modo de trabajo). Normalmente
este registro se llama registro de control. Ademas debe existir un
puerto por el cual se transmitan y reciban datos entre el periferico y
la CPU. Todas estas zonas de memoria que he nombrado son puertos.

TEMA DMA

DMA son las sigla de Direct Memory Acces. Este es un metodo para
agilizar las transferencias de datos entre perifericos y memoria. De
esta forma la CPU no interviene para nada.

Existe un Controlador de DMA que es el que se encarga de gestionar todos
los accesos a memoria, ya sean desde el periferico hacia la memoria (o
al reves) o bien sean de lectura o de escritura.

La CPU deja libres los buses de datos y de memoria (pone sus salidas en
Tri-state: estado que no es un 1 logico pero tampoco un 0 logico) y cede
en control al Controlador de DMA. Cuando ha acabado la transferencia el
controlador devuelve el control de los buses a la CPU.

Respecto al tema de algun libro que hable de todo esto, existe uno que
es el recomendado por mis profesores de Informatica Industrial: EL PC
INTERNO. Creo que la editorial es Marcombo pero no estoy muy seguro.